fixed double refresh of note detail

This commit is contained in:
zadam 2020-02-27 12:26:42 +01:00
parent d71763aedb
commit b2a3e1cc04
6 changed files with 37 additions and 31 deletions

View File

@ -17,7 +17,7 @@ class TabContext extends Component {
this.tabId = tabId || utils.randomString(4);
}
async setNote(inputNotePath) {
async setNote(inputNotePath, triggerSwitchEvent = true) {
const notePath = await treeService.resolveNotePath(inputNotePath);
if (!notePath) {
@ -59,10 +59,12 @@ class TabContext extends Component {
protectedSessionHolder.touchProtectedSession();
}
this.triggerEvent('tabNoteSwitched', {
tabId: this.tabId,
notePath: this.notePath
});
if (triggerSwitchEvent) {
this.triggerEvent('tabNoteSwitched', {
tabId: this.tabId,
notePath: this.notePath
});
}
}
/** @property {NoteShort} */

View File

@ -88,13 +88,7 @@ export default class TabManager extends Component {
await this.tabsUpdate.allowUpdateWithoutChange(async () => {
for (const tab of filteredTabs) {
const tabContext = this.openEmptyTab(tab.tabId);
if (tab.active) {
this.activateTab(tabContext.tabId);
}
await tabContext.setNote(tab.notePath);
await this.openTabWithNote(tab.notePath, tab.active, tab.tabId);
}
});
}
@ -185,11 +179,23 @@ export default class TabManager extends Component {
const tabContext = new TabContext(tabId);
this.child(tabContext);
this.triggerEvent('newTabOpened', {tabId: this.tabId})
this.triggerEvent('newTabOpened', {tabId: this.tabId});
return tabContext;
}
async openTabWithNote(notePath, activate, tabId = null) {
const tabContext = this.openEmptyTab(tabId);
await tabContext.setNote(notePath, !activate); // if activate is false then send normal noteSwitched event
if (activate) {
this.activateTab(tabContext.tabId, false);
this.triggerEvent('tabNoteSwitchedAndActivated');
}
}
async activateOrOpenNote(noteId) {
for (const tabContext of this.getTabContexts()) {
if (tabContext.note && tabContext.note.noteId === noteId) {
@ -204,14 +210,16 @@ export default class TabManager extends Component {
await tabContext.setNote(noteId);
}
activateTab(tabId) {
activateTab(tabId, triggerEvent = true) {
if (tabId === this.activeTabId) {
return;
}
this.activeTabId = tabId;
this.triggerEvent('activeTabChanged');
if (triggerEvent) {
this.triggerEvent('activeTabChanged');
}
this.tabsUpdate.scheduleUpdate();

View File

@ -28,7 +28,9 @@ import SidePaneToggles from "./side_pane_toggles.js";
export default class Layout {
getRootWidget(appContext) {
const root = new FlexContainer('column').id('root-widget')
return new FlexContainer('column')
.setParent(appContext)
.id('root-widget')
.child(new FlexContainer('row')
.child(new GlobalMenuWidget())
.child(new TabRowWidget())
@ -65,9 +67,5 @@ export default class Layout {
)
.child(new SidePaneToggles())
);
root.setParent(appContext);
return root;
}
}

View File

@ -236,13 +236,6 @@ export default class NoteDetailWidget extends TabAwareWidget {
this.refresh();
}
async handleEventInChildren(name, data) {
// done manually in refresh()
if (name !== 'setTabContext') {
await super.handleEventInChildren(name, data);
}
}
async cutIntoNoteCommand() {
const note = appContext.tabManager.getActiveTabNote();

View File

@ -5,8 +5,6 @@ export default class TabAwareWidget extends BasicWidget {
setTabContextEvent({tabContext}) {
/** @var {TabContext} */
this.tabContext = tabContext;
this.noteSwitched();
}
isTab(tabId) {
@ -80,6 +78,13 @@ export default class TabAwareWidget extends BasicWidget {
this.activeTabChanged();
}
// when note is both switched and activated, this should not produce double refresh
tabNoteSwitchedAndActivatedEvent() {
this.tabContext = appContext.tabManager.getActiveTabContext();
this.refresh();
}
treeCacheReloadedEvent() {
this.refresh();
}

View File

@ -39,8 +39,8 @@ export default class TabCachingWidget extends TabAwareWidget {
let widget = this.widgets[this.tabContext.tabId];
if (!widget) {
widget = this.widgets[this.tabContext.tabId] = this.widgetFactory(this);
this.children.push(widget);
widget = this.widgets[this.tabContext.tabId] = this.widgetFactory();
this.child(widget);
const $renderedWidget = widget.render();
keyboardActionsService.updateDisplayedShortcuts($renderedWidget);