From d5076e142aa090793dd6a2ea44fa22b4f968844d Mon Sep 17 00:00:00 2001 From: Mark Stacey Date: Wed, 11 Nov 2020 18:33:11 -0330 Subject: [PATCH] Prevent user from getting stuck on opt in page (#9856) Failed metric events on the opt-in page no longer leave the user stuck on that page. If the metric events fail, they still bubble up as errors to be caught by Sentry and logged to the console, but the user is still brought to the next page. Fixes #9800 --- .../metametrics-opt-in.component.js | 88 ++++++++++--------- 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/ui/app/pages/first-time-flow/metametrics-opt-in/metametrics-opt-in.component.js b/ui/app/pages/first-time-flow/metametrics-opt-in/metametrics-opt-in.component.js index d30ba7893..65ea159e1 100644 --- a/ui/app/pages/first-time-flow/metametrics-opt-in/metametrics-opt-in.component.js +++ b/ui/app/pages/first-time-flow/metametrics-opt-in/metametrics-opt-in.component.js @@ -101,57 +101,59 @@ export default class MetaMetricsOptIn extends Component {
{ - setParticipateInMetaMetrics(false).then(() => { - const promise = - participateInMetaMetrics === true - ? metricsEvent({ - eventOpts: { - category: 'Onboarding', - action: 'Metrics Option', - name: 'Metrics Opt Out', - }, - isOptIn: true, - }) - : Promise.resolve() + onCancel={async () => { + await setParticipateInMetaMetrics(false) - promise.then(() => { - history.push(nextRoute) - }) - }) + try { + if (participateInMetaMetrics === true) { + await metricsEvent({ + eventOpts: { + category: 'Onboarding', + action: 'Metrics Option', + name: 'Metrics Opt Out', + }, + isOptIn: true, + }) + } + } finally { + history.push(nextRoute) + } }} cancelText={t('noThanks')} hideCancel={false} - onSubmit={() => { - setParticipateInMetaMetrics(true).then(([_, metaMetricsId]) => { - const promise = - participateInMetaMetrics === false - ? metricsEvent({ - eventOpts: { - category: 'Onboarding', - action: 'Metrics Option', - name: 'Metrics Opt In', - }, - isOptIn: true, - }) - : Promise.resolve() - - promise - .then(() => { - return metricsEvent({ + onSubmit={async () => { + const [, metaMetricsId] = await setParticipateInMetaMetrics( + true, + ) + try { + const metrics = [] + if (participateInMetaMetrics === false) { + metrics.push( + metricsEvent({ eventOpts: { category: 'Onboarding', - action: 'Import or Create', - name: firstTimeSelectionMetaMetricsName, + action: 'Metrics Option', + name: 'Metrics Opt In', }, isOptIn: true, - metaMetricsId, - }) - }) - .then(() => { - history.push(nextRoute) - }) - }) + }), + ) + } + metrics.push( + metricsEvent({ + eventOpts: { + category: 'Onboarding', + action: 'Import or Create', + name: firstTimeSelectionMetaMetricsName, + }, + isOptIn: true, + metaMetricsId, + }), + ) + await Promise.all(metrics) + } finally { + history.push(nextRoute) + } }} submitText={t('affirmAgree')} submitButtonType="primary"