From 58253567cd55a72a86252cd6237d8b1a46ebc996 Mon Sep 17 00:00:00 2001 From: dymani Date: Thu, 1 Jun 2023 00:48:37 +0800 Subject: [PATCH] Simplify noteContextReorder event call --- src/public/app/components/tab_manager.js | 14 +++- .../app/widgets/buttons/move_pane_button.js | 64 ++++++++----------- .../containers/split_note_container.js | 25 ++++---- src/public/app/widgets/tab_row.js | 19 ++---- 4 files changed, 60 insertions(+), 62 deletions(-) diff --git a/src/public/app/components/tab_manager.js b/src/public/app/components/tab_manager.js index ace30105f..53c3ccbbd 100644 --- a/src/public/app/components/tab_manager.js +++ b/src/public/app/components/tab_manager.js @@ -451,13 +451,21 @@ export default class TabManager extends Component { this.tabsUpdate.scheduleUpdate(); } - noteContextReorderEvent({ntxIdsInOrder, mainNtxIdsInOrder}) { + noteContextReorderEvent({ntxIdsInOrder, oldMainNtxId, newMainNtxId}) { const order = Object.fromEntries(ntxIdsInOrder.map((v, i) => [v, i])); this.children.sort((a, b) => order[a.ntxId] < order[b.ntxId] ? -1 : 1); - if (!!mainNtxIdsInOrder && mainNtxIdsInOrder.length === this.children.length) { - this.children.forEach((c, i) => c.mainNtxId = mainNtxIdsInOrder[i]); + if (oldMainNtxId && newMainNtxId) { + this.children.forEach(c => { + if (c.ntxId === newMainNtxId) { + // new main context has null mainNtxId + c.mainNtxId = null; + } else if (c.ntxId === oldMainNtxId || c.mainNtxId === oldMainNtxId) { + // old main context or subcontexts all have the new mainNtxId + c.mainNtxId = newMainNtxId; + } + }); } this.tabsUpdate.scheduleUpdate(); diff --git a/src/public/app/widgets/buttons/move_pane_button.js b/src/public/app/widgets/buttons/move_pane_button.js index 9ea4dbe61..632651ca5 100644 --- a/src/public/app/widgets/buttons/move_pane_button.js +++ b/src/public/app/widgets/buttons/move_pane_button.js @@ -2,42 +2,6 @@ import OnClickButtonWidget from "./onclick_button.js"; import appContext from "../../components/app_context.js"; export default class MovePaneButton extends OnClickButtonWidget { - isEnabled() { - if (!super.isEnabled()) - return false; - - if (this.isMovingLeft) { - // movable if the current context is not a main context, i.e. non-null mainNtxId - return !!this.noteContext?.mainNtxId; - } else { - const currentIndex = appContext.tabManager.noteContexts.findIndex(c => c.ntxId === this.ntxId); - const nextContext = appContext.tabManager.noteContexts[currentIndex + 1]; - // movable if the next context is not null and not a main context, i.e. non-null mainNtxId - return !!nextContext?.mainNtxId; - } - } - - initialRenderCompleteEvent() { - this.refresh(); - super.initialRenderCompleteEvent(); - } - - async noteContextRemovedEvent({ntxIds}) { - this.refresh(); - } - - async newNoteContextCreatedEvent({noteContext}) { - this.refresh(); - } - - async noteContextSwitchEvent() { - this.refresh(); - } - - async noteContextReorderEvent({ntxIdsInOrder}) { - this.refresh(); - } - constructor(isMovingLeft) { super(); @@ -52,4 +16,32 @@ export default class MovePaneButton extends OnClickButtonWidget { }) .class("icon-action"); } + + isEnabled() { + if (!super.isEnabled()) { + return false; + } + + if (this.isMovingLeft) { + // movable if the current context is not a main context, i.e. non-null mainNtxId + return !!this.noteContext?.mainNtxId; + } else { + const currentIndex = appContext.tabManager.noteContexts.findIndex(c => c.ntxId === this.ntxId); + const nextContext = appContext.tabManager.noteContexts[currentIndex + 1]; + // movable if the next context is not null and not a main context, i.e. non-null mainNtxId + return !!nextContext?.mainNtxId; + } + } + + async noteContextRemovedEvent() { + this.refresh(); + } + + async newNoteContextCreatedEvent() { + this.refresh(); + } + + async noteContextReorderEvent() { + this.refresh(); + } } diff --git a/src/public/app/widgets/containers/split_note_container.js b/src/public/app/widgets/containers/split_note_container.js index 988c537b1..0188add6d 100644 --- a/src/public/app/widgets/containers/split_note_container.js +++ b/src/public/app/widgets/containers/split_note_container.js @@ -86,28 +86,31 @@ export default class SplitNoteContainer extends FlexContainer { const leftIndex = isMovingLeft ? currentIndex - 1 : currentIndex; if (currentIndex === -1 || leftIndex < 0 || leftIndex + 1 >= contexts.length) { - logError("invalid context!"); + logError(`invalid context! currentIndex: ${currentIndex}, leftIndex: ${leftIndex}, contexts.length: ${contexts.length}`); return; } - if (contexts[leftIndex].isEmpty() && contexts[leftIndex + 1].isEmpty()) + if (contexts[leftIndex].isEmpty() && contexts[leftIndex + 1].isEmpty()) { // no op return; + } const ntxIds = contexts.map(c => c.ntxId); - const mainNtxIds = contexts.map(c => c.mainNtxId); + const newNtxIds = [ + ...ntxIds.slice(0, leftIndex), + ntxIds[leftIndex + 1], + ntxIds[leftIndex], + ...ntxIds.slice(leftIndex + 2), + ]; + const isChangingMainContext = !contexts[leftIndex].mainNtxId; this.triggerCommand("noteContextReorder", { - ntxIdsInOrder: [ - ...ntxIds.slice(0, leftIndex), - ntxIds[leftIndex + 1], - ntxIds[leftIndex], - ...ntxIds.slice(leftIndex + 2), - ], - oldNtxIdsInOrder: ntxIds, - mainNtxIdsInOrder: mainNtxIds.map(id => id === ntxIds[leftIndex] ? ntxIds[leftIndex + 1] : id) + ntxIdsInOrder: newNtxIds, + oldMainNtxId: isChangingMainContext ? ntxIds[leftIndex] : null, + newMainNtxId: isChangingMainContext ? ntxIds[leftIndex + 1]: null, }); + // reorder the note context widgets this.$widget.find(`[data-ntx-id="${ntxIds[leftIndex]}"]`) .insertAfter(this.$widget.find(`[data-ntx-id="${ntxIds[leftIndex + 1]}"]`)); diff --git a/src/public/app/widgets/tab_row.js b/src/public/app/widgets/tab_row.js index 6e15f3458..9081ed9e1 100644 --- a/src/public/app/widgets/tab_row.js +++ b/src/public/app/widgets/tab_row.js @@ -609,20 +609,15 @@ export default class TabRowWidget extends BasicWidget { this.updateTabById(noteContext.mainNtxId || noteContext.ntxId); } - noteContextReorderEvent({ntxIdsInOrder, oldNtxIdsInOrder, mainNtxIdsInOrder}) { - if (!oldNtxIdsInOrder || !mainNtxIdsInOrder - || ntxIdsInOrder.length !== oldNtxIdsInOrder.length - || ntxIdsInOrder.length !== mainNtxIdsInOrder.length - ) + noteContextReorderEvent({oldMainNtxId, newMainNtxId}) { + if (!oldMainNtxId || !newMainNtxId) { + // no need to update tab row return; + } - ntxIdsInOrder.forEach((id, i) => { - // update main context that is not a tab - if (!mainNtxIdsInOrder[i] && this.getTabById(id).length === 0) { - this.getTabById(oldNtxIdsInOrder[i]).attr("data-ntx-id", id); - this.updateTabById(id); - } - }); + // update tab id for the new main context + this.getTabById(oldMainNtxId).attr("data-ntx-id", newMainNtxId); + this.updateTabById(newMainNtxId); } updateTabById(ntxId) {