@rowsncolumns/spreadsheet-state 28.0.75 → 29.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/api/anchored-objects.d.ts +66 -0
- package/dist/cjs/api/anchored-objects.d.ts.map +1 -0
- package/dist/cjs/api/anchored-objects.js +259 -0
- package/dist/cjs/api/copy-paste.d.ts +8 -1
- package/dist/cjs/api/copy-paste.d.ts.map +1 -1
- package/dist/cjs/api/copy-paste.js +4 -2
- package/dist/cjs/api/dependency.d.ts +13 -2
- package/dist/cjs/api/dependency.d.ts.map +1 -1
- package/dist/cjs/api/dependency.js +11 -5
- package/dist/cjs/api/formula.d.ts +61 -4
- package/dist/cjs/api/formula.d.ts.map +1 -1
- package/dist/cjs/api/formula.js +250 -61
- package/dist/cjs/api/immer-utils.d.ts +11 -1
- package/dist/cjs/api/immer-utils.d.ts.map +1 -1
- package/dist/cjs/api/immer-utils.js +17 -1
- package/dist/cjs/api/insert-cut-cells.d.ts +35 -0
- package/dist/cjs/api/insert-cut-cells.d.ts.map +1 -0
- package/dist/cjs/api/insert-cut-cells.js +60 -0
- package/dist/cjs/api/merges.d.ts +16 -0
- package/dist/cjs/api/merges.d.ts.map +1 -1
- package/dist/cjs/api/merges.js +75 -1
- package/dist/cjs/api/named-range-structural.d.ts +62 -0
- package/dist/cjs/api/named-range-structural.d.ts.map +1 -0
- package/dist/cjs/api/named-range-structural.js +197 -0
- package/dist/cjs/api/range-rule-helpers.d.ts +45 -1
- package/dist/cjs/api/range-rule-helpers.d.ts.map +1 -1
- package/dist/cjs/api/range-rule-helpers.js +159 -6
- package/dist/cjs/api/structural-formula-update.d.ts.map +1 -1
- package/dist/cjs/api/structural-formula-update.js +24 -6
- package/dist/cjs/api/structural-guards.d.ts +78 -0
- package/dist/cjs/api/structural-guards.d.ts.map +1 -0
- package/dist/cjs/api/structural-guards.js +202 -0
- package/dist/cjs/api/structural-table-refs.d.ts +94 -0
- package/dist/cjs/api/structural-table-refs.d.ts.map +1 -0
- package/dist/cjs/api/structural-table-refs.js +313 -0
- package/dist/cjs/api/subtotal.d.ts +20 -13
- package/dist/cjs/api/subtotal.d.ts.map +1 -1
- package/dist/cjs/api/subtotal.js +26 -19
- package/dist/cjs/commands.d.ts +9 -0
- package/dist/cjs/commands.d.ts.map +1 -1
- package/dist/cjs/constants.d.ts +25 -0
- package/dist/cjs/constants.d.ts.map +1 -0
- package/dist/cjs/constants.js +26 -0
- package/dist/cjs/hooks/use-calculation-worker.d.ts.map +1 -1
- package/dist/cjs/hooks/use-calculation-worker.js +64 -6
- package/dist/cjs/hooks/use-calculation.d.ts +7 -0
- package/dist/cjs/hooks/use-calculation.d.ts.map +1 -1
- package/dist/cjs/hooks/use-calculation.js +15 -0
- package/dist/cjs/hooks/use-on-calculation-success.d.ts +7 -0
- package/dist/cjs/hooks/use-on-calculation-success.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-calculation-success.js +7 -1
- package/dist/cjs/hooks/use-on-copy.d.ts +1 -1
- package/dist/cjs/hooks/use-on-copy.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-copy.js +2 -3
- package/dist/cjs/hooks/use-on-delete-cells-shift-left.d.ts +13 -3
- package/dist/cjs/hooks/use-on-delete-cells-shift-left.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete-cells-shift-left.js +27 -2
- package/dist/cjs/hooks/use-on-delete-cells-shift-up.d.ts +13 -3
- package/dist/cjs/hooks/use-on-delete-cells-shift-up.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete-cells-shift-up.js +27 -2
- package/dist/cjs/hooks/use-on-delete-column.d.ts +13 -4
- package/dist/cjs/hooks/use-on-delete-column.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete-column.js +14 -2
- package/dist/cjs/hooks/use-on-delete-row.d.ts +13 -4
- package/dist/cjs/hooks/use-on-delete-row.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete-row.js +14 -2
- package/dist/cjs/hooks/use-on-insert-cells-shift-down.d.ts +13 -3
- package/dist/cjs/hooks/use-on-insert-cells-shift-down.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-insert-cells-shift-down.js +27 -2
- package/dist/cjs/hooks/use-on-insert-cells-shift-right.d.ts +13 -3
- package/dist/cjs/hooks/use-on-insert-cells-shift-right.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-insert-cells-shift-right.js +27 -2
- package/dist/cjs/hooks/use-on-insert-column.d.ts +10 -3
- package/dist/cjs/hooks/use-on-insert-column.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-insert-column.js +33 -7
- package/dist/cjs/hooks/use-on-insert-row.d.ts +10 -3
- package/dist/cjs/hooks/use-on-insert-row.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-insert-row.js +32 -7
- package/dist/cjs/hooks/use-on-move-columns.d.ts +2 -1
- package/dist/cjs/hooks/use-on-move-columns.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-move-columns.js +14 -5
- package/dist/cjs/hooks/use-on-move-rows.d.ts +16 -1
- package/dist/cjs/hooks/use-on-move-rows.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-move-rows.js +30 -5
- package/dist/cjs/hooks/use-on-move-selection.d.ts +7 -2
- package/dist/cjs/hooks/use-on-move-selection.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-move-selection.js +14 -1
- package/dist/cjs/hooks/use-on-paste.d.ts +12 -2
- package/dist/cjs/hooks/use-on-paste.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-paste.js +56 -8
- package/dist/cjs/hooks/use-spreadsheet-state.d.ts +16 -5
- package/dist/cjs/hooks/use-spreadsheet-state.d.ts.map +1 -1
- package/dist/cjs/hooks/use-spreadsheet-state.js +141 -18
- package/dist/cjs/hooks/use-structured-reference.d.ts.map +1 -1
- package/dist/cjs/hooks/use-structured-reference.js +10 -6
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +4 -0
- package/dist/cjs/interface/calculation-interface.d.ts +9 -0
- package/dist/cjs/interface/calculation-interface.d.ts.map +1 -1
- package/dist/cjs/interface/calculation-interface.js +31 -2
- package/dist/cjs/interface/delete-cells-shift-left.d.ts +8 -1
- package/dist/cjs/interface/delete-cells-shift-left.d.ts.map +1 -1
- package/dist/cjs/interface/delete-cells-shift-left.js +158 -80
- package/dist/cjs/interface/delete-cells-shift-up.d.ts +9 -1
- package/dist/cjs/interface/delete-cells-shift-up.d.ts.map +1 -1
- package/dist/cjs/interface/delete-cells-shift-up.js +155 -73
- package/dist/cjs/interface/delete-column.d.ts +1 -1
- package/dist/cjs/interface/delete-column.d.ts.map +1 -1
- package/dist/cjs/interface/delete-column.js +109 -50
- package/dist/cjs/interface/delete-row.d.ts +1 -1
- package/dist/cjs/interface/delete-row.d.ts.map +1 -1
- package/dist/cjs/interface/delete-row.js +105 -46
- package/dist/cjs/interface/insert-cells-shift-down.d.ts +10 -1
- package/dist/cjs/interface/insert-cells-shift-down.d.ts.map +1 -1
- package/dist/cjs/interface/insert-cells-shift-down.js +147 -52
- package/dist/cjs/interface/insert-cells-shift-right.d.ts +10 -1
- package/dist/cjs/interface/insert-cells-shift-right.d.ts.map +1 -1
- package/dist/cjs/interface/insert-cells-shift-right.js +154 -58
- package/dist/cjs/interface/insert-column.d.ts +1 -1
- package/dist/cjs/interface/insert-column.d.ts.map +1 -1
- package/dist/cjs/interface/insert-column.js +80 -26
- package/dist/cjs/interface/insert-row.d.ts +1 -1
- package/dist/cjs/interface/insert-row.d.ts.map +1 -1
- package/dist/cjs/interface/insert-row.js +63 -15
- package/dist/cjs/interface/spreadsheet-interface.d.ts.map +1 -1
- package/dist/cjs/interface/spreadsheet-interface.js +33 -0
- package/dist/cjs/sheet-cell.d.ts.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/api/anchored-objects.d.ts +66 -0
- package/dist/esm/api/anchored-objects.d.ts.map +1 -0
- package/dist/esm/api/anchored-objects.js +212 -0
- package/dist/esm/api/copy-paste.d.ts +8 -1
- package/dist/esm/api/copy-paste.d.ts.map +1 -1
- package/dist/esm/api/copy-paste.js +4 -2
- package/dist/esm/api/dependency.d.ts +13 -2
- package/dist/esm/api/dependency.d.ts.map +1 -1
- package/dist/esm/api/dependency.js +10 -4
- package/dist/esm/api/formula.d.ts +61 -4
- package/dist/esm/api/formula.d.ts.map +1 -1
- package/dist/esm/api/formula.js +238 -60
- package/dist/esm/api/immer-utils.d.ts +11 -1
- package/dist/esm/api/immer-utils.d.ts.map +1 -1
- package/dist/esm/api/immer-utils.js +16 -0
- package/dist/esm/api/insert-cut-cells.d.ts +35 -0
- package/dist/esm/api/insert-cut-cells.d.ts.map +1 -0
- package/dist/esm/api/insert-cut-cells.js +67 -0
- package/dist/esm/api/merges.d.ts +16 -0
- package/dist/esm/api/merges.d.ts.map +1 -1
- package/dist/esm/api/merges.js +60 -0
- package/dist/esm/api/named-range-structural.d.ts +62 -0
- package/dist/esm/api/named-range-structural.d.ts.map +1 -0
- package/dist/esm/api/named-range-structural.js +176 -0
- package/dist/esm/api/range-rule-helpers.d.ts +45 -1
- package/dist/esm/api/range-rule-helpers.d.ts.map +1 -1
- package/dist/esm/api/range-rule-helpers.js +153 -1
- package/dist/esm/api/structural-formula-update.d.ts.map +1 -1
- package/dist/esm/api/structural-formula-update.js +24 -6
- package/dist/esm/api/structural-guards.d.ts +78 -0
- package/dist/esm/api/structural-guards.d.ts.map +1 -0
- package/dist/esm/api/structural-guards.js +186 -0
- package/dist/esm/api/structural-table-refs.d.ts +94 -0
- package/dist/esm/api/structural-table-refs.d.ts.map +1 -0
- package/dist/esm/api/structural-table-refs.js +219 -0
- package/dist/esm/api/subtotal.d.ts +20 -13
- package/dist/esm/api/subtotal.d.ts.map +1 -1
- package/dist/esm/api/subtotal.js +15 -8
- package/dist/esm/commands.d.ts +9 -0
- package/dist/esm/commands.d.ts.map +1 -1
- package/dist/esm/constants.d.ts +25 -0
- package/dist/esm/constants.d.ts.map +1 -0
- package/dist/esm/constants.js +26 -0
- package/dist/esm/hooks/use-calculation-worker.d.ts.map +1 -1
- package/dist/esm/hooks/use-calculation-worker.js +45 -0
- package/dist/esm/hooks/use-calculation.d.ts +7 -0
- package/dist/esm/hooks/use-calculation.d.ts.map +1 -1
- package/dist/esm/hooks/use-calculation.js +15 -0
- package/dist/esm/hooks/use-on-calculation-success.d.ts +7 -0
- package/dist/esm/hooks/use-on-calculation-success.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-calculation-success.js +7 -1
- package/dist/esm/hooks/use-on-copy.d.ts +1 -1
- package/dist/esm/hooks/use-on-copy.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-copy.js +2 -3
- package/dist/esm/hooks/use-on-delete-cells-shift-left.d.ts +13 -3
- package/dist/esm/hooks/use-on-delete-cells-shift-left.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete-cells-shift-left.js +26 -2
- package/dist/esm/hooks/use-on-delete-cells-shift-up.d.ts +13 -3
- package/dist/esm/hooks/use-on-delete-cells-shift-up.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete-cells-shift-up.js +26 -2
- package/dist/esm/hooks/use-on-delete-column.d.ts +13 -4
- package/dist/esm/hooks/use-on-delete-column.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete-column.js +14 -2
- package/dist/esm/hooks/use-on-delete-row.d.ts +13 -4
- package/dist/esm/hooks/use-on-delete-row.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete-row.js +14 -2
- package/dist/esm/hooks/use-on-insert-cells-shift-down.d.ts +13 -3
- package/dist/esm/hooks/use-on-insert-cells-shift-down.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-insert-cells-shift-down.js +26 -2
- package/dist/esm/hooks/use-on-insert-cells-shift-right.d.ts +13 -3
- package/dist/esm/hooks/use-on-insert-cells-shift-right.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-insert-cells-shift-right.js +26 -2
- package/dist/esm/hooks/use-on-insert-column.d.ts +10 -3
- package/dist/esm/hooks/use-on-insert-column.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-insert-column.js +33 -7
- package/dist/esm/hooks/use-on-insert-row.d.ts +10 -3
- package/dist/esm/hooks/use-on-insert-row.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-insert-row.js +32 -7
- package/dist/esm/hooks/use-on-move-columns.d.ts +2 -1
- package/dist/esm/hooks/use-on-move-columns.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-move-columns.js +14 -5
- package/dist/esm/hooks/use-on-move-rows.d.ts +16 -1
- package/dist/esm/hooks/use-on-move-rows.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-move-rows.js +30 -5
- package/dist/esm/hooks/use-on-move-selection.d.ts +7 -2
- package/dist/esm/hooks/use-on-move-selection.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-move-selection.js +14 -1
- package/dist/esm/hooks/use-on-paste.d.ts +12 -2
- package/dist/esm/hooks/use-on-paste.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-paste.js +41 -2
- package/dist/esm/hooks/use-spreadsheet-state.d.ts +16 -5
- package/dist/esm/hooks/use-spreadsheet-state.d.ts.map +1 -1
- package/dist/esm/hooks/use-spreadsheet-state.js +141 -17
- package/dist/esm/hooks/use-structured-reference.d.ts.map +1 -1
- package/dist/esm/hooks/use-structured-reference.js +10 -6
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +4 -0
- package/dist/esm/interface/calculation-interface.d.ts +9 -0
- package/dist/esm/interface/calculation-interface.d.ts.map +1 -1
- package/dist/esm/interface/calculation-interface.js +33 -2
- package/dist/esm/interface/delete-cells-shift-left.d.ts +8 -1
- package/dist/esm/interface/delete-cells-shift-left.d.ts.map +1 -1
- package/dist/esm/interface/delete-cells-shift-left.js +135 -59
- package/dist/esm/interface/delete-cells-shift-up.d.ts +9 -1
- package/dist/esm/interface/delete-cells-shift-up.d.ts.map +1 -1
- package/dist/esm/interface/delete-cells-shift-up.js +133 -53
- package/dist/esm/interface/delete-column.d.ts +1 -1
- package/dist/esm/interface/delete-column.d.ts.map +1 -1
- package/dist/esm/interface/delete-column.js +96 -38
- package/dist/esm/interface/delete-row.d.ts +1 -1
- package/dist/esm/interface/delete-row.d.ts.map +1 -1
- package/dist/esm/interface/delete-row.js +98 -39
- package/dist/esm/interface/insert-cells-shift-down.d.ts +10 -1
- package/dist/esm/interface/insert-cells-shift-down.d.ts.map +1 -1
- package/dist/esm/interface/insert-cells-shift-down.js +116 -47
- package/dist/esm/interface/insert-cells-shift-right.d.ts +10 -1
- package/dist/esm/interface/insert-cells-shift-right.d.ts.map +1 -1
- package/dist/esm/interface/insert-cells-shift-right.js +120 -51
- package/dist/esm/interface/insert-column.d.ts +1 -1
- package/dist/esm/interface/insert-column.d.ts.map +1 -1
- package/dist/esm/interface/insert-column.js +68 -18
- package/dist/esm/interface/insert-row.d.ts +1 -1
- package/dist/esm/interface/insert-row.d.ts.map +1 -1
- package/dist/esm/interface/insert-row.js +60 -14
- package/dist/esm/interface/spreadsheet-interface.d.ts.map +1 -1
- package/dist/esm/interface/spreadsheet-interface.js +29 -0
- package/dist/esm/sheet-cell.d.ts.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +18 -18
|
@@ -1,39 +1,47 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { selectionFromActiveCell } from "@rowsncolumns/utils";
|
|
1
|
+
import { __read, __spreadArray, __values } from "tslib";
|
|
3
2
|
import { produceWithPatches } from "immer";
|
|
4
|
-
import { processSideEffectDependentCells } from "../api/dependency";
|
|
3
|
+
import { collectUniqueDependentsForRange, processSideEffectDependentCells, } from "../api/dependency";
|
|
4
|
+
import { createSheetCellIdentifier, expandRangesInFormula } from "../api/formula";
|
|
5
5
|
import { cloneCellWithFormatting, createSheetDraft } from "../api/immer-utils";
|
|
6
|
-
import {
|
|
6
|
+
import { shiftMergesInBand } from "../api/merges";
|
|
7
|
+
import { isRangeInsideBand, resolveShiftSelection, shiftBand, } from "../api/structural-guards";
|
|
8
|
+
import { SheetCell } from "../sheet-cell";
|
|
9
|
+
/**
|
|
10
|
+
* Insert cells ▸ Shift cells down (SHF-01, SHF-06, SHF-07, SHF-08, FMT-03). Only the selection's
|
|
11
|
+
* columns move: every cell at or below the selection's first row slides down by the selection's
|
|
12
|
+
* height. References that target a shifted cell follow it; a range that lies entirely inside the
|
|
13
|
+
* shifted columns and straddles the insertion row grows by the inserted height (SHF-08); a wider
|
|
14
|
+
* range keeps its address (SHF-07). The vacated cells take the formatting of the cell above the
|
|
15
|
+
* insertion (FMT-03). Refusals (torn merge/table/array, off-sheet push) are decided by the hook via
|
|
16
|
+
* `getShiftCellsRefusal` before this runs.
|
|
17
|
+
*/
|
|
7
18
|
export var insertCellsShiftDown = function (_a) {
|
|
8
|
-
var rowCount = _a.rowCount, columnCount = _a.columnCount, locale = _a.locale, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry, getActiveCell = _a.getActiveCell, getSelections = _a.getSelections, getDependents = _a.getDependents, createHistory = _a.createHistory, enqueueGraphOperation = _a.enqueueGraphOperation, enqueueCalculation = _a.enqueueCalculation, enqueueStructureChange = _a.enqueueStructureChange, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeCitations = _a.onChangeCitations;
|
|
19
|
+
var rowCount = _a.rowCount, columnCount = _a.columnCount, locale = _a.locale, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry, getActiveCell = _a.getActiveCell, getSelections = _a.getSelections, getDependents = _a.getDependents, getSheetName = _a.getSheetName, createHistory = _a.createHistory, enqueueGraphOperation = _a.enqueueGraphOperation, enqueueCalculation = _a.enqueueCalculation, enqueueStructureChange = _a.enqueueStructureChange, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeCitations = _a.onChangeCitations;
|
|
9
20
|
return function (sheetId, activeCell, selections) {
|
|
21
|
+
var _a;
|
|
10
22
|
var saveHistory = createHistory();
|
|
11
23
|
// We need to track this for history. Precedent cells
|
|
12
24
|
var recalcCells = new Map();
|
|
13
|
-
|
|
14
|
-
var
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
var selection = finalSelections[finalSelections.length - 1];
|
|
19
|
-
var count = selection.range.endRowIndex - selection.range.startRowIndex + 1;
|
|
25
|
+
var selection = resolveShiftSelection(activeCell, selections);
|
|
26
|
+
var _b = selection.range, r1 = _b.startRowIndex, r2 = _b.endRowIndex, c1 = _b.startColumnIndex, c2 = _b.endColumnIndex;
|
|
27
|
+
var count = r2 - r1 + 1;
|
|
28
|
+
var band = shiftBand("down", selection.range);
|
|
29
|
+
var sheetName = (_a = getSheetName === null || getSheetName === void 0 ? void 0 : getSheetName(sheetId)) !== null && _a !== void 0 ? _a : "";
|
|
20
30
|
enqueueStructureChange === null || enqueueStructureChange === void 0 ? void 0 : enqueueStructureChange({
|
|
21
31
|
kind: "insert-cells-shift-down",
|
|
22
32
|
sheetId: sheetId,
|
|
23
|
-
startRowIndex:
|
|
24
|
-
endRowIndex:
|
|
25
|
-
startColumnIndex:
|
|
26
|
-
endColumnIndex:
|
|
33
|
+
startRowIndex: r1,
|
|
34
|
+
endRowIndex: r2,
|
|
35
|
+
startColumnIndex: c1,
|
|
36
|
+
endColumnIndex: c2,
|
|
27
37
|
rowCount: rowCount,
|
|
28
38
|
});
|
|
29
|
-
// Update sheets
|
|
39
|
+
// Update sheets — merges wholly inside the shifted columns ride down with their cells.
|
|
30
40
|
onChangeSheets === null || onChangeSheets === void 0 ? void 0 : onChangeSheets(function (prevSheets) {
|
|
31
41
|
var _a = __read(produceWithPatches(prevSheets, function (draft) {
|
|
32
42
|
var sheet = draft.find(function (sheet) { return sheet.sheetId === sheetId; });
|
|
33
|
-
if (sheet) {
|
|
34
|
-
|
|
35
|
-
sheet.merges = moveMergedCells(sheet.merges, "row-insert", rowIndex);
|
|
36
|
-
}
|
|
43
|
+
if (sheet === null || sheet === void 0 ? void 0 : sheet.merges) {
|
|
44
|
+
sheet.merges = shiftMergesInBand(sheet.merges, "row", r1, count, true, c1, c2);
|
|
37
45
|
}
|
|
38
46
|
}), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
|
|
39
47
|
// Save history
|
|
@@ -42,40 +50,61 @@ export var insertCellsShiftDown = function (_a) {
|
|
|
42
50
|
});
|
|
43
51
|
return nextState;
|
|
44
52
|
});
|
|
53
|
+
// Tables whose columns the band covers entirely move with it (a partial cover was refused).
|
|
54
|
+
onChangeTables === null || onChangeTables === void 0 ? void 0 : onChangeTables(function (prevTables) {
|
|
55
|
+
var _a = __read(produceWithPatches(prevTables, function (draft) {
|
|
56
|
+
var e_1, _a;
|
|
57
|
+
try {
|
|
58
|
+
for (var draft_1 = __values(draft), draft_1_1 = draft_1.next(); !draft_1_1.done; draft_1_1 = draft_1.next()) {
|
|
59
|
+
var table = draft_1_1.value;
|
|
60
|
+
if (table.sheetId !== sheetId ||
|
|
61
|
+
!isRangeInsideBand(table.range, band)) {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
table.range.startRowIndex += count;
|
|
65
|
+
table.range.endRowIndex += count;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
69
|
+
finally {
|
|
70
|
+
try {
|
|
71
|
+
if (draft_1_1 && !draft_1_1.done && (_a = draft_1.return)) _a.call(draft_1);
|
|
72
|
+
}
|
|
73
|
+
finally { if (e_1) throw e_1.error; }
|
|
74
|
+
}
|
|
75
|
+
}), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
|
|
76
|
+
saveHistory({ tables: { patches: patches, inversePatches: inversePatches } });
|
|
77
|
+
return nextState;
|
|
78
|
+
});
|
|
45
79
|
// Update citations - shift if in affected columns and after insertion row
|
|
46
80
|
onChangeCitations === null || onChangeCitations === void 0 ? void 0 : onChangeCitations(function (prevCitations) {
|
|
47
81
|
var _a = __read(produceWithPatches(prevCitations, function (draft) {
|
|
48
|
-
var
|
|
49
|
-
var affectedColStart = selection.range.startColumnIndex;
|
|
50
|
-
var affectedColEnd = selection.range.endColumnIndex;
|
|
51
|
-
var insertRowStart = selection.range.startRowIndex;
|
|
52
|
-
var shiftAmount = selection.range.endRowIndex - selection.range.startRowIndex + 1;
|
|
82
|
+
var e_2, _a;
|
|
53
83
|
try {
|
|
54
|
-
for (var
|
|
55
|
-
var citation =
|
|
84
|
+
for (var draft_2 = __values(draft), draft_2_1 = draft_2.next(); !draft_2_1.done; draft_2_1 = draft_2.next()) {
|
|
85
|
+
var citation = draft_2_1.value;
|
|
56
86
|
// Skip citations on other sheets
|
|
57
87
|
if (citation.range.sheetId !== sheetId) {
|
|
58
88
|
continue;
|
|
59
89
|
}
|
|
60
90
|
// Check if citation overlaps with affected columns
|
|
61
|
-
var
|
|
62
|
-
|
|
63
|
-
var colsOverlap = !(citationColEnd < affectedColStart || citationColStart > affectedColEnd);
|
|
91
|
+
var colsOverlap = !(citation.range.endColumnIndex < c1 ||
|
|
92
|
+
citation.range.startColumnIndex > c2);
|
|
64
93
|
if (colsOverlap) {
|
|
65
94
|
// If citation starts at or after the insertion row, shift it down
|
|
66
|
-
if (citation.range.startRowIndex >=
|
|
67
|
-
citation.range.startRowIndex +=
|
|
68
|
-
citation.range.endRowIndex +=
|
|
95
|
+
if (citation.range.startRowIndex >= r1) {
|
|
96
|
+
citation.range.startRowIndex += count;
|
|
97
|
+
citation.range.endRowIndex += count;
|
|
69
98
|
}
|
|
70
99
|
}
|
|
71
100
|
}
|
|
72
101
|
}
|
|
73
|
-
catch (
|
|
102
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
74
103
|
finally {
|
|
75
104
|
try {
|
|
76
|
-
if (
|
|
105
|
+
if (draft_2_1 && !draft_2_1.done && (_a = draft_2.return)) _a.call(draft_2);
|
|
77
106
|
}
|
|
78
|
-
finally { if (
|
|
107
|
+
finally { if (e_2) throw e_2.error; }
|
|
79
108
|
}
|
|
80
109
|
}), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
|
|
81
110
|
saveHistory({
|
|
@@ -86,15 +115,34 @@ export var insertCellsShiftDown = function (_a) {
|
|
|
86
115
|
// Sheet data
|
|
87
116
|
onChangeSheetData === null || onChangeSheetData === void 0 ? void 0 : onChangeSheetData(function (prevSheetData) {
|
|
88
117
|
var _a = __read(produceWithPatches(prevSheetData, function (draft) {
|
|
89
|
-
var
|
|
118
|
+
var e_3, _a;
|
|
119
|
+
var _b, _c, _d, _e, _f, _g, _h, _j;
|
|
90
120
|
var movedKeys = new Set();
|
|
91
|
-
var totalRows = (
|
|
92
|
-
|
|
121
|
+
var totalRows = Math.max((_c = (_b = draft[sheetId]) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0, r2 + 1);
|
|
122
|
+
// Everything at or below the insertion row in the band's columns moves down by `count`.
|
|
123
|
+
var sourceRange = {
|
|
124
|
+
startRowIndex: r1,
|
|
125
|
+
endRowIndex: totalRows + count,
|
|
126
|
+
startColumnIndex: c1,
|
|
127
|
+
endColumnIndex: c2,
|
|
128
|
+
};
|
|
129
|
+
// Formulas that read a moving cell — captured before the graph goes stale.
|
|
130
|
+
var dependents = collectUniqueDependentsForRange({
|
|
131
|
+
draft: draft,
|
|
132
|
+
sheetId: sheetId,
|
|
133
|
+
sourceRange: {
|
|
134
|
+
startRowIndex: r1,
|
|
135
|
+
endRowIndex: totalRows,
|
|
136
|
+
startColumnIndex: c1,
|
|
137
|
+
endColumnIndex: c2,
|
|
138
|
+
},
|
|
139
|
+
getDependents: getDependents,
|
|
140
|
+
});
|
|
141
|
+
for (var rowIndex = totalRows; rowIndex >= r1; rowIndex--) {
|
|
93
142
|
// We have a for loop
|
|
94
143
|
// to cater for table expansion
|
|
95
144
|
// which will push multiple columns down
|
|
96
|
-
for (var columnIndex =
|
|
97
|
-
var sourceRange = __assign(__assign({}, selection.range), { endRowIndex: selection.range.endRowIndex + count });
|
|
145
|
+
for (var columnIndex = c1; columnIndex <= c2; columnIndex++) {
|
|
98
146
|
// Process dependents
|
|
99
147
|
processSideEffectDependentCells({
|
|
100
148
|
draft: draft,
|
|
@@ -105,6 +153,7 @@ export var insertCellsShiftDown = function (_a) {
|
|
|
105
153
|
enqueueGraphOperation: enqueueGraphOperation,
|
|
106
154
|
enqueueCalculation: enqueueCalculation,
|
|
107
155
|
getDependents: getDependents,
|
|
156
|
+
getSheetName: getSheetName,
|
|
108
157
|
recalcCells: recalcCells,
|
|
109
158
|
rowDelta: count,
|
|
110
159
|
sourceRange: sourceRange,
|
|
@@ -115,26 +164,72 @@ export var insertCellsShiftDown = function (_a) {
|
|
|
115
164
|
cellXfsRegistry: cellXfsRegistry,
|
|
116
165
|
sharedStringRegistry: sharedStringRegistry,
|
|
117
166
|
});
|
|
118
|
-
|
|
119
|
-
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// SHF-08: a range living entirely inside the band's columns that straddles the insertion
|
|
170
|
+
// row grows by the inserted height (Excel's "insert inside a range expands it"). Runs on
|
|
171
|
+
// the pre-shift positions; the value shift below carries in-band dependents down.
|
|
172
|
+
var sheetCell = new SheetCell();
|
|
173
|
+
try {
|
|
174
|
+
for (var _k = __values(dependents.values()), _l = _k.next(); !_l.done; _l = _k.next()) {
|
|
175
|
+
var pos = _l.value;
|
|
176
|
+
if (pos.sheetId !== sheetId)
|
|
120
177
|
continue;
|
|
121
|
-
|
|
178
|
+
var currentSheet = createSheetDraft(draft, sheetId, pos.rowIndex);
|
|
179
|
+
var cellData = (_e = (_d = currentSheet[pos.rowIndex]) === null || _d === void 0 ? void 0 : _d.values) === null || _e === void 0 ? void 0 : _e[pos.columnIndex];
|
|
180
|
+
sheetCell.assign(sheetId, { rowIndex: pos.rowIndex, columnIndex: pos.columnIndex }, cellData, { locale: locale, cellXfsRegistry: cellXfsRegistry, sharedStringRegistry: sharedStringRegistry });
|
|
181
|
+
var formulaValue = sheetCell.formula;
|
|
182
|
+
if (!formulaValue)
|
|
183
|
+
continue;
|
|
184
|
+
var expanded = expandRangesInFormula(formulaValue, r1, count, "row", sheetName, { bandSpan: { startIndex: c1, endIndex: c2 } });
|
|
185
|
+
if (!expanded || expanded === formulaValue)
|
|
186
|
+
continue;
|
|
187
|
+
sheetCell.setFormulaValue(expanded, false);
|
|
188
|
+
currentSheet[pos.rowIndex].values[pos.columnIndex] =
|
|
189
|
+
sheetCell.getCellData();
|
|
190
|
+
var movesWithBand = pos.rowIndex >= r1 && pos.columnIndex >= c1 && pos.columnIndex <= c2;
|
|
191
|
+
var finalPosition = {
|
|
192
|
+
sheetId: sheetId,
|
|
193
|
+
rowIndex: movesWithBand ? pos.rowIndex + count : pos.rowIndex,
|
|
194
|
+
columnIndex: pos.columnIndex,
|
|
195
|
+
};
|
|
196
|
+
var enqueueOperation = sheetCell.ephemeral()
|
|
197
|
+
? enqueueCalculation
|
|
198
|
+
: enqueueGraphOperation;
|
|
199
|
+
enqueueOperation === null || enqueueOperation === void 0 ? void 0 : enqueueOperation({ type: "add", position: finalPosition });
|
|
200
|
+
enqueueCalculation === null || enqueueCalculation === void 0 ? void 0 : enqueueCalculation({
|
|
201
|
+
type: "dirty",
|
|
202
|
+
position: finalPosition,
|
|
203
|
+
force: true,
|
|
204
|
+
});
|
|
205
|
+
recalcCells.set(createSheetCellIdentifier(sheetId, finalPosition.rowIndex, finalPosition.columnIndex), finalPosition);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
209
|
+
finally {
|
|
210
|
+
try {
|
|
211
|
+
if (_l && !_l.done && (_a = _k.return)) _a.call(_k);
|
|
122
212
|
}
|
|
213
|
+
finally { if (e_3) throw e_3.error; }
|
|
123
214
|
}
|
|
124
215
|
// Update values
|
|
125
|
-
for (var rowIndex = totalRows + count; rowIndex >
|
|
216
|
+
for (var rowIndex = totalRows + count; rowIndex > r1; rowIndex--) {
|
|
126
217
|
var currentSheet = createSheetDraft(draft, sheetId, rowIndex);
|
|
127
|
-
for (var columnIndex =
|
|
128
|
-
var previousValue = (
|
|
218
|
+
for (var columnIndex = c2; columnIndex >= c1; columnIndex--) {
|
|
219
|
+
var previousValue = (_g = (_f = currentSheet[rowIndex - count]) === null || _f === void 0 ? void 0 : _f.values) === null || _g === void 0 ? void 0 : _g[columnIndex];
|
|
129
220
|
currentSheet[rowIndex].values[columnIndex] = previousValue;
|
|
130
221
|
}
|
|
131
222
|
}
|
|
132
|
-
//
|
|
133
|
-
|
|
223
|
+
// FMT-03: the inserted cells take the formatting of the cell directly ABOVE the
|
|
224
|
+
// insertion; at row 1 there is none, so they keep the displaced cell's formatting.
|
|
225
|
+
for (var rowIndex = r1; rowIndex <= r2; rowIndex++) {
|
|
134
226
|
var currentSheet = createSheetDraft(draft, sheetId, rowIndex);
|
|
135
|
-
for (var columnIndex =
|
|
227
|
+
for (var columnIndex = c2; columnIndex >= c1; columnIndex--) {
|
|
228
|
+
var formatSource = r1 > 1
|
|
229
|
+
? (_j = (_h = currentSheet[r1 - 1]) === null || _h === void 0 ? void 0 : _h.values) === null || _j === void 0 ? void 0 : _j[columnIndex]
|
|
230
|
+
: currentSheet[rowIndex].values[columnIndex];
|
|
136
231
|
currentSheet[rowIndex].values[columnIndex] =
|
|
137
|
-
cloneCellWithFormatting(
|
|
232
|
+
cloneCellWithFormatting(formatSource);
|
|
138
233
|
}
|
|
139
234
|
}
|
|
140
235
|
}), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import type { CellData, CellInterface, SelectionArea } from "@rowsncolumns/common-types";
|
|
2
2
|
import type { SelectionAttributes, Sheet } from "@rowsncolumns/spreadsheet";
|
|
3
3
|
import type { UseOnInsertCellsShiftRight } from "../hooks/use-on-insert-cells-shift-right";
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Insert cells ▸ Shift cells right (SHF-02, FMT-04) — the horizontal twin of
|
|
6
|
+
* `insertCellsShiftDown`: only the selection's rows move, every cell at or right of the selection's
|
|
7
|
+
* first column slides right by the selection's width. References follow shifted cells; a range
|
|
8
|
+
* entirely inside the shifted rows that straddles the insertion column widens (SHF-08 analog);
|
|
9
|
+
* the vacated cells take the formatting of the cell to the LEFT of the insertion (FMT-04). Refusals
|
|
10
|
+
* (torn merge/table/array, a non-blank cell pushed past `columnCount` — SHF-10) are decided by the
|
|
11
|
+
* hook before this runs.
|
|
12
|
+
*/
|
|
13
|
+
export declare const insertCellsShiftRight: <T extends CellData, S extends Sheet>({ rowCount, columnCount, locale, cellXfsRegistry, sharedStringRegistry, getActiveCell, getSelections, getDependents, getSheetName, createHistory, enqueueGraphOperation, enqueueCalculation, enqueueStructureChange, onChangeSheetData, onChangeSheets, onChangeTables, onChangeCitations, }: UseOnInsertCellsShiftRight<T, S>) => (sheetId: number, activeCell: CellInterface, selections: SelectionArea<SelectionAttributes>[]) => void;
|
|
5
14
|
//# sourceMappingURL=insert-cells-shift-right.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insert-cells-shift-right.d.ts","sourceRoot":"","sources":["../../../interface/insert-cells-shift-right.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EAEb,aAAa,EACd,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"insert-cells-shift-right.d.ts","sourceRoot":"","sources":["../../../interface/insert-cells-shift-right.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EAEb,aAAa,EACd,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAgB5E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AAI3F;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,8RAkBxE,0BAA0B,CAAC,CAAC,EAAE,CAAC,CAAC,MAE/B,SAAS,MAAM,EACf,YAAY,aAAa,EACzB,YAAY,aAAa,CAAC,mBAAmB,CAAC,EAAE,SAqQnD,CAAC"}
|
|
@@ -1,41 +1,48 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { createArrayRange
|
|
1
|
+
import { __read, __spreadArray, __values } from "tslib";
|
|
2
|
+
import { createArrayRange } from "@rowsncolumns/utils";
|
|
3
3
|
import { produceWithPatches } from "immer";
|
|
4
|
-
import { processSideEffectDependentCells } from "../api/dependency";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { collectUniqueDependentsForRange, processSideEffectDependentCells, } from "../api/dependency";
|
|
5
|
+
import { createSheetCellIdentifier, expandRangesInFormula } from "../api/formula";
|
|
6
|
+
import { cloneCellWithFormatting, createSheetDraft } from "../api/immer-utils";
|
|
7
|
+
import { shiftMergesInBand } from "../api/merges";
|
|
8
|
+
import { isRangeInsideBand, resolveShiftSelection, shiftBand, } from "../api/structural-guards";
|
|
9
|
+
import { SheetCell } from "../sheet-cell";
|
|
10
|
+
/**
|
|
11
|
+
* Insert cells ▸ Shift cells right (SHF-02, FMT-04) — the horizontal twin of
|
|
12
|
+
* `insertCellsShiftDown`: only the selection's rows move, every cell at or right of the selection's
|
|
13
|
+
* first column slides right by the selection's width. References follow shifted cells; a range
|
|
14
|
+
* entirely inside the shifted rows that straddles the insertion column widens (SHF-08 analog);
|
|
15
|
+
* the vacated cells take the formatting of the cell to the LEFT of the insertion (FMT-04). Refusals
|
|
16
|
+
* (torn merge/table/array, a non-blank cell pushed past `columnCount` — SHF-10) are decided by the
|
|
17
|
+
* hook before this runs.
|
|
18
|
+
*/
|
|
7
19
|
export var insertCellsShiftRight = function (_a) {
|
|
8
|
-
var rowCount = _a.rowCount, columnCount = _a.columnCount, locale = _a.locale, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry, getActiveCell = _a.getActiveCell, getSelections = _a.getSelections, getDependents = _a.getDependents, createHistory = _a.createHistory, enqueueGraphOperation = _a.enqueueGraphOperation, enqueueCalculation = _a.enqueueCalculation, enqueueStructureChange = _a.enqueueStructureChange, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeCitations = _a.onChangeCitations;
|
|
20
|
+
var rowCount = _a.rowCount, columnCount = _a.columnCount, locale = _a.locale, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry, getActiveCell = _a.getActiveCell, getSelections = _a.getSelections, getDependents = _a.getDependents, getSheetName = _a.getSheetName, createHistory = _a.createHistory, enqueueGraphOperation = _a.enqueueGraphOperation, enqueueCalculation = _a.enqueueCalculation, enqueueStructureChange = _a.enqueueStructureChange, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeCitations = _a.onChangeCitations;
|
|
9
21
|
return function (sheetId, activeCell, selections) {
|
|
22
|
+
var _a;
|
|
10
23
|
var saveHistory = createHistory();
|
|
11
24
|
// We need to track this for history. Precedent cells
|
|
12
25
|
var recalcCells = new Map();
|
|
13
|
-
|
|
14
|
-
var
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
var selection = finalSelections[finalSelections.length - 1];
|
|
19
|
-
var count = selection.range.endRowIndex - selection.range.startRowIndex + 1;
|
|
26
|
+
var selection = resolveShiftSelection(activeCell, selections);
|
|
27
|
+
var _b = selection.range, r1 = _b.startRowIndex, r2 = _b.endRowIndex, c1 = _b.startColumnIndex, c2 = _b.endColumnIndex;
|
|
28
|
+
var count = c2 - c1 + 1;
|
|
29
|
+
var band = shiftBand("right", selection.range);
|
|
30
|
+
var sheetName = (_a = getSheetName === null || getSheetName === void 0 ? void 0 : getSheetName(sheetId)) !== null && _a !== void 0 ? _a : "";
|
|
20
31
|
enqueueStructureChange === null || enqueueStructureChange === void 0 ? void 0 : enqueueStructureChange({
|
|
21
32
|
kind: "insert-cells-shift-right",
|
|
22
33
|
sheetId: sheetId,
|
|
23
|
-
startRowIndex:
|
|
24
|
-
endRowIndex:
|
|
25
|
-
startColumnIndex:
|
|
26
|
-
endColumnIndex:
|
|
34
|
+
startRowIndex: r1,
|
|
35
|
+
endRowIndex: r2,
|
|
36
|
+
startColumnIndex: c1,
|
|
37
|
+
endColumnIndex: c2,
|
|
27
38
|
columnCount: columnCount,
|
|
28
39
|
});
|
|
29
|
-
// Update sheets
|
|
40
|
+
// Update sheets — merges wholly inside the shifted rows ride right with their cells.
|
|
30
41
|
onChangeSheets === null || onChangeSheets === void 0 ? void 0 : onChangeSheets(function (prevSheets) {
|
|
31
42
|
var _a = __read(produceWithPatches(prevSheets, function (draft) {
|
|
32
43
|
var sheet = draft.find(function (sheet) { return sheet.sheetId === sheetId; });
|
|
33
|
-
if (sheet) {
|
|
34
|
-
|
|
35
|
-
if (sheet.merges) {
|
|
36
|
-
sheet.merges = moveMergedCells(sheet.merges, "column-insert", columnIndex);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
44
|
+
if (sheet === null || sheet === void 0 ? void 0 : sheet.merges) {
|
|
45
|
+
sheet.merges = shiftMergesInBand(sheet.merges, "column", c1, count, true, r1, r2);
|
|
39
46
|
}
|
|
40
47
|
}), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
|
|
41
48
|
// Save history
|
|
@@ -44,43 +51,61 @@ export var insertCellsShiftRight = function (_a) {
|
|
|
44
51
|
});
|
|
45
52
|
return nextState;
|
|
46
53
|
});
|
|
54
|
+
// Tables whose rows the band covers entirely move with it (a partial cover was refused).
|
|
55
|
+
onChangeTables === null || onChangeTables === void 0 ? void 0 : onChangeTables(function (prevTables) {
|
|
56
|
+
var _a = __read(produceWithPatches(prevTables, function (draft) {
|
|
57
|
+
var e_1, _a;
|
|
58
|
+
try {
|
|
59
|
+
for (var draft_1 = __values(draft), draft_1_1 = draft_1.next(); !draft_1_1.done; draft_1_1 = draft_1.next()) {
|
|
60
|
+
var table = draft_1_1.value;
|
|
61
|
+
if (table.sheetId !== sheetId ||
|
|
62
|
+
!isRangeInsideBand(table.range, band)) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
table.range.startColumnIndex += count;
|
|
66
|
+
table.range.endColumnIndex += count;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
70
|
+
finally {
|
|
71
|
+
try {
|
|
72
|
+
if (draft_1_1 && !draft_1_1.done && (_a = draft_1.return)) _a.call(draft_1);
|
|
73
|
+
}
|
|
74
|
+
finally { if (e_1) throw e_1.error; }
|
|
75
|
+
}
|
|
76
|
+
}), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
|
|
77
|
+
saveHistory({ tables: { patches: patches, inversePatches: inversePatches } });
|
|
78
|
+
return nextState;
|
|
79
|
+
});
|
|
47
80
|
// Update citations - shift if in affected rows and after insertion column
|
|
48
81
|
onChangeCitations === null || onChangeCitations === void 0 ? void 0 : onChangeCitations(function (prevCitations) {
|
|
49
82
|
var _a = __read(produceWithPatches(prevCitations, function (draft) {
|
|
50
|
-
var
|
|
51
|
-
var affectedRowStart = selection.range.startRowIndex;
|
|
52
|
-
var affectedRowEnd = selection.range.endRowIndex;
|
|
53
|
-
var insertColumnStart = selection.range.startColumnIndex;
|
|
54
|
-
var shiftAmount = selection.range.endColumnIndex -
|
|
55
|
-
selection.range.startColumnIndex +
|
|
56
|
-
1;
|
|
83
|
+
var e_2, _a;
|
|
57
84
|
try {
|
|
58
|
-
for (var
|
|
59
|
-
var citation =
|
|
85
|
+
for (var draft_2 = __values(draft), draft_2_1 = draft_2.next(); !draft_2_1.done; draft_2_1 = draft_2.next()) {
|
|
86
|
+
var citation = draft_2_1.value;
|
|
60
87
|
// Skip citations on other sheets
|
|
61
88
|
if (citation.range.sheetId !== sheetId) {
|
|
62
89
|
continue;
|
|
63
90
|
}
|
|
64
91
|
// Check if citation overlaps with affected rows
|
|
65
|
-
var
|
|
66
|
-
|
|
67
|
-
var rowsOverlap = !(citationRowEnd < affectedRowStart ||
|
|
68
|
-
citationRowStart > affectedRowEnd);
|
|
92
|
+
var rowsOverlap = !(citation.range.endRowIndex < r1 ||
|
|
93
|
+
citation.range.startRowIndex > r2);
|
|
69
94
|
if (rowsOverlap) {
|
|
70
95
|
// If citation starts at or after the insertion column, shift it right
|
|
71
|
-
if (citation.range.startColumnIndex >=
|
|
72
|
-
citation.range.startColumnIndex +=
|
|
73
|
-
citation.range.endColumnIndex +=
|
|
96
|
+
if (citation.range.startColumnIndex >= c1) {
|
|
97
|
+
citation.range.startColumnIndex += count;
|
|
98
|
+
citation.range.endColumnIndex += count;
|
|
74
99
|
}
|
|
75
100
|
}
|
|
76
101
|
}
|
|
77
102
|
}
|
|
78
|
-
catch (
|
|
103
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
79
104
|
finally {
|
|
80
105
|
try {
|
|
81
|
-
if (
|
|
106
|
+
if (draft_2_1 && !draft_2_1.done && (_a = draft_2.return)) _a.call(draft_2);
|
|
82
107
|
}
|
|
83
|
-
finally { if (
|
|
108
|
+
finally { if (e_2) throw e_2.error; }
|
|
84
109
|
}
|
|
85
110
|
}), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
|
|
86
111
|
saveHistory({
|
|
@@ -91,12 +116,34 @@ export var insertCellsShiftRight = function (_a) {
|
|
|
91
116
|
// Sheet data
|
|
92
117
|
onChangeSheetData === null || onChangeSheetData === void 0 ? void 0 : onChangeSheetData(function (prevSheetData) {
|
|
93
118
|
var _a = __read(produceWithPatches(prevSheetData, function (draft) {
|
|
94
|
-
var
|
|
119
|
+
var e_3, _a;
|
|
120
|
+
var _b, _c, _d, _e, _f, _g, _h, _j;
|
|
95
121
|
var movedKeys = new Set();
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
122
|
+
var totalColumns = Math.max(columnCount, c2 + 1);
|
|
123
|
+
for (var rowIndex = r1; rowIndex <= r2; rowIndex++) {
|
|
124
|
+
totalColumns = Math.max(totalColumns, (_e = (_d = (_c = (_b = draft[sheetId]) === null || _b === void 0 ? void 0 : _b[rowIndex]) === null || _c === void 0 ? void 0 : _c.values) === null || _d === void 0 ? void 0 : _d.length) !== null && _e !== void 0 ? _e : 0);
|
|
125
|
+
}
|
|
126
|
+
// Everything at or right of the insertion column in the band's rows moves by `count`.
|
|
127
|
+
var sourceRange = {
|
|
128
|
+
startRowIndex: r1,
|
|
129
|
+
endRowIndex: r2,
|
|
130
|
+
startColumnIndex: c1,
|
|
131
|
+
endColumnIndex: totalColumns + count,
|
|
132
|
+
};
|
|
133
|
+
// Formulas that read a moving cell — captured before the graph goes stale.
|
|
134
|
+
var dependents = collectUniqueDependentsForRange({
|
|
135
|
+
draft: draft,
|
|
136
|
+
sheetId: sheetId,
|
|
137
|
+
sourceRange: {
|
|
138
|
+
startRowIndex: r1,
|
|
139
|
+
endRowIndex: r2,
|
|
140
|
+
startColumnIndex: c1,
|
|
141
|
+
endColumnIndex: totalColumns,
|
|
142
|
+
},
|
|
143
|
+
getDependents: getDependents,
|
|
144
|
+
});
|
|
145
|
+
for (var rowIndex = r1; rowIndex <= r2; rowIndex++) {
|
|
146
|
+
for (var columnIndex = totalColumns; columnIndex >= c1; columnIndex--) {
|
|
100
147
|
// Process dependents
|
|
101
148
|
processSideEffectDependentCells({
|
|
102
149
|
draft: draft,
|
|
@@ -107,6 +154,7 @@ export var insertCellsShiftRight = function (_a) {
|
|
|
107
154
|
enqueueGraphOperation: enqueueGraphOperation,
|
|
108
155
|
enqueueCalculation: enqueueCalculation,
|
|
109
156
|
getDependents: getDependents,
|
|
157
|
+
getSheetName: getSheetName,
|
|
110
158
|
recalcCells: recalcCells,
|
|
111
159
|
rowDelta: 0,
|
|
112
160
|
sourceRange: sourceRange,
|
|
@@ -119,18 +167,66 @@ export var insertCellsShiftRight = function (_a) {
|
|
|
119
167
|
});
|
|
120
168
|
}
|
|
121
169
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
170
|
+
// SHF-08 analog: a range living entirely inside the band's rows that straddles the
|
|
171
|
+
// insertion column widens by the inserted width. Runs on the pre-shift positions; the
|
|
172
|
+
// splice below carries in-band dependents right.
|
|
173
|
+
var sheetCell = new SheetCell();
|
|
174
|
+
try {
|
|
175
|
+
for (var _k = __values(dependents.values()), _l = _k.next(); !_l.done; _l = _k.next()) {
|
|
176
|
+
var pos = _l.value;
|
|
177
|
+
if (pos.sheetId !== sheetId)
|
|
178
|
+
continue;
|
|
179
|
+
var currentSheet = createSheetDraft(draft, sheetId, pos.rowIndex);
|
|
180
|
+
var cellData = (_g = (_f = currentSheet[pos.rowIndex]) === null || _f === void 0 ? void 0 : _f.values) === null || _g === void 0 ? void 0 : _g[pos.columnIndex];
|
|
181
|
+
sheetCell.assign(sheetId, { rowIndex: pos.rowIndex, columnIndex: pos.columnIndex }, cellData, { locale: locale, cellXfsRegistry: cellXfsRegistry, sharedStringRegistry: sharedStringRegistry });
|
|
182
|
+
var formulaValue = sheetCell.formula;
|
|
183
|
+
if (!formulaValue)
|
|
184
|
+
continue;
|
|
185
|
+
var expanded = expandRangesInFormula(formulaValue, c1, count, "column", sheetName, { bandSpan: { startIndex: r1, endIndex: r2 } });
|
|
186
|
+
if (!expanded || expanded === formulaValue)
|
|
187
|
+
continue;
|
|
188
|
+
sheetCell.setFormulaValue(expanded, false);
|
|
189
|
+
currentSheet[pos.rowIndex].values[pos.columnIndex] =
|
|
190
|
+
sheetCell.getCellData();
|
|
191
|
+
var movesWithBand = pos.columnIndex >= c1 && pos.rowIndex >= r1 && pos.rowIndex <= r2;
|
|
192
|
+
var finalPosition = {
|
|
193
|
+
sheetId: sheetId,
|
|
194
|
+
rowIndex: pos.rowIndex,
|
|
195
|
+
columnIndex: movesWithBand
|
|
196
|
+
? pos.columnIndex + count
|
|
197
|
+
: pos.columnIndex,
|
|
198
|
+
};
|
|
199
|
+
var enqueueOperation = sheetCell.ephemeral()
|
|
200
|
+
? enqueueCalculation
|
|
201
|
+
: enqueueGraphOperation;
|
|
202
|
+
enqueueOperation === null || enqueueOperation === void 0 ? void 0 : enqueueOperation({ type: "add", position: finalPosition });
|
|
203
|
+
enqueueCalculation === null || enqueueCalculation === void 0 ? void 0 : enqueueCalculation({
|
|
204
|
+
type: "dirty",
|
|
205
|
+
position: finalPosition,
|
|
206
|
+
force: true,
|
|
207
|
+
});
|
|
208
|
+
recalcCells.set(createSheetCellIdentifier(sheetId, finalPosition.rowIndex, finalPosition.columnIndex), finalPosition);
|
|
130
209
|
}
|
|
210
|
+
}
|
|
211
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
212
|
+
finally {
|
|
213
|
+
try {
|
|
214
|
+
if (_l && !_l.done && (_a = _k.return)) _a.call(_k);
|
|
215
|
+
}
|
|
216
|
+
finally { if (e_3) throw e_3.error; }
|
|
217
|
+
}
|
|
218
|
+
var _loop_1 = function (rowIndex) {
|
|
219
|
+
var values = (_j = (_h = draft[sheetId]) === null || _h === void 0 ? void 0 : _h[rowIndex]) === null || _j === void 0 ? void 0 : _j.values;
|
|
220
|
+
if (!values)
|
|
221
|
+
return "continue";
|
|
222
|
+
values.splice.apply(values, __spreadArray([c1,
|
|
223
|
+
0], __read(createArrayRange(c1, c2).map(function (columnIndex) {
|
|
224
|
+
return cloneCellWithFormatting(c1 > 1 ? values[c1 - 1] : values[columnIndex]);
|
|
225
|
+
})), false));
|
|
131
226
|
};
|
|
132
|
-
//
|
|
133
|
-
|
|
227
|
+
// Splice the inserted cells in. FMT-04: they take the formatting of the cell directly
|
|
228
|
+
// LEFT of the insertion; at column 1 there is none, so they keep the displaced cell's.
|
|
229
|
+
for (var rowIndex = r1; rowIndex <= r2; rowIndex++) {
|
|
134
230
|
_loop_1(rowIndex);
|
|
135
231
|
}
|
|
136
232
|
}), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
|
|
@@ -2,6 +2,6 @@ import { Direction } from "@rowsncolumns/common-types";
|
|
|
2
2
|
import type { CellData, Sheet, TableView } from "@rowsncolumns/spreadsheet";
|
|
3
3
|
import type { UseOnInsertColumnProps } from "../hooks/use-on-insert-column";
|
|
4
4
|
import type { UseOnTableProps } from "../hooks/use-on-table";
|
|
5
|
-
export declare const insertColumn: <T extends CellData, S extends Sheet>({ rowCount, columnCount, locale, tables, cellXfsRegistry, sharedStringRegistry, getSheetName, getDependents, getGraphNodes, getGraphNodesInSheet, getActiveCell, getSelections, createHistory, enqueueGraphOperation, enqueueCalculation, enqueueStructureChange, onChangeSheetData, onChangeSheets, onChangeTables, onChangeDataValidations, onChangeConditionalFormats, onChangeCitations, onChangePivotTables, generatedNames, }: UseOnInsertColumnProps<T, S>) => (sheetId: number, referenceColumnIndex: number, numColumns?: number) => void;
|
|
5
|
+
export declare const insertColumn: <T extends CellData, S extends Sheet>({ rowCount, columnCount, locale, maxColumnCount, tables, cellXfsRegistry, sharedStringRegistry, getSheetName, getDependents, getGraphNodes, getGraphNodesInSheet, getActiveCell, getSelections, createHistory, enqueueGraphOperation, enqueueCalculation, enqueueStructureChange, onChangeSheetData, onChangeSheets, onChangeTables, onChangeDataValidations, onChangeConditionalFormats, onChangeCitations, onChangePivotTables, onChangeNamedRanges, onChangeEmbeds, onChangeCharts, onChangeProtectedRanges, generatedNames, }: UseOnInsertColumnProps<T, S>) => (sheetId: number, referenceColumnIndex: number, numColumns?: number) => void;
|
|
6
6
|
export declare const insertTableColumn: <T extends CellData, S extends Sheet>({ tables, columnCount, rowCount, locale, cellXfsRegistry, sharedStringRegistry, getSheetName, createHistory, onChangeTables, onChangeSheets, onChangeSheetData, enqueueCalculation, enqueueStructureChange, enqueueGraphOperation, getDependents, generatedNames, }: Pick<UseOnTableProps<T, S>, "tables" | "columnCount" | "rowCount" | "locale" | "cellXfsRegistry" | "sharedStringRegistry" | "createHistory" | "onChangeTables" | "onChangeSheets" | "onChangeSheetData" | "enqueueCalculation" | "enqueueStructureChange" | "enqueueGraphOperation" | "getDependents" | "getSheetName" | "generatedNames">) => (tableView: TableView, dimensionIndex: number, direction: Direction.Left | Direction.Right) => void;
|
|
7
7
|
//# sourceMappingURL=insert-column.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insert-column.d.ts","sourceRoot":"","sources":["../../../interface/insert-column.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"insert-column.d.ts","sourceRoot":"","sources":["../../../interface/insert-column.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAkC5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI7D,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,mgBA8B/D,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,MACrB,SAAS,MAAM,EAAE,sBAAsB,MAAM,EAAE,mBAAc,SAoatE,CAAC;AAMF,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,qQAiBpE,IAAI,CACL,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EACnB,QAAQ,GACR,aAAa,GACb,UAAU,GACV,QAAQ,GACR,iBAAiB,GACjB,sBAAsB,GACtB,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,GACnB,oBAAoB,GACpB,wBAAwB,GACxB,uBAAuB,GACvB,eAAe,GACf,cAAc,GACd,gBAAgB,CACnB,MAEG,WAAW,SAAS,EACpB,gBAAgB,MAAM,EACtB,WAAW,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,SA2V9C,CAAC"}
|