diff --git a/src/public/javascripts/services/tab_context.js b/src/public/javascripts/services/tab_context.js index bf3079613..30537e84b 100644 --- a/src/public/javascripts/services/tab_context.js +++ b/src/public/javascripts/services/tab_context.js @@ -17,6 +17,13 @@ class TabContext extends Component { this.tabId = tabId || utils.randomString(4); } + setEmpty() { + this.triggerEvent('tabNoteSwitched', { + tabId: this.tabId, + notePath: this.notePath + }); + } + async setNote(inputNotePath, triggerSwitchEvent = true) { const notePath = await treeService.resolveNotePath(inputNotePath); diff --git a/src/public/javascripts/services/tab_manager.js b/src/public/javascripts/services/tab_manager.js index e7748f933..d7494c1be 100644 --- a/src/public/javascripts/services/tab_manager.js +++ b/src/public/javascripts/services/tab_manager.js @@ -173,13 +173,15 @@ export default class TabManager extends Component { const tabContext = this.openEmptyTab(); await this.activateTab(tabContext.tabId); + + await tabContext.setEmpty(); } openEmptyTab(tabId) { const tabContext = new TabContext(tabId); this.child(tabContext); - this.triggerEvent('newTabOpened', {tabId: this.tabId}); + this.triggerEvent('newTabOpened', {tabId: tabContext.tabId}); return tabContext; } diff --git a/src/public/javascripts/widgets/tab_aware_widget.js b/src/public/javascripts/widgets/tab_aware_widget.js index ab5e16ef9..7a4afbad4 100644 --- a/src/public/javascripts/widgets/tab_aware_widget.js +++ b/src/public/javascripts/widgets/tab_aware_widget.js @@ -80,7 +80,9 @@ export default class TabAwareWidget extends BasicWidget { // when note is both switched and activated, this should not produce double refresh async tabNoteSwitchedAndActivatedEvent({tabId, notePath}) { - if (this.isTab(tabId) && this.notePath === notePath) { + this.tabContext = appContext.tabManager.getActiveTabContext(); + + if (this.notePath === notePath) { this.tabContext = appContext.tabManager.getActiveTabContext(); await this.refresh(); diff --git a/src/public/javascripts/widgets/tab_caching_widget.js b/src/public/javascripts/widgets/tab_caching_widget.js index f832de9f1..8f9b5950a 100644 --- a/src/public/javascripts/widgets/tab_caching_widget.js +++ b/src/public/javascripts/widgets/tab_caching_widget.js @@ -20,12 +20,15 @@ export default class TabCachingWidget extends TabAwareWidget { async handleEventInChildren(name, data) { // stop propagation of the event to the children, individual tab widget should not know about tab switching // since they are per-tab - if (name !== 'activeTabChanged') { + if (name === 'tabNoteSwitchedAndActivated') { + await super.handleEventInChildren('tabNoteSwitched', data); + } + else if (name !== 'activeTabChanged') { await super.handleEventInChildren(name, data); } } - refreshWithNote() { + async refreshWithNote() { for (const widget of Object.values(this.widgets)) { widget.toggle(false); } @@ -47,7 +50,7 @@ export default class TabCachingWidget extends TabAwareWidget { keyboardActionsService.updateDisplayedShortcuts($renderedWidget); this.child(widget); // add as child only once it is ready (also rendered) - widget.handleEvent('setTabContext', {tabContext: this.tabContext}); + await widget.handleEvent('setTabContext', {tabContext: this.tabContext}); } widget.toggle(widget.isEnabled()); diff --git a/src/public/javascripts/widgets/tab_row.js b/src/public/javascripts/widgets/tab_row.js index af5acd23c..800171a49 100644 --- a/src/public/javascripts/widgets/tab_row.js +++ b/src/public/javascripts/widgets/tab_row.js @@ -576,6 +576,8 @@ export default class TabRowWidget extends BasicWidget { }; tabNoteSwitchedAndActivatedEvent({tabId}) { + this.activeTabChangedEvent(); + this.updateTabById(tabId); }