diff --git a/src/components/dialogHelper/dialogHelper.js b/src/components/dialogHelper/dialogHelper.js index 80b269fed5..130a1742cb 100644 --- a/src/components/dialogHelper/dialogHelper.js +++ b/src/components/dialogHelper/dialogHelper.js @@ -57,6 +57,7 @@ import '../../assets/css/scrollstyles.scss'; if ((shouldClose || !isOpened(dlg)) && unlisten) { unlisten(); + unlisten = null; } if (shouldClose) { @@ -64,6 +65,22 @@ import '../../assets/css/scrollstyles.scss'; } } + function finishClose() { + if (unlisten) { + unlisten(); + unlisten = null; + } + + dlg.dispatchEvent(new CustomEvent('close', { + bubbles: false, + cancelable: false + })); + + resolve({ + element: dlg + }); + } + function onBackCommand(e) { if (e.detail.command === 'back') { e.preventDefault(); @@ -79,6 +96,7 @@ import '../../assets/css/scrollstyles.scss'; if (unlisten) { unlisten(); + unlisten = null; } removeBackdrop(dlg); @@ -92,9 +110,13 @@ import '../../assets/css/scrollstyles.scss'; const state = history.location.state || {}; if (state.dialogs?.length > 0) { if (state.dialogs[state.dialogs.length - 1] === hash) { + unlisten = history.listen(finishClose); history.back(); } else if (state.dialogs.includes(hash)) { console.warn('[dialogHelper] dialog "%s" was closed, but is not the last dialog opened', hash); + + unlisten = history.listen(finishClose); + // Remove the closed dialog hash from the history state history.replace( `${history.location.pathname}${history.location.search}`, @@ -123,18 +145,9 @@ import '../../assets/css/scrollstyles.scss'; } } - //resolve(); - // if we just called history.back(), then use a timeout to allow the history events to fire first - setTimeout(() => { - dlg.dispatchEvent(new CustomEvent('close', { - bubbles: false, - cancelable: false - })); - - resolve({ - element: dlg - }); - }, 1); + if (!unlisten) { + finishClose(); + } } dlg.addEventListener('_close', onDialogClosed); diff --git a/src/components/playback/playersettingsmenu.js b/src/components/playback/playersettingsmenu.js index efeef4f354..c7f8f5a6da 100644 --- a/src/components/playback/playersettingsmenu.js +++ b/src/components/playback/playersettingsmenu.js @@ -238,7 +238,6 @@ function showWithUser(options, player, user) { return actionsheet.show({ items: menuItems, - resolveOnClick: true, positionTo: options.positionTo }).then(function (id) { return handleSelectedOption(id, options, player);