diff --git a/src/dialogs/make-dialog-manager.ts b/src/dialogs/make-dialog-manager.ts index 6a780e0189..1c0f954a14 100644 --- a/src/dialogs/make-dialog-manager.ts +++ b/src/dialogs/make-dialog-manager.ts @@ -104,6 +104,12 @@ export const showDialog = async ( addHistory ); } + const dialogIndex = OPEN_DIALOG_STACK.findIndex( + (state) => state.dialogTag === dialogTag + ); + if (dialogIndex !== -1) { + OPEN_DIALOG_STACK.splice(dialogIndex, 1); + } OPEN_DIALOG_STACK.push({ element, root, @@ -173,8 +179,10 @@ export const closeLastDialog = async () => { export const closeAllDialogs = async () => { for (let i = OPEN_DIALOG_STACK.length - 1; i >= 0; i--) { - // eslint-disable-next-line no-await-in-loop - const closed = await closeDialog(OPEN_DIALOG_STACK[i].dialogTag); + const closed = + !OPEN_DIALOG_STACK[i] || + // eslint-disable-next-line no-await-in-loop + (await closeDialog(OPEN_DIALOG_STACK[i].dialogTag)); if (!closed) { return false; }