From 9b33ee1ceeda67674483806e085c519a68a5a7e6 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 24 Jun 2024 14:02:35 +0100 Subject: [PATCH] More simplification of columns --- .../grid/controls/BulkDuplicationHandler.svelte | 6 +++--- .../components/grid/overlays/KeyboardManager.svelte | 3 +-- .../src/components/grid/overlays/MenuOverlay.svelte | 6 +++--- .../src/components/grid/stores/clipboard.js | 8 ++++---- .../src/components/grid/stores/columns.js | 11 +++++------ .../src/components/grid/stores/reorder.js | 9 ++++++--- .../frontend-core/src/components/grid/stores/ui.js | 10 +++++----- 7 files changed, 27 insertions(+), 26 deletions(-) diff --git a/packages/frontend-core/src/components/grid/controls/BulkDuplicationHandler.svelte b/packages/frontend-core/src/components/grid/controls/BulkDuplicationHandler.svelte index a662c3fdb2..c63b247794 100644 --- a/packages/frontend-core/src/components/grid/controls/BulkDuplicationHandler.svelte +++ b/packages/frontend-core/src/components/grid/controls/BulkDuplicationHandler.svelte @@ -9,7 +9,7 @@ rows, subscribe, selectedRowCount, - allVisibleColumns, + visibleColumns, selectedCells, rowLookupMap, } = getContext("grid") @@ -40,8 +40,8 @@ if (newRows.length) { const firstRow = newRows[0] const lastRow = newRows[newRows.length - 1] - const firstCol = $allVisibleColumns[0] - const lastCol = $allVisibleColumns[$allVisibleColumns.length - 1] + const firstCol = $visibleColumns[0] + const lastCol = $visibleColumns[$visibleColumns.length - 1] const startCellId = getCellID(firstRow._id, firstCol.name) const endCellId = getCellID(lastRow._id, lastCol.name) selectedCells.actions.selectRange(startCellId, endCellId) diff --git a/packages/frontend-core/src/components/grid/overlays/KeyboardManager.svelte b/packages/frontend-core/src/components/grid/overlays/KeyboardManager.svelte index 28d2812daf..17f2a9ea9e 100644 --- a/packages/frontend-core/src/components/grid/overlays/KeyboardManager.svelte +++ b/packages/frontend-core/src/components/grid/overlays/KeyboardManager.svelte @@ -19,7 +19,6 @@ selectedCells, cellSelection, columnLookupMap, - allVisibleColumns, } = getContext("grid") const ignoredOriginSelectors = [ @@ -188,7 +187,7 @@ // Determine the new position for this cell const { rowId, field } = parseCellID(sourceCellId) const colIdx = $columnLookupMap[field] - const nextColumn = $allVisibleColumns[colIdx + delta] + const nextColumn = $visibleColumns[colIdx + delta] if (!nextColumn) { return } diff --git a/packages/frontend-core/src/components/grid/overlays/MenuOverlay.svelte b/packages/frontend-core/src/components/grid/overlays/MenuOverlay.svelte index bc67db58c7..ec9ea981e5 100644 --- a/packages/frontend-core/src/components/grid/overlays/MenuOverlay.svelte +++ b/packages/frontend-core/src/components/grid/overlays/MenuOverlay.svelte @@ -18,7 +18,7 @@ copyAllowed, pasteAllowed, selectedCellCount, - allVisibleColumns, + visibleColumns, selectedCells, } = getContext("grid") @@ -41,8 +41,8 @@ menu.actions.close() const newRow = await rows.actions.duplicateRow($focusedRow) if (newRow) { - const firstCol = $allVisibleColumns[0] - const lastCol = $allVisibleColumns[$allVisibleColumns.length - 1] + const firstCol = $visibleColumns[0] + const lastCol = $visibleColumns[$visibleColumns.length - 1] const startCellId = getCellID(newRow._id, firstCol.name) const endCellId = getCellID(newRow._id, lastCol.name) selectedCells.actions.selectRange(startCellId, endCellId) diff --git a/packages/frontend-core/src/components/grid/stores/clipboard.js b/packages/frontend-core/src/components/grid/stores/clipboard.js index 7cce2b27c8..0c6d11d493 100644 --- a/packages/frontend-core/src/components/grid/stores/clipboard.js +++ b/packages/frontend-core/src/components/grid/stores/clipboard.js @@ -64,7 +64,7 @@ export const createActions = context => { rows, focusedCellId, columnLookupMap, - allVisibleColumns, + visibleColumns, } = context // Copies the currently selected value (or values) @@ -162,8 +162,8 @@ export const createActions = context => { // Get limits of how many rows and columns we're able to paste into const $rows = get(rows) - const $allVisibleColumns = get(allVisibleColumns) - const colCount = $allVisibleColumns.length + const $visibleColumns = get(visibleColumns) + const colCount = $visibleColumns.length const rowCount = $rows.length const selectedRows = value.length const selectedColumns = value[0].length @@ -172,7 +172,7 @@ export const createActions = context => { // Get the target cell ID (bottom right of our pastable extent) const targetRowId = $rows[rowIdx + rowExtent]._id - const targetColName = $allVisibleColumns[colIdx + colExtent].name + const targetColName = $visibleColumns[colIdx + colExtent].name const targetCellId = getCellID(targetRowId, targetColName) // Paste into target cell range diff --git a/packages/frontend-core/src/components/grid/stores/columns.js b/packages/frontend-core/src/components/grid/stores/columns.js index d3ec66e94a..6800b7f4c4 100644 --- a/packages/frontend-core/src/components/grid/stores/columns.js +++ b/packages/frontend-core/src/components/grid/stores/columns.js @@ -6,16 +6,15 @@ export const createStores = () => { const enrichedColumns = derived(columns, $columns => { let offset = GutterWidth - let visibleIdx = 0 - return $columns.map((col, idx) => { + let idx = 0 + return $columns.map(col => { const enriched = { ...col, - __idx: idx, // Overall column index - __visibleIdx: visibleIdx, // Index within the visible columns - __left: offset, // Left offset relative to all visible columns + __idx: idx, + __left: offset, } if (col.visible) { - visibleIdx++ + idx++ offset += col.width } return enriched diff --git a/packages/frontend-core/src/components/grid/stores/reorder.js b/packages/frontend-core/src/components/grid/stores/reorder.js index 48b054b862..4f8339947b 100644 --- a/packages/frontend-core/src/components/grid/stores/reorder.js +++ b/packages/frontend-core/src/components/grid/stores/reorder.js @@ -196,12 +196,15 @@ export const createActions = context => { targetColumn, insertAfter = false, }) => { - const $columnLookupMap = get(columnLookupMap) - let sourceIdx = $columnLookupMap[sourceColumn].__idx - let targetIdx = $columnLookupMap[targetColumn].__idx + // Find the indices in the overall columns array + const $columns = get(columns) + let sourceIdx = $columns.findIndex(col => col.name === sourceColumn) + let targetIdx = $columns.findIndex(col => col.name === targetColumn) if (insertAfter) { targetIdx++ } + + // Reorder columns columns.update(state => { const removed = state.splice(sourceIdx, 1) if (--targetIdx < sourceIdx) { diff --git a/packages/frontend-core/src/components/grid/stores/ui.js b/packages/frontend-core/src/components/grid/stores/ui.js index d4dc8ee5d0..a52abd09d5 100644 --- a/packages/frontend-core/src/components/grid/stores/ui.js +++ b/packages/frontend-core/src/components/grid/stores/ui.js @@ -54,7 +54,7 @@ export const deriveStores = context => { selectedRows, cellSelection, columnLookupMap, - allVisibleColumns, + visibleColumns, } = context // Derive the current focused row ID @@ -107,7 +107,7 @@ export const deriveStores = context => { return [] } const $rows = get(rows) - const $allVisibleColumns = get(allVisibleColumns) + const $visibleColumns = get(visibleColumns) // Get source and target row and column indices const sourceInfo = parseCellID(sourceCellId) @@ -120,8 +120,8 @@ export const deriveStores = context => { const upperRowIndex = Math.max(sourceRowIndex, targetRowIndex) // Column indices - const sourceColIndex = $columnLookupMap[sourceInfo.field] - const targetColIndex = $columnLookupMap[targetInfo.field] + const sourceColIndex = $columnLookupMap[sourceInfo.field].__idx + const targetColIndex = $columnLookupMap[targetInfo.field].__idx const lowerColIndex = Math.min(sourceColIndex, targetColIndex) const upperColIndex = Math.max(sourceColIndex, targetColIndex) @@ -132,7 +132,7 @@ export const deriveStores = context => { let rowCells = [] for (let colIdx = lowerColIndex; colIdx <= upperColIndex; colIdx++) { rowId = $rows[rowIdx]._id - colName = $allVisibleColumns[colIdx].name + colName = $visibleColumns[colIdx].name rowCells.push(getCellID(rowId, colName)) } cells.push(rowCells)