From bef2bc03829c29a4fb9f1b25c742dadbfdea1fad Mon Sep 17 00:00:00 2001 From: Muhammed Mustafa Date: Fri, 27 Oct 2023 13:59:31 +0000 Subject: [PATCH] fix: Added undo for column re order --- .../smartsheet/grid/useColumnDrag.ts | 54 +++++++++++++++---- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/packages/nc-gui/components/smartsheet/grid/useColumnDrag.ts b/packages/nc-gui/components/smartsheet/grid/useColumnDrag.ts index 7d6e356250..337ec0e25b 100644 --- a/packages/nc-gui/components/smartsheet/grid/useColumnDrag.ts +++ b/packages/nc-gui/components/smartsheet/grid/useColumnDrag.ts @@ -10,8 +10,11 @@ export const useColumnDrag = ({ gridWrapper: Ref }) => { const { eventBus } = useSmartsheetStoreOrThrow() + const { addUndo, defineViewScope } = useUndoRedo() - const { updateGridViewColumn, gridViewCols } = useViewColumnsOrThrow() + const { activeView } = storeToRefs(useViewsStore()) + + const { gridViewCols, updateGridViewColumn } = useViewColumnsOrThrow() const { leftSidebarWidth } = storeToRefs(useSidebarStore()) const { width } = useWindowSize() @@ -20,17 +23,48 @@ export const useColumnDrag = ({ const toBeDroppedColId = ref(null) const reorderColumn = async (colId: string, toColId: string) => { - const col = gridViewCols.value[colId] - const toCol = gridViewCols.value[toColId]! - const toColIndex = fields.value.findIndex((f) => f.id === toColId) - const nextToColField = toColIndex < fields.value.length - 1 ? fields.value[toColIndex + 1] : null - const nextToCol = nextToColField ? gridViewCols.value[nextToColField.id!] : null + const toBeReorderedViewCol = gridViewCols.value[colId] - const newOrder = nextToCol ? toCol.order! + (nextToCol.order! - toCol.order!) / 2 : toCol.order! + 1 - - col.order = newOrder + const toViewCol = gridViewCols.value[toColId]! + const toColIndex = fields.value.findIndex((f) => f.id === toColId) - await updateGridViewColumn(colId, { order: newOrder } as any) + const nextToColField = toColIndex < fields.value.length - 1 ? fields.value[toColIndex + 1] : null + const nextToViewCol = nextToColField ? gridViewCols.value[nextToColField.id!] : null + + const newOrder = nextToViewCol + ? toViewCol.order! + (nextToViewCol.order! - toViewCol.order!) / 2 + : toBeReorderedViewCol.order! + 1 + const oldOrder = toBeReorderedViewCol.order + + toBeReorderedViewCol.order = newOrder + + addUndo({ + undo: { + fn: async () => { + if (!fields.value) return + + toBeReorderedViewCol.order = oldOrder + await updateGridViewColumn(colId, { order: oldOrder } as any) + + eventBus.emit(SmartsheetStoreEvents.FIELD_RELOAD) + }, + args: [], + }, + redo: { + fn: async () => { + if (!fields.value) return + + toBeReorderedViewCol.order = newOrder + await updateGridViewColumn(colId, { order: newOrder } as any) + + eventBus.emit(SmartsheetStoreEvents.FIELD_RELOAD) + }, + args: [], + }, + scope: defineViewScope({ view: activeView.value }), + }) + + await updateGridViewColumn(colId, { order: newOrder } as any, true) eventBus.emit(SmartsheetStoreEvents.FIELD_RELOAD) }