From 02aebc2e03d045f919d790de9fc0c5d8b7e2f698 Mon Sep 17 00:00:00 2001 From: ricky Date: Wed, 6 Nov 2019 12:04:44 -0500 Subject: [PATCH] Add onbeforeunload and have it call onCancel (#7335) * Add onbeforeunload and have it call onCancel * Address PR feedback * Get integration tests passing again * Add underscores * Add ENVIRONMENT_TYPE_NOTIFICATION check * Add _beforeUnload + metricsEvent --- .../provider-page-container.component.js | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/ui/app/components/app/provider-page-container/provider-page-container.component.js b/ui/app/components/app/provider-page-container/provider-page-container.component.js index b89135806..a0a2a7ac4 100644 --- a/ui/app/components/app/provider-page-container/provider-page-container.component.js +++ b/ui/app/components/app/provider-page-container/provider-page-container.component.js @@ -2,6 +2,8 @@ import PropTypes from 'prop-types' import React, {PureComponent} from 'react' import { ProviderPageContainerContent, ProviderPageContainerHeader } from '.' import { PageContainerFooter } from '../../ui/page-container' +import { ENVIRONMENT_TYPE_NOTIFICATION } from '../../../../../app/scripts/lib/enums' +import { getEnvironmentType } from '../../../../../app/scripts/lib/util' export default class ProviderPageContainer extends PureComponent { static propTypes = { @@ -20,6 +22,9 @@ export default class ProviderPageContainer extends PureComponent { }; componentDidMount () { + if (getEnvironmentType(window.location.href) === ENVIRONMENT_TYPE_NOTIFICATION) { + window.addEventListener('beforeunload', this._beforeUnload) + } this.context.metricsEvent({ eventOpts: { category: 'Auth', @@ -29,6 +34,27 @@ export default class ProviderPageContainer extends PureComponent { }) } + _beforeUnload () { + const { origin, rejectProviderRequestByOrigin } = this.props + this.context.metricsEvent({ + eventOpts: { + category: 'Auth', + action: 'Connect', + name: 'Cancel Connect Request Via Notification Close', + }, + }) + this._removeBeforeUnload() + rejectProviderRequestByOrigin(origin) + } + + _removeBeforeUnload () { + window.removeEventListener('beforeunload', this._beforeUnload) + } + + componentWillUnmount () { + this._removeBeforeUnload() + } + onCancel = () => { const { origin, rejectProviderRequestByOrigin } = this.props this.context.metricsEvent({ @@ -38,6 +64,7 @@ export default class ProviderPageContainer extends PureComponent { name: 'Canceled', }, }) + this._removeBeforeUnload() rejectProviderRequestByOrigin(origin) } @@ -50,6 +77,7 @@ export default class ProviderPageContainer extends PureComponent { name: 'Confirmed', }, }) + this._removeBeforeUnload() approveProviderRequestByOrigin(origin) }