diff options
Diffstat (limited to 'src/app/MainScreenHeader.jsx')
-rw-r--r-- | src/app/MainScreenHeader.jsx | 60 |
1 files changed, 50 insertions, 10 deletions
diff --git a/src/app/MainScreenHeader.jsx b/src/app/MainScreenHeader.jsx index 313adcd..49952f7 100644 --- a/src/app/MainScreenHeader.jsx +++ b/src/app/MainScreenHeader.jsx @@ -20,6 +20,7 @@ * * ECOMP is a trademark and service mark of AT&T Intellectual Property. */ + import React, {Component} from 'react'; import {connect} from 'react-redux'; import FontAwesome from 'react-fontawesome'; @@ -30,7 +31,7 @@ import GlobalAutoCompleteSearchBar from 'app/globalAutoCompleteSearchBar/GlobalA import {postAnalyticsData} from 'app/analytics/AnalyticsActions.js'; import GlobalInlineMessageBar from 'app/globalInlineMessageBar/GlobalInlineMessageBar.jsx'; import {getClearGlobalMessageEvent} from 'app/globalInlineMessageBar/GlobalInlineMessageBarActions.js'; -import {externalUrlRequest, externalMessageRequest} from 'app/contextHandler/ContextHandlerActions.js'; +import {externalUrlRequest, externalMessageRequest, getSubscriptionPayload} from 'app/contextHandler/ContextHandlerActions.js'; import { filterBarActionTypes @@ -63,14 +64,18 @@ const mapStateToProps = ({mainWrapper}) => { showMenu = false, toggleButtonActive = false, externalRequestFound = {}, - secondaryTitle = '' + secondaryTitle = '', + subscriptionPayload = {}, + subscriptionEnabled = false } = mainWrapper; return { showMenu, toggleButtonActive, externalRequestFound, - secondaryTitle + secondaryTitle, + subscriptionPayload, + subscriptionEnabled }; }; @@ -95,6 +100,9 @@ const mapActionsToProps = (dispatch) => { }, onExternalMessageRecieved: (messageJson) => { dispatch(externalMessageRequest(messageJson)); + }, + onGetSubscriptionPayload: () => { + dispatch(getSubscriptionPayload()); } }; }; @@ -104,7 +112,8 @@ class MainScreenHeader extends Component { showMenu: React.PropTypes.bool, toggleButtonActive: React.PropTypes.bool, externalRequestFound: React.PropTypes.object, - secondaryTitle: React.PropTypes.string + secondaryTitle: React.PropTypes.string, + subscriptionPayload: React.PropTypes.object }; navigationLinkAndCurrentPathMatch(location, to) { @@ -134,6 +143,7 @@ class MainScreenHeader extends Component { } } componentWillMount() { + this.props.onGetSubscriptionPayload(); if(this.props.match.params.externalUrl !== undefined && this.isValidExternalURL(this.props.match.params.externalUrl)) { this.props.onExternalUrlRequest(this.props.match.params.externalUrl); @@ -164,9 +174,22 @@ class MainScreenHeader extends Component { nextProps.externalRequestFound !== undefined && nextProps.externalRequestFound.suggestion !== undefined) { changeUrlAddress(nextProps.externalRequestFound.suggestion, nextProps.history); } + + if (nextProps.subscriptionEnabled) { + if (nextProps.subscriptionPayload !== this.props.subscriptionPayload && + Object.keys(nextProps.subscriptionPayload).length > 0) { + var getWindowUrl = function (url) { + var split = url.split('/'); + return split[0] + '//' + split[2]; + }; + window.parent.postMessage( + JSON.stringify(nextProps.subscriptionPayload), + getWindowUrl(document.referrer)); + } + } } - receiveMessage(event) { + receiveMessage(event, $this) { function isJson(str) { try { JSON.parse(str); @@ -175,16 +198,33 @@ class MainScreenHeader extends Component { } return true; } - let messageData = event.data.message; - if(isJson(messageData)) { - this.props.onExternalMessageRecieved(JSON.parse(messageData)); + if(isJson(event.data)) { + let messageData = JSON.parse(event.data); + if(isJson(messageData.message)) { + $this.props.onExternalMessageRecieved(messageData.message); + } } + } componentDidMount() { - window.addEventListener('message', this.receiveMessage, false); + //TODO Move this logic to the component will receive props. + //Check if the event lister is available and if the subscription is + // enabled before registering for it + if(document.referrer) { + var $this = this; + window.addEventListener('message', function (e) { + $this.receiveMessage(e, $this); + }, false); + } } componentWillUnmount() { - window.removeEventListener('message', this.receiveMessage); + if(this.props.subscriptionEnabled) { + var $this = this; + window.removeEventListener('message', function (e) { + $this.receiveMessage(e, $this); + } + ); + } } render() { |