X-Git-Url: https://gerrit.onap.org/r/gitweb?p=aai%2Fsparky-fe.git;a=blobdiff_plain;f=src%2Fapp%2FMainScreenHeader.jsx;h=912a5adbf45b7d1bd6a57166283e017978c4e9e9;hp=e3ed257814b00016e3ba9c7164d24dba3309436c;hb=9f9553bdf90db2a02a742c4e038b2c1600c96036;hpb=bca1bdc7d52b01ede5c0e85f06cd6c64e5aaab57 diff --git a/src/app/MainScreenHeader.jsx b/src/app/MainScreenHeader.jsx index e3ed257..912a5ad 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'; @@ -28,9 +29,9 @@ import Button from 'react-bootstrap/lib/Button.js'; import Modal from 'react-bootstrap/lib/Modal.js'; import GlobalAutoCompleteSearchBar from 'app/globalAutoCompleteSearchBar/GlobalAutoCompleteSearchBar.jsx'; import {postAnalyticsData} from 'app/analytics/AnalyticsActions.js'; -import GlobalInlineMessageBar from 'app/GlobalInlineMessageBar/GlobalInlineMessageBar.jsx'; +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) { @@ -126,6 +135,7 @@ class MainScreenHeader extends Component { return false; } } + isValidExternalURL(url) { if(decodeURIComponent(url).indexOf('&') > 0 ) { return true; @@ -133,12 +143,15 @@ class MainScreenHeader extends Component { return false; } } + 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); } } + componentWillReceiveProps(nextProps) { if (this.props.location && this.props.location.pathname !== @@ -164,9 +177,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 +201,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() {