From 598b96b6e8ce62bf76f3ccb830ac04172aec2f17 Mon Sep 17 00:00:00 2001 From: Anders Kaseorg Date: Mon, 2 Mar 2020 18:36:52 -0800 Subject: [PATCH] webview: Wait for dom-ready before sending messages. Fixes tests/test-add-organization.js. Signed-off-by: Anders Kaseorg --- app/renderer/js/components/webview.ts | 7 ++++++- app/renderer/js/main.ts | 6 +++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/renderer/js/components/webview.ts b/app/renderer/js/components/webview.ts index 71b26714..25a667fd 100644 --- a/app/renderer/js/components/webview.ts +++ b/app/renderer/js/components/webview.ts @@ -25,6 +25,7 @@ class WebView extends BaseComponent { customCSS: string; $webviewsContainer: DOMTokenList; $el: Electron.WebviewTag; + domReady?: Promise; // This is required because in main.js we access WebView.method as // webview[method]. @@ -56,6 +57,9 @@ class WebView extends BaseComponent { init(): void { this.$el = this.generateNodeFromTemplate(this.template()) as Electron.WebviewTag; + this.domReady = new Promise(resolve => { + this.$el.addEventListener('dom-ready', () => resolve(), true); + }); this.props.$root.append(this.$el); this.registerListeners(); @@ -292,7 +296,8 @@ class WebView extends BaseComponent { this.init(); } - send(channel: string, ...param: any[]): void { + async send(channel: string, ...param: any[]): Promise { + await this.domReady; this.$el.send(channel, ...param); } } diff --git a/app/renderer/js/main.ts b/app/renderer/js/main.ts index 3d8064cc..4a82b65f 100644 --- a/app/renderer/js/main.ts +++ b/app/renderer/js/main.ts @@ -306,7 +306,7 @@ class ServerManagerView { dialog.showErrorBox(title, content); if (DomainUtil.getDomains().length === 0) { // no orgs present, stop showing loading gif - this.openSettings('AddServer'); + await this.openSettings('AddServer'); } } } @@ -554,14 +554,14 @@ class ServerManagerView { this.activateTab(this.functionalTabs[tabProps.name]); } - openSettings(nav = 'General'): void { + async openSettings(nav = 'General'): Promise { this.openFunctionalTab({ name: 'Settings', materialIcon: 'settings', url: `file://${rendererDirectory}/preference.html#${nav}` }); this.$settingsButton.classList.add('active'); - this.tabs[this.functionalTabs.Settings].webview.send('switch-settings-nav', nav); + await this.tabs[this.functionalTabs.Settings].webview.send('switch-settings-nav', nav); } openAbout(): void {