Commit a2327632 authored by Ray Schamp's avatar Ray Schamp

Handle relaunch requests from the iframe

Only attach the message listener when the modal is displaying. This prevents multiple listeners being set up by multiple registration components on the page.

Also, scope the `onMessage` handler to that component's iframe, so that we don't respond to other component's messages.
parent b9ecbae5
......@@ -13,13 +13,27 @@ var Registration = React.createClass({
},
onMessage: function (e) {
if (e.origin != window.location.origin) return;
if (e.source != this.refs.registrationIframe.contentWindow) return;
if (e.data == 'registration-done') this.props.onRegistrationDone();
if (e.data == 'registration-relaunch') {
this.refs.registrationIframe.contentWindow.location.reload();
}
},
toggleMessageListener: function (present) {
if (present) {
window.addEventListener('message', this.onMessage);
} else {
window.removeEventListener('message', this.onMessage);
}
},
componentDidMount: function () {
window.addEventListener('message', this.onMessage);
if (this.props.isOpen) this.toggleMessageListener(true);
},
componentDidUpdate: function (prevProps) {
this.toggleMessageListener(this.props.isOpen && !prevProps.isOpen);
},
componentWillUnmount: function () {
window.removeEventListener('message', this.onMessage);
this.toggleMessageListener(false);
},
render: function () {
var frameSettings = {
......@@ -32,7 +46,7 @@ var Registration = React.createClass({
onRequestClose={this.props.onRequestClose}
className="registration"
frameSettings={frameSettings}>
<iframe src="/accounts/standalone-registration/" {...frameSettings} />
<iframe ref="registrationIframe" src="/accounts/standalone-registration/" {...frameSettings} />
</Modal>
);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment