@rowsncolumns/spreadsheet-state 29.1.4 → 29.1.7
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/circular-reference.d.ts +31 -0
- package/dist/cjs/api/circular-reference.d.ts.map +1 -0
- package/dist/cjs/api/circular-reference.js +85 -0
- package/dist/cjs/api/copy-paste.d.ts +6 -0
- package/dist/cjs/api/copy-paste.d.ts.map +1 -1
- package/dist/cjs/api/copy-paste.js +24 -15
- package/dist/cjs/api/datatype.d.ts +2 -0
- package/dist/cjs/api/datatype.d.ts.map +1 -1
- package/dist/cjs/api/datatype.js +61 -35
- package/dist/cjs/api/date.d.ts.map +1 -1
- package/dist/cjs/api/date.js +23 -14
- package/dist/cjs/api/decimals.d.ts +10 -0
- package/dist/cjs/api/decimals.d.ts.map +1 -1
- package/dist/cjs/api/decimals.js +34 -11
- package/dist/cjs/api/dependency.d.ts +19 -1
- package/dist/cjs/api/dependency.d.ts.map +1 -1
- package/dist/cjs/api/dependency.js +30 -14
- package/dist/cjs/api/filter-condition.d.ts +58 -0
- package/dist/cjs/api/filter-condition.d.ts.map +1 -0
- package/dist/cjs/api/filter-condition.js +157 -0
- package/dist/cjs/api/formula.d.ts.map +1 -1
- package/dist/cjs/api/formula.js +9 -7
- package/dist/cjs/api/image-embed.d.ts +41 -0
- package/dist/cjs/api/image-embed.d.ts.map +1 -0
- package/dist/cjs/api/image-embed.js +55 -0
- package/dist/cjs/api/immer-utils.d.ts.map +1 -1
- package/dist/cjs/api/immer-utils.js +43 -15
- package/dist/cjs/api/named-range-structural.d.ts +29 -3
- package/dist/cjs/api/named-range-structural.d.ts.map +1 -1
- package/dist/cjs/api/named-range-structural.js +36 -11
- package/dist/cjs/api/parse-html.d.ts.map +1 -1
- package/dist/cjs/api/parse-html.js +11 -5
- package/dist/cjs/api/structural-formula-update.d.ts +20 -1
- package/dist/cjs/api/structural-formula-update.d.ts.map +1 -1
- package/dist/cjs/api/structural-formula-update.js +264 -90
- package/dist/cjs/api/structural-guards.d.ts +11 -0
- package/dist/cjs/api/structural-guards.d.ts.map +1 -1
- package/dist/cjs/api/structural-guards.js +45 -1
- package/dist/cjs/api/structural-table-refs.d.ts +15 -2
- package/dist/cjs/api/structural-table-refs.d.ts.map +1 -1
- package/dist/cjs/api/structural-table-refs.js +79 -35
- package/dist/cjs/commands.d.ts +17 -3
- package/dist/cjs/commands.d.ts.map +1 -1
- package/dist/cjs/components/editors/conditional-format-rule-editor.d.ts.map +1 -1
- package/dist/cjs/components/editors/conditional-format-rule-editor.js +19 -7
- package/dist/cjs/constants.d.ts +4 -1
- package/dist/cjs/constants.d.ts.map +1 -1
- package/dist/cjs/constants.js +4 -0
- package/dist/cjs/helpers/sheet-title.d.ts +2 -1
- package/dist/cjs/helpers/sheet-title.d.ts.map +1 -1
- package/dist/cjs/helpers/sheet-title.js +3 -1
- package/dist/cjs/hooks/use-can-edit-cellrange.d.ts +1 -1
- package/dist/cjs/hooks/use-can-edit-cellrange.d.ts.map +1 -1
- package/dist/cjs/hooks/use-can-edit-cellrange.js +1 -1
- package/dist/cjs/hooks/use-on-calculation-success.d.ts +5 -1
- package/dist/cjs/hooks/use-on-calculation-success.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-calculation-success.js +20 -3
- package/dist/cjs/hooks/use-on-copy.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-copy.js +23 -25
- package/dist/cjs/hooks/use-on-create-sheet.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-create-sheet.js +11 -1
- package/dist/cjs/hooks/use-on-delete.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete.js +15 -3
- package/dist/cjs/hooks/use-on-drag-n-drop.d.ts +5 -0
- package/dist/cjs/hooks/use-on-drag-n-drop.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-drag-n-drop.js +6 -5
- package/dist/cjs/hooks/use-on-filter-table.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-filter-table.js +6 -1
- package/dist/cjs/hooks/use-on-find-replace.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-find-replace.js +111 -23
- package/dist/cjs/hooks/use-on-insert-image.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-insert-image.js +20 -33
- package/dist/cjs/hooks/use-on-paste.d.ts +2 -1
- package/dist/cjs/hooks/use-on-paste.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-paste.js +53 -24
- package/dist/cjs/hooks/use-on-rename-sheet.d.ts +3 -1
- package/dist/cjs/hooks/use-on-rename-sheet.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-rename-sheet.js +19 -9
- package/dist/cjs/hooks/use-on-sort-column.d.ts +7 -1
- package/dist/cjs/hooks/use-on-sort-column.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-sort-column.js +25 -8
- package/dist/cjs/hooks/use-on-sort-range.d.ts +16 -2
- package/dist/cjs/hooks/use-on-sort-range.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-sort-range.js +72 -40
- package/dist/cjs/hooks/use-on-sort-table.d.ts +7 -2
- package/dist/cjs/hooks/use-on-sort-table.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-sort-table.js +25 -4
- package/dist/cjs/hooks/use-spreadsheet-state.d.ts +5 -3
- package/dist/cjs/hooks/use-spreadsheet-state.d.ts.map +1 -1
- package/dist/cjs/hooks/use-spreadsheet-state.js +7 -0
- package/dist/cjs/hooks/utils/sort-rows.d.ts +15 -0
- package/dist/cjs/hooks/utils/sort-rows.d.ts.map +1 -1
- package/dist/cjs/hooks/utils/sort-rows.js +16 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/interface/delete-column.d.ts.map +1 -1
- package/dist/cjs/interface/delete-column.js +254 -101
- package/dist/cjs/interface/delete-row.d.ts.map +1 -1
- package/dist/cjs/interface/delete-row.js +233 -81
- package/dist/cjs/interface/duplicate-sheet.d.ts.map +1 -1
- package/dist/cjs/interface/duplicate-sheet.js +4 -9
- package/dist/cjs/interface/insert-column.d.ts.map +1 -1
- package/dist/cjs/interface/insert-column.js +1 -1
- package/dist/cjs/interface/insert-row.d.ts.map +1 -1
- package/dist/cjs/interface/insert-row.js +1 -1
- package/dist/cjs/interface/new-sheet.d.ts.map +1 -1
- package/dist/cjs/interface/new-sheet.js +6 -13
- package/dist/cjs/sheet-cell.d.ts +9 -0
- package/dist/cjs/sheet-cell.d.ts.map +1 -1
- package/dist/cjs/sheet-cell.js +46 -9
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/api/circular-reference.d.ts +31 -0
- package/dist/esm/api/circular-reference.d.ts.map +1 -0
- package/dist/esm/api/circular-reference.js +55 -0
- package/dist/esm/api/copy-paste.d.ts +6 -0
- package/dist/esm/api/copy-paste.d.ts.map +1 -1
- package/dist/esm/api/copy-paste.js +26 -14
- package/dist/esm/api/datatype.d.ts +2 -0
- package/dist/esm/api/datatype.d.ts.map +1 -1
- package/dist/esm/api/datatype.js +61 -35
- package/dist/esm/api/date.d.ts.map +1 -1
- package/dist/esm/api/date.js +23 -14
- package/dist/esm/api/decimals.d.ts +10 -0
- package/dist/esm/api/decimals.d.ts.map +1 -1
- package/dist/esm/api/decimals.js +31 -10
- package/dist/esm/api/dependency.d.ts +19 -1
- package/dist/esm/api/dependency.d.ts.map +1 -1
- package/dist/esm/api/dependency.js +15 -10
- package/dist/esm/api/filter-condition.d.ts +58 -0
- package/dist/esm/api/filter-condition.d.ts.map +1 -0
- package/dist/esm/api/filter-condition.js +146 -0
- package/dist/esm/api/formula.d.ts.map +1 -1
- package/dist/esm/api/formula.js +9 -7
- package/dist/esm/api/image-embed.d.ts +41 -0
- package/dist/esm/api/image-embed.d.ts.map +1 -0
- package/dist/esm/api/image-embed.js +52 -0
- package/dist/esm/api/immer-utils.d.ts.map +1 -1
- package/dist/esm/api/immer-utils.js +43 -14
- package/dist/esm/api/named-range-structural.d.ts +29 -3
- package/dist/esm/api/named-range-structural.d.ts.map +1 -1
- package/dist/esm/api/named-range-structural.js +35 -11
- package/dist/esm/api/parse-html.d.ts.map +1 -1
- package/dist/esm/api/parse-html.js +14 -5
- package/dist/esm/api/structural-formula-update.d.ts +20 -1
- package/dist/esm/api/structural-formula-update.d.ts.map +1 -1
- package/dist/esm/api/structural-formula-update.js +151 -55
- package/dist/esm/api/structural-guards.d.ts +11 -0
- package/dist/esm/api/structural-guards.d.ts.map +1 -1
- package/dist/esm/api/structural-guards.js +31 -0
- package/dist/esm/api/structural-table-refs.d.ts +15 -2
- package/dist/esm/api/structural-table-refs.d.ts.map +1 -1
- package/dist/esm/api/structural-table-refs.js +49 -18
- package/dist/esm/commands.d.ts +17 -3
- package/dist/esm/commands.d.ts.map +1 -1
- package/dist/esm/components/editors/conditional-format-rule-editor.d.ts.map +1 -1
- package/dist/esm/components/editors/conditional-format-rule-editor.js +18 -7
- package/dist/esm/constants.d.ts +4 -1
- package/dist/esm/constants.d.ts.map +1 -1
- package/dist/esm/constants.js +4 -0
- package/dist/esm/helpers/sheet-title.d.ts +2 -1
- package/dist/esm/helpers/sheet-title.d.ts.map +1 -1
- package/dist/esm/helpers/sheet-title.js +3 -1
- package/dist/esm/hooks/use-can-edit-cellrange.d.ts +1 -1
- package/dist/esm/hooks/use-can-edit-cellrange.d.ts.map +1 -1
- package/dist/esm/hooks/use-can-edit-cellrange.js +1 -1
- package/dist/esm/hooks/use-on-calculation-success.d.ts +5 -1
- package/dist/esm/hooks/use-on-calculation-success.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-calculation-success.js +19 -3
- package/dist/esm/hooks/use-on-copy.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-copy.js +17 -17
- package/dist/esm/hooks/use-on-create-sheet.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-create-sheet.js +11 -1
- package/dist/esm/hooks/use-on-delete.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete.js +15 -3
- package/dist/esm/hooks/use-on-drag-n-drop.d.ts +5 -0
- package/dist/esm/hooks/use-on-drag-n-drop.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-drag-n-drop.js +7 -4
- package/dist/esm/hooks/use-on-filter-table.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-filter-table.js +13 -2
- package/dist/esm/hooks/use-on-find-replace.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-find-replace.js +111 -23
- package/dist/esm/hooks/use-on-insert-image.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-insert-image.js +15 -25
- package/dist/esm/hooks/use-on-paste.d.ts +2 -1
- package/dist/esm/hooks/use-on-paste.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-paste.js +46 -15
- package/dist/esm/hooks/use-on-rename-sheet.d.ts +3 -1
- package/dist/esm/hooks/use-on-rename-sheet.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-rename-sheet.js +19 -9
- package/dist/esm/hooks/use-on-sort-column.d.ts +7 -1
- package/dist/esm/hooks/use-on-sort-column.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-sort-column.js +18 -1
- package/dist/esm/hooks/use-on-sort-range.d.ts +16 -2
- package/dist/esm/hooks/use-on-sort-range.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-sort-range.js +30 -3
- package/dist/esm/hooks/use-on-sort-table.d.ts +7 -2
- package/dist/esm/hooks/use-on-sort-table.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-sort-table.js +25 -4
- package/dist/esm/hooks/use-spreadsheet-state.d.ts +5 -3
- package/dist/esm/hooks/use-spreadsheet-state.d.ts.map +1 -1
- package/dist/esm/hooks/use-spreadsheet-state.js +7 -0
- package/dist/esm/hooks/utils/sort-rows.d.ts +15 -0
- package/dist/esm/hooks/utils/sort-rows.d.ts.map +1 -1
- package/dist/esm/hooks/utils/sort-rows.js +15 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -0
- package/dist/esm/interface/delete-column.d.ts.map +1 -1
- package/dist/esm/interface/delete-column.js +111 -80
- package/dist/esm/interface/delete-row.d.ts.map +1 -1
- package/dist/esm/interface/delete-row.js +91 -59
- package/dist/esm/interface/duplicate-sheet.d.ts.map +1 -1
- package/dist/esm/interface/duplicate-sheet.js +4 -9
- package/dist/esm/interface/insert-column.d.ts.map +1 -1
- package/dist/esm/interface/insert-column.js +1 -1
- package/dist/esm/interface/insert-row.d.ts.map +1 -1
- package/dist/esm/interface/insert-row.js +1 -1
- package/dist/esm/interface/new-sheet.d.ts.map +1 -1
- package/dist/esm/interface/new-sheet.js +6 -13
- package/dist/esm/sheet-cell.d.ts +9 -0
- package/dist/esm/sheet-cell.d.ts.map +1 -1
- package/dist/esm/sheet-cell.js +46 -7
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +9 -9
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __assign, __values } from "tslib";
|
|
1
|
+
import { __assign, __read, __spreadArray, __values } from "tslib";
|
|
2
2
|
import { isCellNode } from "@rowsncolumns/dag";
|
|
3
3
|
import { getCellUserEnteredValue, getExtendedValueFormula, } from "@rowsncolumns/utils";
|
|
4
4
|
import { SheetCell } from "../sheet-cell";
|
|
@@ -33,14 +33,105 @@ import { createSheetDraft } from "./immer-utils";
|
|
|
33
33
|
* and 3 don't double-process a cell.
|
|
34
34
|
*/
|
|
35
35
|
export var updateFormulasForStructuralChange = function (params) {
|
|
36
|
-
var e_1, _a, e_2, _b, e_3, _c, e_4, _d;
|
|
37
|
-
var
|
|
38
|
-
var draft = params.draft, axis = params.axis, op = params.op, sheetId = params.sheetId, referenceIndex = params.referenceIndex, count = params.count, rowCount = params.rowCount, columnCount = params.columnCount, getDependents = params.getDependents, getGraphNodes = params.getGraphNodes, getGraphNodesInSheet = params.getGraphNodesInSheet, getSheetName = params.getSheetName, enqueueCalculation = params.enqueueCalculation, enqueueGraphOperation = params.enqueueGraphOperation, recalcCells = params.recalcCells, locale = params.locale, cellXfsRegistry = params.cellXfsRegistry, sharedStringRegistry = params.sharedStringRegistry;
|
|
36
|
+
var e_1, _a, e_2, _b, e_3, _c, e_4, _d, e_5, _e, e_6, _f, e_7, _g, e_8, _h;
|
|
37
|
+
var _j, _k, _l, _m, _o, _p;
|
|
38
|
+
var draft = params.draft, axis = params.axis, op = params.op, sheetId = params.sheetId, referenceIndex = params.referenceIndex, count = params.count, indexes = params.indexes, rowCount = params.rowCount, columnCount = params.columnCount, getDependents = params.getDependents, getGraphNodes = params.getGraphNodes, getGraphNodesInSheet = params.getGraphNodesInSheet, getSheetName = params.getSheetName, enqueueCalculation = params.enqueueCalculation, enqueueGraphOperation = params.enqueueGraphOperation, recalcCells = params.recalcCells, locale = params.locale, cellXfsRegistry = params.cellXfsRegistry, sharedStringRegistry = params.sharedStringRegistry;
|
|
39
39
|
if (count <= 0)
|
|
40
40
|
return;
|
|
41
41
|
var isRow = axis === "row";
|
|
42
42
|
var isInsert = op === "insert";
|
|
43
43
|
var delta = isInsert ? count : -count;
|
|
44
|
+
// The deleted bands, as contiguous runs. A contiguous delete (or an insert)
|
|
45
|
+
// is the single run at `referenceIndex`; a Ctrl-selected delete has one run
|
|
46
|
+
// per island. Rewrites apply the runs from the LAST to the first: a run's
|
|
47
|
+
// references then sit in their original coordinates when its turn comes
|
|
48
|
+
// (only lines beyond it have moved, and they stay beyond it).
|
|
49
|
+
var runs = !isInsert && (indexes === null || indexes === void 0 ? void 0 : indexes.length)
|
|
50
|
+
? contiguousRuns(indexes)
|
|
51
|
+
: [{ start: referenceIndex, count: count }];
|
|
52
|
+
var runsDescending = __spreadArray([], __read(runs), false).sort(function (a, b) { return b.start - a.start; });
|
|
53
|
+
var deletedIndexes = new Set();
|
|
54
|
+
try {
|
|
55
|
+
for (var runs_1 = __values(runs), runs_1_1 = runs_1.next(); !runs_1_1.done; runs_1_1 = runs_1.next()) {
|
|
56
|
+
var run = runs_1_1.value;
|
|
57
|
+
for (var i = 0; i < run.count; i++)
|
|
58
|
+
deletedIndexes.add(run.start + i);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
62
|
+
finally {
|
|
63
|
+
try {
|
|
64
|
+
if (runs_1_1 && !runs_1_1.done && (_a = runs_1.return)) _a.call(runs_1);
|
|
65
|
+
}
|
|
66
|
+
finally { if (e_1) throw e_1.error; }
|
|
67
|
+
}
|
|
68
|
+
var sortedDeleted = __spreadArray([], __read(deletedIndexes), false).sort(function (a, b) { return a - b; });
|
|
69
|
+
/** Where a line at `index` on the edited sheet ends up after the splice. */
|
|
70
|
+
var finalIndex = function (index) {
|
|
71
|
+
var e_9, _a;
|
|
72
|
+
if (isInsert)
|
|
73
|
+
return index >= referenceIndex ? index + count : index;
|
|
74
|
+
var before = 0;
|
|
75
|
+
try {
|
|
76
|
+
for (var sortedDeleted_1 = __values(sortedDeleted), sortedDeleted_1_1 = sortedDeleted_1.next(); !sortedDeleted_1_1.done; sortedDeleted_1_1 = sortedDeleted_1.next()) {
|
|
77
|
+
var deleted = sortedDeleted_1_1.value;
|
|
78
|
+
if (deleted >= index)
|
|
79
|
+
break;
|
|
80
|
+
before++;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (e_9_1) { e_9 = { error: e_9_1 }; }
|
|
84
|
+
finally {
|
|
85
|
+
try {
|
|
86
|
+
if (sortedDeleted_1_1 && !sortedDeleted_1_1.done && (_a = sortedDeleted_1.return)) _a.call(sortedDeleted_1);
|
|
87
|
+
}
|
|
88
|
+
finally { if (e_9) throw e_9.error; }
|
|
89
|
+
}
|
|
90
|
+
return index - before;
|
|
91
|
+
};
|
|
92
|
+
var finalPosition = function (pos) {
|
|
93
|
+
return pos.sheetId !== sheetId
|
|
94
|
+
? pos
|
|
95
|
+
: isRow
|
|
96
|
+
? __assign(__assign({}, pos), { rowIndex: finalIndex(pos.rowIndex) }) : __assign(__assign({}, pos), { columnIndex: finalIndex(pos.columnIndex) });
|
|
97
|
+
};
|
|
98
|
+
var bandRange = function (start, size) {
|
|
99
|
+
return isRow
|
|
100
|
+
? {
|
|
101
|
+
startRowIndex: start,
|
|
102
|
+
endRowIndex: start + size - 1,
|
|
103
|
+
startColumnIndex: 1,
|
|
104
|
+
endColumnIndex: columnCount,
|
|
105
|
+
}
|
|
106
|
+
: {
|
|
107
|
+
startRowIndex: 1,
|
|
108
|
+
endRowIndex: rowCount,
|
|
109
|
+
startColumnIndex: start,
|
|
110
|
+
endColumnIndex: start + size - 1,
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
var tailRange = function (from) {
|
|
114
|
+
return isRow
|
|
115
|
+
? {
|
|
116
|
+
startRowIndex: from,
|
|
117
|
+
endRowIndex: rowCount,
|
|
118
|
+
startColumnIndex: 1,
|
|
119
|
+
endColumnIndex: columnCount,
|
|
120
|
+
}
|
|
121
|
+
: {
|
|
122
|
+
startRowIndex: 1,
|
|
123
|
+
endRowIndex: rowCount,
|
|
124
|
+
startColumnIndex: from,
|
|
125
|
+
endColumnIndex: columnCount,
|
|
126
|
+
};
|
|
127
|
+
};
|
|
128
|
+
// One reference shift per run, last run first (see `runs`).
|
|
129
|
+
var steps = runsDescending.map(function (run) { return ({
|
|
130
|
+
rowDelta: isRow ? (isInsert ? run.count : -run.count) : 0,
|
|
131
|
+
columnDelta: isRow ? 0 : isInsert ? run.count : -run.count,
|
|
132
|
+
sourceRange: tailRange(isInsert ? run.start : run.start + run.count),
|
|
133
|
+
deletedRange: isInsert ? undefined : bandRange(run.start, run.count),
|
|
134
|
+
}); });
|
|
44
135
|
// The set of cells that ARE moving (Pass 3 target region). For both
|
|
45
136
|
// insert and delete, this is everything from the reference index along
|
|
46
137
|
// the affected axis; the splice happens after the formula updates.
|
|
@@ -75,39 +166,56 @@ export var updateFormulasForStructuralChange = function (params) {
|
|
|
75
166
|
};
|
|
76
167
|
// Pass 2's source range — the cells that will move under the splice.
|
|
77
168
|
// For insert this is everything at-or-after the insertion point; for
|
|
78
|
-
// delete this is everything strictly after the deleted
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
endRowIndex: rowCount,
|
|
83
|
-
startColumnIndex: 1,
|
|
84
|
-
endColumnIndex: columnCount,
|
|
85
|
-
}
|
|
86
|
-
: {
|
|
87
|
-
startRowIndex: 1,
|
|
88
|
-
endRowIndex: rowCount,
|
|
89
|
-
startColumnIndex: isInsert ? referenceIndex : referenceIndex + count,
|
|
90
|
-
endColumnIndex: columnCount,
|
|
91
|
-
};
|
|
169
|
+
// delete this is everything strictly after the FIRST deleted band (a line
|
|
170
|
+
// between two bands of a Ctrl-selected delete moves too — by the bands
|
|
171
|
+
// before it — so its dependents must be collected).
|
|
172
|
+
var pass2SourceRange = tailRange(isInsert ? referenceIndex : runs[0].start + runs[0].count);
|
|
92
173
|
// The cells a delete removes: any reference into them (that Pass 1 did not
|
|
93
174
|
// already contract) is broken to `#REF!` instead of sliding onto the cell
|
|
94
175
|
// that moves into its place.
|
|
95
176
|
var deletedRange = isInsert ? undefined : pass1Range;
|
|
96
177
|
var editedSheetName = getSheetName(sheetId);
|
|
97
178
|
// ---- PASS 1 ----
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
179
|
+
// Dependents of every deleted band (the single band for an insert).
|
|
180
|
+
var pass1Formulas = new Map();
|
|
181
|
+
try {
|
|
182
|
+
for (var runs_2 = __values(runs), runs_2_1 = runs_2.next(); !runs_2_1.done; runs_2_1 = runs_2.next()) {
|
|
183
|
+
var run = runs_2_1.value;
|
|
184
|
+
try {
|
|
185
|
+
for (var _q = (e_3 = void 0, __values(collectUniqueDependentsForRange({
|
|
186
|
+
draft: draft,
|
|
187
|
+
sheetId: sheetId,
|
|
188
|
+
sourceRange: isInsert ? pass1Range : bandRange(run.start, run.count),
|
|
189
|
+
getDependents: getDependents,
|
|
190
|
+
}))), _r = _q.next(); !_r.done; _r = _q.next()) {
|
|
191
|
+
var _s = __read(_r.value, 2), key = _s[0], pos = _s[1];
|
|
192
|
+
if (!pass1Formulas.has(key))
|
|
193
|
+
pass1Formulas.set(key, pos);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
197
|
+
finally {
|
|
198
|
+
try {
|
|
199
|
+
if (_r && !_r.done && (_c = _q.return)) _c.call(_q);
|
|
200
|
+
}
|
|
201
|
+
finally { if (e_3) throw e_3.error; }
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
206
|
+
finally {
|
|
207
|
+
try {
|
|
208
|
+
if (runs_2_1 && !runs_2_1.done && (_b = runs_2.return)) _b.call(runs_2);
|
|
209
|
+
}
|
|
210
|
+
finally { if (e_2) throw e_2.error; }
|
|
211
|
+
}
|
|
104
212
|
if (pass1Formulas.size > 0) {
|
|
105
213
|
var sheetCell = new SheetCell();
|
|
106
214
|
try {
|
|
107
|
-
for (var
|
|
108
|
-
var pos =
|
|
215
|
+
for (var _t = __values(pass1Formulas.values()), _u = _t.next(); !_u.done; _u = _t.next()) {
|
|
216
|
+
var pos = _u.value;
|
|
109
217
|
var currentSheet = createSheetDraft(draft, pos.sheetId, pos.rowIndex);
|
|
110
|
-
var cellData = (
|
|
218
|
+
var cellData = (_k = (_j = currentSheet[pos.rowIndex]) === null || _j === void 0 ? void 0 : _j.values) === null || _k === void 0 ? void 0 : _k[pos.columnIndex];
|
|
111
219
|
if (!cellData)
|
|
112
220
|
continue;
|
|
113
221
|
sheetCell.assign(pos.sheetId, { rowIndex: pos.rowIndex, columnIndex: pos.columnIndex }, cellData, { locale: locale, cellXfsRegistry: cellXfsRegistry, sharedStringRegistry: sharedStringRegistry });
|
|
@@ -120,34 +228,38 @@ export var updateFormulasForStructuralChange = function (params) {
|
|
|
120
228
|
var rangeOptions = {
|
|
121
229
|
includeUnqualifiedReferences: pos.sheetId === sheetId,
|
|
122
230
|
};
|
|
123
|
-
var updatedFormula =
|
|
124
|
-
|
|
125
|
-
|
|
231
|
+
var updatedFormula = formulaValue;
|
|
232
|
+
if (isInsert) {
|
|
233
|
+
updatedFormula = expandRangesInFormula(formulaValue, referenceIndex, count, axis, editedSheetName, rangeOptions);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
try {
|
|
237
|
+
// Contract for each deleted band, last band first: a range spanning
|
|
238
|
+
// rows 2 and 4 loses row 4 (`A1:A5` → `A1:A4`), then row 2 (→ `A1:A3`).
|
|
239
|
+
for (var runsDescending_1 = (e_5 = void 0, __values(runsDescending)), runsDescending_1_1 = runsDescending_1.next(); !runsDescending_1_1.done; runsDescending_1_1 = runsDescending_1.next()) {
|
|
240
|
+
var run = runsDescending_1_1.value;
|
|
241
|
+
if (!updatedFormula)
|
|
242
|
+
break;
|
|
243
|
+
updatedFormula = contractRangesInFormula(updatedFormula, run.start, run.count, axis, editedSheetName, rangeOptions);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
247
|
+
finally {
|
|
248
|
+
try {
|
|
249
|
+
if (runsDescending_1_1 && !runsDescending_1_1.done && (_e = runsDescending_1.return)) _e.call(runsDescending_1);
|
|
250
|
+
}
|
|
251
|
+
finally { if (e_5) throw e_5.error; }
|
|
252
|
+
}
|
|
253
|
+
}
|
|
126
254
|
if (!updatedFormula || updatedFormula === formulaValue)
|
|
127
255
|
continue;
|
|
128
256
|
sheetCell.setFormulaValue(updatedFormula, false);
|
|
129
257
|
currentSheet[pos.rowIndex].values[pos.columnIndex] =
|
|
130
258
|
sheetCell.getCellData();
|
|
131
259
|
// Adjust the recalc position for cells that themselves shift in
|
|
132
|
-
// the splice that follows
|
|
133
|
-
//
|
|
134
|
-
|
|
135
|
-
var adjustedRowIndex = isRow
|
|
136
|
-
? pos.sheetId === sheetId &&
|
|
137
|
-
(isInsert
|
|
138
|
-
? pos.rowIndex >= referenceIndex
|
|
139
|
-
: pos.rowIndex >= referenceIndex + count)
|
|
140
|
-
? pos.rowIndex + delta
|
|
141
|
-
: pos.rowIndex
|
|
142
|
-
: pos.rowIndex;
|
|
143
|
-
var adjustedColumnIndex = !isRow
|
|
144
|
-
? pos.sheetId === sheetId &&
|
|
145
|
-
(isInsert
|
|
146
|
-
? pos.columnIndex >= referenceIndex
|
|
147
|
-
: pos.columnIndex >= referenceIndex + count)
|
|
148
|
-
? pos.columnIndex + delta
|
|
149
|
-
: pos.columnIndex
|
|
150
|
-
: pos.columnIndex;
|
|
260
|
+
// the splice that follows: a cell on the edited sheet loses the deleted
|
|
261
|
+
// lines before it (or gains the inserted ones at or before it).
|
|
262
|
+
var _v = finalPosition(pos), adjustedRowIndex = _v.rowIndex, adjustedColumnIndex = _v.columnIndex;
|
|
151
263
|
enqueueCalculation === null || enqueueCalculation === void 0 ? void 0 : enqueueCalculation({
|
|
152
264
|
type: "add",
|
|
153
265
|
position: {
|
|
@@ -165,12 +277,12 @@ export var updateFormulasForStructuralChange = function (params) {
|
|
|
165
277
|
});
|
|
166
278
|
}
|
|
167
279
|
}
|
|
168
|
-
catch (
|
|
280
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
169
281
|
finally {
|
|
170
282
|
try {
|
|
171
|
-
if (
|
|
283
|
+
if (_u && !_u.done && (_d = _t.return)) _d.call(_t);
|
|
172
284
|
}
|
|
173
|
-
finally { if (
|
|
285
|
+
finally { if (e_4) throw e_4.error; }
|
|
174
286
|
}
|
|
175
287
|
}
|
|
176
288
|
// ---- PASS 2 ----
|
|
@@ -184,8 +296,8 @@ export var updateFormulasForStructuralChange = function (params) {
|
|
|
184
296
|
getDependents: getDependents,
|
|
185
297
|
});
|
|
186
298
|
try {
|
|
187
|
-
for (var
|
|
188
|
-
var pos =
|
|
299
|
+
for (var _w = __values(pass2Dependents.values()), _x = _w.next(); !_x.done; _x = _w.next()) {
|
|
300
|
+
var pos = _x.value;
|
|
189
301
|
if (pos.sheetId !== sheetId) {
|
|
190
302
|
shiftExternalDependentFormulaReferences({
|
|
191
303
|
draft: draft,
|
|
@@ -199,6 +311,7 @@ export var updateFormulasForStructuralChange = function (params) {
|
|
|
199
311
|
columnDelta: columnDelta,
|
|
200
312
|
sourceRange: pass2SourceRange,
|
|
201
313
|
deletedRange: deletedRange,
|
|
314
|
+
steps: steps,
|
|
202
315
|
locale: locale,
|
|
203
316
|
rowCount: rowCount,
|
|
204
317
|
columnCount: columnCount,
|
|
@@ -219,6 +332,8 @@ export var updateFormulasForStructuralChange = function (params) {
|
|
|
219
332
|
columnDelta: columnDelta,
|
|
220
333
|
sourceRange: pass2SourceRange,
|
|
221
334
|
deletedRange: deletedRange,
|
|
335
|
+
steps: steps,
|
|
336
|
+
destinationPosition: finalPosition(pos),
|
|
222
337
|
locale: locale,
|
|
223
338
|
rowCount: rowCount,
|
|
224
339
|
columnCount: columnCount,
|
|
@@ -227,19 +342,19 @@ export var updateFormulasForStructuralChange = function (params) {
|
|
|
227
342
|
});
|
|
228
343
|
}
|
|
229
344
|
}
|
|
230
|
-
catch (
|
|
345
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
231
346
|
finally {
|
|
232
347
|
try {
|
|
233
|
-
if (
|
|
348
|
+
if (_x && !_x.done && (_f = _w.return)) _f.call(_w);
|
|
234
349
|
}
|
|
235
|
-
finally { if (
|
|
350
|
+
finally { if (e_6) throw e_6.error; }
|
|
236
351
|
}
|
|
237
352
|
try {
|
|
238
353
|
// Some graph adapters do not return every direct cross-sheet formula from
|
|
239
354
|
// getDependents during a structural edit. Sweep the formula-node map as a
|
|
240
355
|
// fallback; movedKeys keeps dependents already handled above O(1) no-ops.
|
|
241
|
-
for (var
|
|
242
|
-
var position =
|
|
356
|
+
for (var _y = __values(collectExternalFormulaPositions(getGraphNodes, sheetId)), _z = _y.next(); !_z.done; _z = _y.next()) {
|
|
357
|
+
var position = _z.value;
|
|
243
358
|
shiftExternalDependentFormulaReferences({
|
|
244
359
|
draft: draft,
|
|
245
360
|
position: position,
|
|
@@ -252,6 +367,7 @@ export var updateFormulasForStructuralChange = function (params) {
|
|
|
252
367
|
columnDelta: columnDelta,
|
|
253
368
|
sourceRange: pass2SourceRange,
|
|
254
369
|
deletedRange: deletedRange,
|
|
370
|
+
steps: steps,
|
|
255
371
|
locale: locale,
|
|
256
372
|
rowCount: rowCount,
|
|
257
373
|
columnCount: columnCount,
|
|
@@ -260,12 +376,12 @@ export var updateFormulasForStructuralChange = function (params) {
|
|
|
260
376
|
});
|
|
261
377
|
}
|
|
262
378
|
}
|
|
263
|
-
catch (
|
|
379
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
264
380
|
finally {
|
|
265
381
|
try {
|
|
266
|
-
if (
|
|
382
|
+
if (_z && !_z.done && (_g = _y.return)) _g.call(_y);
|
|
267
383
|
}
|
|
268
|
-
finally { if (
|
|
384
|
+
finally { if (e_7) throw e_7.error; }
|
|
269
385
|
}
|
|
270
386
|
// ---- PASS 3 ----
|
|
271
387
|
// Fast path: ask the calculator's dependency graph for the formula cells
|
|
@@ -285,7 +401,7 @@ export var updateFormulasForStructuralChange = function (params) {
|
|
|
285
401
|
if (movedKeys.has(SheetCell.generateCellKey(sheetId, pos.rowIndex, pos.columnIndex))) {
|
|
286
402
|
continue;
|
|
287
403
|
}
|
|
288
|
-
var rowValues = (
|
|
404
|
+
var rowValues = (_m = (_l = draft[sheetId]) === null || _l === void 0 ? void 0 : _l[pos.rowIndex]) === null || _m === void 0 ? void 0 : _m.values;
|
|
289
405
|
var cellData = rowValues === null || rowValues === void 0 ? void 0 : rowValues[pos.columnIndex];
|
|
290
406
|
var hasFormula = !!getExtendedValueFormula(getCellUserEnteredValue(cellData));
|
|
291
407
|
if (!hasFormula)
|
|
@@ -306,6 +422,12 @@ export var updateFormulasForStructuralChange = function (params) {
|
|
|
306
422
|
columnDelta: columnDelta,
|
|
307
423
|
sourceRange: pass2SourceRange,
|
|
308
424
|
deletedRange: deletedRange,
|
|
425
|
+
steps: steps,
|
|
426
|
+
destinationPosition: finalPosition({
|
|
427
|
+
sheetId: sheetId,
|
|
428
|
+
rowIndex: pos.rowIndex,
|
|
429
|
+
columnIndex: pos.columnIndex,
|
|
430
|
+
}),
|
|
309
431
|
locale: locale,
|
|
310
432
|
rowCount: rowCount,
|
|
311
433
|
columnCount: columnCount,
|
|
@@ -314,12 +436,12 @@ export var updateFormulasForStructuralChange = function (params) {
|
|
|
314
436
|
});
|
|
315
437
|
}
|
|
316
438
|
}
|
|
317
|
-
catch (
|
|
439
|
+
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
318
440
|
finally {
|
|
319
441
|
try {
|
|
320
|
-
if (graphFormulaPositions_1_1 && !graphFormulaPositions_1_1.done && (
|
|
442
|
+
if (graphFormulaPositions_1_1 && !graphFormulaPositions_1_1.done && (_h = graphFormulaPositions_1.return)) _h.call(graphFormulaPositions_1);
|
|
321
443
|
}
|
|
322
|
-
finally { if (
|
|
444
|
+
finally { if (e_8) throw e_8.error; }
|
|
323
445
|
}
|
|
324
446
|
}
|
|
325
447
|
else {
|
|
@@ -329,8 +451,8 @@ export var updateFormulasForStructuralChange = function (params) {
|
|
|
329
451
|
var startRow = movedRegion.startRowIndex;
|
|
330
452
|
var endRow = Math.min(movedRegion.endRowIndex, sheetRows.length - 1);
|
|
331
453
|
for (var rowIndex = startRow; rowIndex <= endRow; rowIndex++) {
|
|
332
|
-
var rowValues = (
|
|
333
|
-
var dataColumnCount = (
|
|
454
|
+
var rowValues = (_o = sheetRows[rowIndex]) === null || _o === void 0 ? void 0 : _o.values;
|
|
455
|
+
var dataColumnCount = (_p = rowValues === null || rowValues === void 0 ? void 0 : rowValues.length) !== null && _p !== void 0 ? _p : 0;
|
|
334
456
|
if (!dataColumnCount)
|
|
335
457
|
continue;
|
|
336
458
|
var startCol = Math.min(Math.max(movedRegion.startColumnIndex, 1), dataColumnCount);
|
|
@@ -352,6 +474,8 @@ export var updateFormulasForStructuralChange = function (params) {
|
|
|
352
474
|
columnDelta: columnDelta,
|
|
353
475
|
sourceRange: pass2SourceRange,
|
|
354
476
|
deletedRange: deletedRange,
|
|
477
|
+
steps: steps,
|
|
478
|
+
destinationPosition: finalPosition({ sheetId: sheetId, rowIndex: rowIndex, columnIndex: columnIndex }),
|
|
355
479
|
locale: locale,
|
|
356
480
|
rowCount: rowCount,
|
|
357
481
|
columnCount: columnCount,
|
|
@@ -362,29 +486,79 @@ export var updateFormulasForStructuralChange = function (params) {
|
|
|
362
486
|
}
|
|
363
487
|
}
|
|
364
488
|
};
|
|
489
|
+
/**
|
|
490
|
+
* The maximal contiguous runs of `indexes` (any order, duplicates ignored),
|
|
491
|
+
* ascending — the bands of a Ctrl-selected delete (rows 2 and 4 → two runs).
|
|
492
|
+
* Shared by `deleteRow` / `deleteColumn`, which apply every band-shaped update
|
|
493
|
+
* once per run.
|
|
494
|
+
*/
|
|
495
|
+
export var contiguousRuns = function (indexes) {
|
|
496
|
+
var e_10, _a;
|
|
497
|
+
var sorted = __spreadArray([], __read(new Set(indexes)), false).sort(function (a, b) { return a - b; });
|
|
498
|
+
var runs = [];
|
|
499
|
+
try {
|
|
500
|
+
for (var sorted_1 = __values(sorted), sorted_1_1 = sorted_1.next(); !sorted_1_1.done; sorted_1_1 = sorted_1.next()) {
|
|
501
|
+
var index = sorted_1_1.value;
|
|
502
|
+
var last = runs[runs.length - 1];
|
|
503
|
+
if (last && last.start + last.count === index) {
|
|
504
|
+
last.count++;
|
|
505
|
+
}
|
|
506
|
+
else {
|
|
507
|
+
runs.push({ start: index, count: 1 });
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
catch (e_10_1) { e_10 = { error: e_10_1 }; }
|
|
512
|
+
finally {
|
|
513
|
+
try {
|
|
514
|
+
if (sorted_1_1 && !sorted_1_1.done && (_a = sorted_1.return)) _a.call(sorted_1);
|
|
515
|
+
}
|
|
516
|
+
finally { if (e_10) throw e_10.error; }
|
|
517
|
+
}
|
|
518
|
+
return runs;
|
|
519
|
+
};
|
|
365
520
|
var shiftExternalDependentFormulaReferences = function (_a) {
|
|
366
|
-
var
|
|
367
|
-
var
|
|
521
|
+
var e_11, _b;
|
|
522
|
+
var _c, _d;
|
|
523
|
+
var draft = _a.draft, position = _a.position, editedSheetName = _a.editedSheetName, enqueueCalculation = _a.enqueueCalculation, enqueueGraphOperation = _a.enqueueGraphOperation, recalcCells = _a.recalcCells, movedKeys = _a.movedKeys, rowDelta = _a.rowDelta, columnDelta = _a.columnDelta, sourceRange = _a.sourceRange, deletedRange = _a.deletedRange, steps = _a.steps, locale = _a.locale, rowCount = _a.rowCount, columnCount = _a.columnCount, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry;
|
|
368
524
|
var sheetCell = new SheetCell();
|
|
369
525
|
var currentSheet = createSheetDraft(draft, position.sheetId, position.rowIndex);
|
|
370
|
-
var cellData = (
|
|
526
|
+
var cellData = (_d = (_c = currentSheet[position.rowIndex]) === null || _c === void 0 ? void 0 : _c.values) === null || _d === void 0 ? void 0 : _d[position.columnIndex];
|
|
371
527
|
sheetCell.assign(position.sheetId, { rowIndex: position.rowIndex, columnIndex: position.columnIndex }, cellData, { locale: locale, cellXfsRegistry: cellXfsRegistry, sharedStringRegistry: sharedStringRegistry });
|
|
372
528
|
if (movedKeys.has(sheetCell.key) || !sheetCell.isFormula()) {
|
|
373
529
|
return;
|
|
374
530
|
}
|
|
375
531
|
movedKeys.add(sheetCell.key);
|
|
376
532
|
var previousFormula = sheetCell.formula;
|
|
377
|
-
var
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
533
|
+
var moves = steps !== null && steps !== void 0 ? steps : [
|
|
534
|
+
{ rowDelta: rowDelta, columnDelta: columnDelta, sourceRange: sourceRange, deletedRange: deletedRange },
|
|
535
|
+
];
|
|
536
|
+
var updatedFormula = previousFormula;
|
|
537
|
+
try {
|
|
538
|
+
for (var moves_1 = __values(moves), moves_1_1 = moves_1.next(); !moves_1_1.done; moves_1_1 = moves_1.next()) {
|
|
539
|
+
var move = moves_1_1.value;
|
|
540
|
+
if (!updatedFormula)
|
|
541
|
+
break;
|
|
542
|
+
updatedFormula = formulaToRelativeReference(updatedFormula, { rowIndex: position.rowIndex, columnIndex: position.columnIndex }, {
|
|
543
|
+
rowIndex: position.rowIndex + move.rowDelta,
|
|
544
|
+
columnIndex: position.columnIndex + move.columnDelta,
|
|
545
|
+
}, editedSheetName, {
|
|
546
|
+
exclusionRange: move.sourceRange,
|
|
547
|
+
deletedRange: move.deletedRange,
|
|
548
|
+
rowCount: rowCount,
|
|
549
|
+
columnCount: columnCount,
|
|
550
|
+
referenceSheetName: editedSheetName,
|
|
551
|
+
includeUnqualifiedReferences: false,
|
|
552
|
+
});
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
catch (e_11_1) { e_11 = { error: e_11_1 }; }
|
|
556
|
+
finally {
|
|
557
|
+
try {
|
|
558
|
+
if (moves_1_1 && !moves_1_1.done && (_b = moves_1.return)) _b.call(moves_1);
|
|
559
|
+
}
|
|
560
|
+
finally { if (e_11) throw e_11.error; }
|
|
561
|
+
}
|
|
388
562
|
if (!updatedFormula || updatedFormula === previousFormula) {
|
|
389
563
|
return;
|
|
390
564
|
}
|
|
@@ -399,7 +573,7 @@ var shiftExternalDependentFormulaReferences = function (_a) {
|
|
|
399
573
|
recalcCells.set(createSheetCellIdentifier(position.sheetId, position.rowIndex, position.columnIndex), __assign(__assign({}, position), { force: true }));
|
|
400
574
|
};
|
|
401
575
|
var collectExternalFormulaPositions = function (getGraphNodes, editedSheetId) {
|
|
402
|
-
var
|
|
576
|
+
var e_12, _a;
|
|
403
577
|
if (!getGraphNodes)
|
|
404
578
|
return [];
|
|
405
579
|
var graphNodes;
|
|
@@ -421,12 +595,12 @@ var collectExternalFormulaPositions = function (getGraphNodes, editedSheetId) {
|
|
|
421
595
|
positions.push(node.position);
|
|
422
596
|
}
|
|
423
597
|
}
|
|
424
|
-
catch (
|
|
598
|
+
catch (e_12_1) { e_12 = { error: e_12_1 }; }
|
|
425
599
|
finally {
|
|
426
600
|
try {
|
|
427
601
|
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
428
602
|
}
|
|
429
|
-
finally { if (
|
|
603
|
+
finally { if (e_12) throw e_12.error; }
|
|
430
604
|
}
|
|
431
605
|
return positions;
|
|
432
606
|
};
|
|
@@ -440,7 +614,7 @@ var collectExternalFormulaPositions = function (getGraphNodes, editedSheetId) {
|
|
|
440
614
|
* workbook-wide map only when the per-sheet API isn't available.
|
|
441
615
|
*/
|
|
442
616
|
var collectGraphFormulaPositions = function (getGraphNodesInSheet, getGraphNodes, sheetId, movedRegion) {
|
|
443
|
-
var
|
|
617
|
+
var e_13, _a, e_14, _b;
|
|
444
618
|
// Fast path: per-sheet bucket.
|
|
445
619
|
if (getGraphNodesInSheet) {
|
|
446
620
|
var sheetBucket = void 0;
|
|
@@ -471,12 +645,12 @@ var collectGraphFormulaPositions = function (getGraphNodesInSheet, getGraphNodes
|
|
|
471
645
|
});
|
|
472
646
|
}
|
|
473
647
|
}
|
|
474
|
-
catch (
|
|
648
|
+
catch (e_13_1) { e_13 = { error: e_13_1 }; }
|
|
475
649
|
finally {
|
|
476
650
|
try {
|
|
477
651
|
if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
|
|
478
652
|
}
|
|
479
|
-
finally { if (
|
|
653
|
+
finally { if (e_13) throw e_13.error; }
|
|
480
654
|
}
|
|
481
655
|
return positions_1;
|
|
482
656
|
}
|
|
@@ -515,12 +689,12 @@ var collectGraphFormulaPositions = function (getGraphNodesInSheet, getGraphNodes
|
|
|
515
689
|
positions.push({ rowIndex: pos.rowIndex, columnIndex: pos.columnIndex });
|
|
516
690
|
}
|
|
517
691
|
}
|
|
518
|
-
catch (
|
|
692
|
+
catch (e_14_1) { e_14 = { error: e_14_1 }; }
|
|
519
693
|
finally {
|
|
520
694
|
try {
|
|
521
695
|
if (_h && !_h.done && (_b = _g.return)) _b.call(_g);
|
|
522
696
|
}
|
|
523
|
-
finally { if (
|
|
697
|
+
finally { if (e_14) throw e_14.error; }
|
|
524
698
|
}
|
|
525
699
|
return sawSheetNode ? positions : null;
|
|
526
700
|
};
|
|
@@ -132,4 +132,15 @@ export declare const getInsertLinesRefusal: <T extends CellData>({ axis, referen
|
|
|
132
132
|
rows: SheetData<T>[number] | undefined;
|
|
133
133
|
limit: number | undefined;
|
|
134
134
|
}) => StructuralRefusal | undefined;
|
|
135
|
+
/**
|
|
136
|
+
* Excel's sort rule for merged cells: a sort may only reorder rows whose merge layout is identical —
|
|
137
|
+
* every merge touching the sorted range must lie wholly inside it, span a single row, and every row of
|
|
138
|
+
* the range must carry the same column spans. Otherwise the anchor values would move with their rows
|
|
139
|
+
* while the merge outlines stayed behind (stale merge geometry), so the sort is refused with Excel's
|
|
140
|
+
* "To do this, all the merged cells need to be the same size." Merges outside the range are untouched.
|
|
141
|
+
*/
|
|
142
|
+
export declare const getSortMergeRefusal: ({ range, merges, }: {
|
|
143
|
+
range: GridRange;
|
|
144
|
+
merges: readonly GridRange[] | null | undefined;
|
|
145
|
+
}) => StructuralRefusal | undefined;
|
|
135
146
|
//# sourceMappingURL=structural-guards.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structural-guards.d.ts","sourceRoot":"","sources":["../../../api/structural-guards.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"structural-guards.d.ts","sourceRoot":"","sources":["../../../api/structural-guards.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __assign, __read } from "tslib";
|
|
1
|
+
import { __assign, __read, __values } from "tslib";
|
|
2
2
|
import { selectionFromActiveCell } from "@rowsncolumns/utils";
|
|
3
3
|
import { structuralRefusal, } from "../constants";
|
|
4
4
|
/** The selection a cell shift operates on — the LAST selection, or the active cell as a 1×1. The
|
|
@@ -292,3 +292,47 @@ export var getInsertLinesRefusal = function (_a) {
|
|
|
292
292
|
? structuralRefusal("off-sheet-push")
|
|
293
293
|
: undefined;
|
|
294
294
|
};
|
|
295
|
+
/**
|
|
296
|
+
* Excel's sort rule for merged cells: a sort may only reorder rows whose merge layout is identical —
|
|
297
|
+
* every merge touching the sorted range must lie wholly inside it, span a single row, and every row of
|
|
298
|
+
* the range must carry the same column spans. Otherwise the anchor values would move with their rows
|
|
299
|
+
* while the merge outlines stayed behind (stale merge geometry), so the sort is refused with Excel's
|
|
300
|
+
* "To do this, all the merged cells need to be the same size." Merges outside the range are untouched.
|
|
301
|
+
*/
|
|
302
|
+
export var getSortMergeRefusal = function (_a) {
|
|
303
|
+
var e_1, _b;
|
|
304
|
+
var _c;
|
|
305
|
+
var range = _a.range, merges = _a.merges;
|
|
306
|
+
if (!(merges === null || merges === void 0 ? void 0 : merges.length))
|
|
307
|
+
return undefined;
|
|
308
|
+
var touching = merges.filter(function (merge) { return rangesIntersect(merge, range); });
|
|
309
|
+
if (!touching.length)
|
|
310
|
+
return undefined;
|
|
311
|
+
var spansByRow = new Map();
|
|
312
|
+
try {
|
|
313
|
+
for (var touching_1 = __values(touching), touching_1_1 = touching_1.next(); !touching_1_1.done; touching_1_1 = touching_1.next()) {
|
|
314
|
+
var merge = touching_1_1.value;
|
|
315
|
+
if (!rangeContains(range, merge) ||
|
|
316
|
+
merge.startRowIndex !== merge.endRowIndex) {
|
|
317
|
+
return structuralRefusal("sort-merged-cells");
|
|
318
|
+
}
|
|
319
|
+
var spans = (_c = spansByRow.get(merge.startRowIndex)) !== null && _c !== void 0 ? _c : [];
|
|
320
|
+
spans.push("".concat(merge.startColumnIndex, ":").concat(merge.endColumnIndex));
|
|
321
|
+
spansByRow.set(merge.startRowIndex, spans);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
325
|
+
finally {
|
|
326
|
+
try {
|
|
327
|
+
if (touching_1_1 && !touching_1_1.done && (_b = touching_1.return)) _b.call(touching_1);
|
|
328
|
+
}
|
|
329
|
+
finally { if (e_1) throw e_1.error; }
|
|
330
|
+
}
|
|
331
|
+
var layoutOf = function (rowIndex) { var _a; return ((_a = spansByRow.get(rowIndex)) !== null && _a !== void 0 ? _a : []).slice().sort().join(","); };
|
|
332
|
+
var first = layoutOf(range.startRowIndex);
|
|
333
|
+
for (var r = range.startRowIndex + 1; r <= range.endRowIndex; r++) {
|
|
334
|
+
if (layoutOf(r) !== first)
|
|
335
|
+
return structuralRefusal("sort-merged-cells");
|
|
336
|
+
}
|
|
337
|
+
return undefined;
|
|
338
|
+
};
|