diff --git a/src/components/alert.js b/src/components/alert.js
index 3d967b55a9..f6339489f3 100644
--- a/src/components/alert.js
+++ b/src/components/alert.js
@@ -1,4 +1,4 @@
-
+import { appRouter } from './appRouter';
import browser from '../scripts/browser';
import dialog from './dialog/dialog';
import globalize from '../scripts/globalize';
@@ -10,7 +10,7 @@ import globalize from '../scripts/globalize';
return originalString.replace(reg, strWith);
}
- export default function (text, title) {
+ export default async function (text, title) {
let options;
if (typeof text === 'string') {
options = {
@@ -22,7 +22,9 @@ import globalize from '../scripts/globalize';
}
if (browser.tv && window.alert) {
+ await appRouter.ready();
alert(replaceAll(options.text || '', '
', '\n'));
+ return Promise.resolve();
} else {
const items = [];
@@ -35,8 +37,6 @@ import globalize from '../scripts/globalize';
options.buttons = items;
return dialog.show(options);
}
-
- return Promise.resolve();
}
/* eslint-enable indent */
diff --git a/src/components/appRouter.js b/src/components/appRouter.js
index 5a89deca54..aa869b7cc6 100644
--- a/src/components/appRouter.js
+++ b/src/components/appRouter.js
@@ -24,6 +24,7 @@ class AppRouter {
isDummyBackToHome;
msgTimeout;
popstateOccurred = false;
+ promiseShow;
resolveOnNextShow;
previousRoute = {};
/**
@@ -122,11 +123,24 @@ class AppRouter {
}
}
- back() {
- page.back();
+ ready() {
+ return this.promiseShow || Promise.resolve();
}
- show(path, options) {
+ async back() {
+ if (this.promiseShow) await this.promiseShow;
+
+ this.promiseShow = new Promise((resolve) => {
+ this.resolveOnNextShow = resolve;
+ page.back();
+ });
+
+ return this.promiseShow;
+ }
+
+ async show(path, options) {
+ if (this.promiseShow) await this.promiseShow;
+
// ensure the path does not start with '#!' since the router adds this
if (path.startsWith('#!')) {
path = path.substring(2);
@@ -146,17 +160,25 @@ class AppRouter {
}
}
- return new Promise((resolve) => {
+ this.promiseShow = new Promise((resolve) => {
this.resolveOnNextShow = resolve;
- page.show(path, options);
+ // Schedule a call to return the promise
+ setTimeout(() => page.show(path, options), 0);
});
+
+ return this.promiseShow;
}
- showDirect(path) {
- return new Promise(function(resolve) {
+ async showDirect(path) {
+ if (this.promiseShow) await this.promiseShow;
+
+ this.promiseShow = new Promise((resolve) => {
this.resolveOnNextShow = resolve;
- page.show(this.baseUrl() + path);
+ // Schedule a call to return the promise
+ setTimeout(() => page.show(this.baseUrl() + path), 0);
});
+
+ return this.promiseShow;
}
start(options) {
@@ -414,6 +436,7 @@ class AppRouter {
onViewShow() {
const resolve = this.resolveOnNextShow;
if (resolve) {
+ this.promiseShow = null;
this.resolveOnNextShow = null;
resolve();
}
diff --git a/src/components/confirm/confirm.js b/src/components/confirm/confirm.js
index 1978324e7c..7fe7fb9832 100644
--- a/src/components/confirm/confirm.js
+++ b/src/components/confirm/confirm.js
@@ -1,3 +1,4 @@
+import { appRouter } from '../appRouter';
import browser from '../../scripts/browser';
import dialog from '../dialog/dialog';
import globalize from '../../scripts/globalize';
@@ -6,7 +7,7 @@ function replaceAll(str, find, replace) {
return str.split(find).join(replace);
}
-function nativeConfirm(options) {
+async function nativeConfirm(options) {
if (typeof options === 'string') {
options = {
title: '',
@@ -15,6 +16,7 @@ function nativeConfirm(options) {
}
const text = replaceAll(options.text || '', '
', '\n');
+ await appRouter.ready();
const result = window.confirm(text);
if (result) {
diff --git a/src/components/dialogHelper/dialogHelper.js b/src/components/dialogHelper/dialogHelper.js
index 8a6a22fd15..fbaf86a024 100644
--- a/src/components/dialogHelper/dialogHelper.js
+++ b/src/components/dialogHelper/dialogHelper.js
@@ -184,7 +184,9 @@ import '../../assets/css/scrollstyles.scss';
return dlg.getAttribute('data-history') === 'true';
}
- export function open(dlg) {
+ export async function open(dlg) {
+ await appRouter.ready();
+
if (globalOnOpenCallback) {
globalOnOpenCallback(dlg);
}