diff --git a/src/public/app/services/tab_manager.js b/src/public/app/services/tab_manager.js index 15f939bfe..59318d6e3 100644 --- a/src/public/app/services/tab_manager.js +++ b/src/public/app/services/tab_manager.js @@ -306,7 +306,8 @@ export default class TabManager extends Component { const mainNoteContexts = this.getNoteContexts().filter(nc => nc.isMainContext()); if (mainNoteContexts.length === 1) { - mainNoteContexts[0].setEmpty(); + await this.clearLastMainNoteContext(noteContextToRemove); + return; } } @@ -317,7 +318,7 @@ export default class TabManager extends Component { const noteContextsToRemove = noteContextToRemove.getSubContexts(); const ntxIdsToRemove = noteContextsToRemove.map(nc => nc.ntxId); - await this.triggerEvent('beforeTabRemove', { ntxIds: ntxIdsToRemove }); + await this.triggerEvent('beforeNoteContextRemove', { ntxIds: ntxIdsToRemove }); if (!noteContextToRemove.isMainContext()) { await this.activateNoteContext(noteContextToRemove.getMainContext().ntxId); @@ -336,14 +337,37 @@ export default class TabManager extends Component { } } - this.children = this.children.filter(nc => !ntxIdsToRemove.includes(nc.ntxId)); + this.removeNoteContexts(noteContextsToRemove); + }); + } - this.recentlyClosedTabs.push(noteContextsToRemove); + async clearLastMainNoteContext(noteContextToClear) { + noteContextToClear.setEmpty(); - this.triggerEvent('noteContextRemoved', {ntxIds: ntxIdsToRemove}); + // activate main split + await this.activateNoteContext(noteContextToClear.ntxId); - this.tabsUpdate.scheduleUpdate(); - }); + // remove all other splits + const noteContextsToRemove = noteContextToClear.getSubContexts() + .filter(ntx => ntx.ntxId !== noteContextToClear.ntxId); + + const ntxIdsToRemove = noteContextsToRemove.map(ntx => ntx.ntxId); + + await this.triggerEvent('beforeNoteContextRemove', {ntxIds: ntxIdsToRemove}); + + this.removeNoteContexts(noteContextsToRemove); + } + + removeNoteContexts(noteContextsToRemove) { + const ntxIdsToRemove = noteContextsToRemove.map(nc => nc.ntxId); + + this.children = this.children.filter(nc => !ntxIdsToRemove.includes(nc.ntxId)); + + this.recentlyClosedTabs.push(noteContextsToRemove); + + this.triggerEvent('noteContextRemoved', {ntxIds: ntxIdsToRemove}); + + this.tabsUpdate.scheduleUpdate(); } tabReorderEvent({ntxIdsInOrder}) { diff --git a/src/public/app/widgets/note_detail.js b/src/public/app/widgets/note_detail.js index 0a0790fa8..9027852c1 100644 --- a/src/public/app/widgets/note_detail.js +++ b/src/public/app/widgets/note_detail.js @@ -216,7 +216,7 @@ export default class NoteDetailWidget extends NoteContextAwareWidget { } } - async beforeTabRemoveEvent({ntxIds}) { + async beforeNoteContextRemoveEvent({ntxIds}) { if (this.isNoteContext(ntxIds)) { await this.spacedUpdate.updateNowIfNecessary(); } diff --git a/src/public/app/widgets/note_title.js b/src/public/app/widgets/note_title.js index 59007faa6..2cbd9b5a1 100644 --- a/src/public/app/widgets/note_title.js +++ b/src/public/app/widgets/note_title.js @@ -87,7 +87,7 @@ export default class NoteTitleWidget extends NoteContextAwareWidget { } } - async beforeTabRemoveEvent({ntxIds}) { + async beforeNoteContextRemoveEvent({ntxIds}) { if (this.isNoteContext(ntxIds)) { await this.spacedUpdate.updateNowIfNecessary(); }