From 8a2a3846e408f4265dbb59101dbd8e71a7811f1b Mon Sep 17 00:00:00 2001 From: mertmit Date: Thu, 29 Jun 2023 10:16:02 +0300 Subject: [PATCH] fix: clear selection if row deleted is included Signed-off-by: mertmit --- .../nc-gui/components/smartsheet/Grid.vue | 9 +++++++++ .../composables/useMultiSelect/cellRange.ts | 18 +++++++++++++++++ .../composables/useMultiSelect/index.ts | 20 +++---------------- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/packages/nc-gui/components/smartsheet/Grid.vue b/packages/nc-gui/components/smartsheet/Grid.vue index 82c8cd8c00..5dab01c4f1 100644 --- a/packages/nc-gui/components/smartsheet/Grid.vue +++ b/packages/nc-gui/components/smartsheet/Grid.vue @@ -879,6 +879,15 @@ const closeAddColumnDropdown = (scrollToLastCol = false) => { const confirmDeleteRow = (row: number) => { try { deleteRow(row) + + if (selectedRange.isRowInRange(row)) { + clearSelectedRange() + } + + if (activeCell.row === row) { + activeCell.row = null + activeCell.col = null + } } catch (e: any) { message.error(e.message) } diff --git a/packages/nc-gui/composables/useMultiSelect/cellRange.ts b/packages/nc-gui/composables/useMultiSelect/cellRange.ts index b56e415df4..4d7b060fc5 100644 --- a/packages/nc-gui/composables/useMultiSelect/cellRange.ts +++ b/packages/nc-gui/composables/useMultiSelect/cellRange.ts @@ -24,6 +24,24 @@ export class CellRange { return !this.isEmpty() && this._start?.row === this._end?.row } + isCellInRange(cell: Cell) { + return ( + !this.isEmpty() && + cell.row >= this.start.row && + cell.row <= this.end.row && + cell.col >= this.start.col && + cell.col <= this.end.col + ) + } + + isRowInRange(row: number) { + return !this.isEmpty() && row >= this.start.row && row <= this.end.row + } + + isColInRange(col: number) { + return !this.isEmpty() && col >= this.start.col && col <= this.end.col + } + get start(): Cell { return { row: Math.min(this._start?.row ?? NaN, this._end?.row ?? NaN), diff --git a/packages/nc-gui/composables/useMultiSelect/index.ts b/packages/nc-gui/composables/useMultiSelect/index.ts index 942396cc98..08ae5a1869 100644 --- a/packages/nc-gui/composables/useMultiSelect/index.ts +++ b/packages/nc-gui/composables/useMultiSelect/index.ts @@ -232,16 +232,7 @@ export function useMultiSelect( return true } - if (selectedRange._start === null || selectedRange._end === null) { - return false - } - - return ( - col >= selectedRange.start.col && - col <= selectedRange.end.col && - row >= selectedRange.start.row && - row <= selectedRange.end.row - ) + return selectedRange.isCellInRange({ row, col }) } function isCellInFillRange(row: number, col: number) { @@ -249,16 +240,11 @@ export function useMultiSelect( return false } - if ( - col >= selectedRange.start.col && - col <= selectedRange.end.col && - row >= selectedRange.start.row && - row <= selectedRange.end.row - ) { + if (selectedRange.isCellInRange({ row, col })) { return false } - return col >= fillRange.start.col && col <= fillRange.end.col && row >= fillRange.start.row && row <= fillRange.end.row + return fillRange.isCellInRange({ row, col }) } const isPasteable = (row?: Row, col?: ColumnType, showInfo = false) => {