@rowsncolumns/spreadsheet-state 28.0.67 → 28.0.68

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.
Files changed (33) hide show
  1. package/dist/cjs/helpers/sheet-title.d.ts +3 -0
  2. package/dist/cjs/helpers/sheet-title.d.ts.map +1 -1
  3. package/dist/cjs/helpers/sheet-title.js +10 -1
  4. package/dist/cjs/hooks/use-on-rename-sheet.js +2 -2
  5. package/dist/cjs/interface/delete-column.d.ts.map +1 -1
  6. package/dist/cjs/interface/delete-column.js +62 -60
  7. package/dist/cjs/interface/delete-table-column.d.ts.map +1 -1
  8. package/dist/cjs/interface/delete-table-column.js +4 -3
  9. package/dist/cjs/interface/delete-table-row.d.ts.map +1 -1
  10. package/dist/cjs/interface/delete-table-row.js +19 -8
  11. package/dist/cjs/interface/insert-column.d.ts.map +1 -1
  12. package/dist/cjs/interface/insert-column.js +5 -4
  13. package/dist/cjs/interface/insert-table-row.d.ts.map +1 -1
  14. package/dist/cjs/interface/insert-table-row.js +19 -9
  15. package/dist/cjs/interface/update-sheet.d.ts.map +1 -1
  16. package/dist/cjs/interface/update-sheet.js +4 -1
  17. package/dist/esm/helpers/sheet-title.d.ts +3 -0
  18. package/dist/esm/helpers/sheet-title.d.ts.map +1 -1
  19. package/dist/esm/helpers/sheet-title.js +9 -0
  20. package/dist/esm/hooks/use-on-rename-sheet.js +2 -2
  21. package/dist/esm/interface/delete-column.d.ts.map +1 -1
  22. package/dist/esm/interface/delete-column.js +30 -18
  23. package/dist/esm/interface/delete-table-column.d.ts.map +1 -1
  24. package/dist/esm/interface/delete-table-column.js +4 -2
  25. package/dist/esm/interface/delete-table-row.d.ts.map +1 -1
  26. package/dist/esm/interface/delete-table-row.js +17 -8
  27. package/dist/esm/interface/insert-column.d.ts.map +1 -1
  28. package/dist/esm/interface/insert-column.js +5 -3
  29. package/dist/esm/interface/insert-table-row.d.ts.map +1 -1
  30. package/dist/esm/interface/insert-table-row.js +17 -9
  31. package/dist/esm/interface/update-sheet.d.ts.map +1 -1
  32. package/dist/esm/interface/update-sheet.js +4 -1
  33. package/package.json +22 -22
@@ -1,5 +1,8 @@
1
1
  import type { Sheet } from "@rowsncolumns/spreadsheet";
2
2
  export declare const MAX_SHEET_TITLE_LENGTH = 32;
3
3
  export declare const truncateSheetTitle: (title: string) => string;
4
+ /** Worksheet names cannot be empty or whitespace-only. */
5
+ export declare const isValidSheetTitle: (title: string) => boolean;
6
+ /** Truncates a valid title; drops an invalid (blank) one so the rest of the spec still applies. */
4
7
  export declare const sanitizeSheetSpecTitle: <S extends Sheet>(sheetSpec: Partial<S>) => Partial<S>;
5
8
  //# sourceMappingURL=sheet-title.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sheet-title.d.ts","sourceRoot":"","sources":["../../../helpers/sheet-title.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEvD,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,KAAG,MAElD,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,CAAC,SAAS,KAAK,EACpD,WAAW,OAAO,CAAC,CAAC,CAAC,KACpB,OAAO,CAAC,CAAC,CASX,CAAC"}
1
+ {"version":3,"file":"sheet-title.d.ts","sourceRoot":"","sources":["../../../helpers/sheet-title.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEvD,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,KAAG,MAElD,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,iBAAiB,GAAI,OAAO,MAAM,KAAG,OAEjD,CAAC;AAEF,mGAAmG;AACnG,eAAO,MAAM,sBAAsB,GAAI,CAAC,SAAS,KAAK,EACpD,WAAW,OAAO,CAAC,CAAC,CAAC,KACpB,OAAO,CAAC,CAAC,CAcX,CAAC"}
@@ -1,11 +1,20 @@
1
- import { __assign } from "tslib";
1
+ import { __assign, __rest } from "tslib";
2
2
  export var MAX_SHEET_TITLE_LENGTH = 32;
3
3
  export var truncateSheetTitle = function (title) {
4
4
  return title.slice(0, MAX_SHEET_TITLE_LENGTH);
5
5
  };
6
+ /** Worksheet names cannot be empty or whitespace-only. */
7
+ export var isValidSheetTitle = function (title) {
8
+ return title.trim().length > 0;
9
+ };
10
+ /** Truncates a valid title; drops an invalid (blank) one so the rest of the spec still applies. */
6
11
  export var sanitizeSheetSpecTitle = function (sheetSpec) {
7
12
  if (typeof sheetSpec.title !== "string") {
8
13
  return sheetSpec;
9
14
  }
15
+ if (!isValidSheetTitle(sheetSpec.title)) {
16
+ var _title = sheetSpec.title, rest = __rest(sheetSpec, ["title"]);
17
+ return rest;
18
+ }
10
19
  return __assign(__assign({}, sheetSpec), { title: truncateSheetTitle(sheetSpec.title) });
11
20
  };
@@ -2,7 +2,7 @@ import { __assign, __read } from "tslib";
2
2
  import { produceWithPatches } from "immer";
3
3
  import { useCallback } from "react";
4
4
  import { updateFormulaSheetReferences } from "../api/rename-sheet";
5
- import { truncateSheetTitle } from "../helpers/sheet-title";
5
+ import { isValidSheetTitle, truncateSheetTitle } from "../helpers/sheet-title";
6
6
  import { useCanEditSheet, useCanEditWorkbook } from "./use-can-edit-cellrange";
7
7
  export var useOnRenameSheet = function (_a) {
8
8
  var locale = _a.locale, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeActiveCell = _a.onChangeActiveCell, getActiveCell = _a.getActiveCell, getGraphNodes = _a.getGraphNodes, getPrecedents = _a.getPrecedents, createHistory = _a.createHistory, onCommand = _a.onCommand;
@@ -10,7 +10,7 @@ export var useOnRenameSheet = function (_a) {
10
10
  var canEditWorkbook = useCanEditWorkbook();
11
11
  return useCallback(function (sheetId, name, oldName) {
12
12
  // Worksheet names cannot be empty or whitespace-only
13
- if (name.trim().length === 0) {
13
+ if (!isValidSheetTitle(name)) {
14
14
  console.debug("Sheet name cannot be empty.");
15
15
  return;
16
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"delete-column.d.ts","sourceRoot":"","sources":["../../../interface/delete-column.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AASjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAG5E,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,qbAyB/D,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,MACrB,SAAS,MAAM,EAAE,eAAe,MAAM,EAAE,SA8TjD,CAAC"}
1
+ {"version":3,"file":"delete-column.d.ts","sourceRoot":"","sources":["../../../interface/delete-column.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AASjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAG5E,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,qbAyB/D,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,MACrB,SAAS,MAAM,EAAE,eAAe,MAAM,EAAE,SAuUjD,CAAC"}
@@ -59,65 +59,67 @@ export var deleteColumn = function (_a) {
59
59
  // and table-column splice for partially-overlapped tables.
60
60
  onChangeTables === null || onChangeTables === void 0 ? void 0 : onChangeTables(function (prevTables) {
61
61
  var _a = __read(produceWithPatches(prevTables, function (draft) {
62
- var e_1, _a, e_2, _b, e_3, _c;
63
- var _d;
64
- try {
65
- for (var draft_1 = __values(draft), draft_1_1 = draft_1.next(); !draft_1_1.done; draft_1_1 = draft_1.next()) {
66
- var table = draft_1_1.value;
67
- if (table.sheetId !== sheetId)
68
- continue;
69
- if (minColumnIndex < table.range.startColumnIndex) {
70
- moveFilterView(table, count, Direction.Left);
71
- }
72
- if (minColumnIndex >= table.range.startColumnIndex &&
73
- minColumnIndex <= table.range.endColumnIndex) {
74
- if (table.filterSpecs) {
75
- try {
76
- for (var _e = (e_2 = void 0, __values(table.filterSpecs)), _f = _e.next(); !_f.done; _f = _e.next()) {
77
- var spec = _f.value;
78
- if (spec.columnIndex >= minColumnIndex) {
79
- spec.columnIndex -= count;
80
- }
81
- }
82
- }
83
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
84
- finally {
85
- try {
86
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
87
- }
88
- finally { if (e_2) throw e_2.error; }
62
+ var e_1, _a, e_2, _b;
63
+ var _c;
64
+ for (var idx = draft.length - 1; idx >= 0; idx--) {
65
+ var table = draft[idx];
66
+ if (table.sheetId !== sheetId)
67
+ continue;
68
+ var _d = table.range, startColumnIndex = _d.startColumnIndex, endColumnIndex = _d.endColumnIndex;
69
+ if (maxColumnIndex < startColumnIndex) {
70
+ moveFilterView(table, count, Direction.Left);
71
+ continue;
72
+ }
73
+ if (minColumnIndex > endColumnIndex)
74
+ continue;
75
+ if (minColumnIndex <= startColumnIndex &&
76
+ maxColumnIndex >= endColumnIndex) {
77
+ draft.splice(idx, 1);
78
+ continue;
79
+ }
80
+ if (table.filterSpecs) {
81
+ try {
82
+ for (var _e = (e_1 = void 0, __values(table.filterSpecs)), _f = _e.next(); !_f.done; _f = _e.next()) {
83
+ var spec = _f.value;
84
+ if (spec.columnIndex >= minColumnIndex) {
85
+ spec.columnIndex -= count;
89
86
  }
90
87
  }
91
- if (table.sortSpecs) {
92
- try {
93
- for (var _g = (e_3 = void 0, __values(table.sortSpecs)), _h = _g.next(); !_h.done; _h = _g.next()) {
94
- var spec = _h.value;
95
- if (spec.dimensionIndex >= minColumnIndex) {
96
- spec.dimensionIndex -= count;
97
- }
98
- }
99
- }
100
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
101
- finally {
102
- try {
103
- if (_h && !_h.done && (_c = _g.return)) _c.call(_g);
104
- }
105
- finally { if (e_3) throw e_3.error; }
106
- }
88
+ }
89
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
90
+ finally {
91
+ try {
92
+ if (_f && !_f.done && (_a = _e.return)) _a.call(_e);
107
93
  }
108
- var columnArrayIndex = minColumnIndex - table.range.startColumnIndex;
109
- (_d = table.columns) === null || _d === void 0 ? void 0 : _d.splice(columnArrayIndex, count);
110
- var delta = Math.min(table.range.endColumnIndex - minColumnIndex + 1, count);
111
- table.range.endColumnIndex -= delta;
94
+ finally { if (e_1) throw e_1.error; }
112
95
  }
113
96
  }
114
- }
115
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
116
- finally {
117
- try {
118
- if (draft_1_1 && !draft_1_1.done && (_a = draft_1.return)) _a.call(draft_1);
97
+ if (table.sortSpecs) {
98
+ try {
99
+ for (var _g = (e_2 = void 0, __values(table.sortSpecs)), _h = _g.next(); !_h.done; _h = _g.next()) {
100
+ var spec = _h.value;
101
+ if (spec.dimensionIndex >= minColumnIndex) {
102
+ spec.dimensionIndex -= count;
103
+ }
104
+ }
105
+ }
106
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
107
+ finally {
108
+ try {
109
+ if (_h && !_h.done && (_b = _g.return)) _b.call(_g);
110
+ }
111
+ finally { if (e_2) throw e_2.error; }
112
+ }
119
113
  }
120
- finally { if (e_1) throw e_1.error; }
114
+ var overlapStart = Math.max(minColumnIndex, startColumnIndex);
115
+ var overlapEnd = Math.min(maxColumnIndex, endColumnIndex);
116
+ var removed = overlapEnd - overlapStart + 1;
117
+ (_c = table.columns) === null || _c === void 0 ? void 0 : _c.splice(overlapStart - startColumnIndex, removed);
118
+ table.range.startColumnIndex = Math.min(startColumnIndex, minColumnIndex);
119
+ table.range.endColumnIndex =
120
+ table.range.startColumnIndex +
121
+ (endColumnIndex - startColumnIndex) -
122
+ removed;
121
123
  }
122
124
  }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
123
125
  saveHistory({ tables: { patches: patches, inversePatches: inversePatches } });
@@ -172,7 +174,7 @@ export var deleteColumn = function (_a) {
172
174
  // Sheet metadata
173
175
  onChangeSheets === null || onChangeSheets === void 0 ? void 0 : onChangeSheets(function (prevSheets) {
174
176
  var _a = __read(produceWithPatches(prevSheets, function (draft) {
175
- var e_4, _a, e_5, _b, e_6, _c;
177
+ var e_3, _a, e_4, _b, e_5, _c;
176
178
  var _d;
177
179
  var sheet = draft.find(function (sheet) { return sheet.sheetId === sheetId; });
178
180
  if (!sheet)
@@ -196,12 +198,12 @@ export var deleteColumn = function (_a) {
196
198
  }
197
199
  }
198
200
  }
199
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
201
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
200
202
  finally {
201
203
  try {
202
204
  if (_g && !_g.done && (_a = _f.return)) _a.call(_f);
203
205
  }
204
- finally { if (e_4) throw e_4.error; }
206
+ finally { if (e_3) throw e_3.error; }
205
207
  }
206
208
  }
207
209
  if (sheet.basicFilter.sortSpecs) {
@@ -213,12 +215,12 @@ export var deleteColumn = function (_a) {
213
215
  }
214
216
  }
215
217
  }
216
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
218
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
217
219
  finally {
218
220
  try {
219
221
  if (_j && !_j.done && (_b = _h.return)) _b.call(_h);
220
222
  }
221
- finally { if (e_5) throw e_5.error; }
223
+ finally { if (e_4) throw e_4.error; }
222
224
  }
223
225
  }
224
226
  var delta = Math.min(endColumnIndex - minColumnIndex + 1, count);
@@ -234,12 +236,12 @@ export var deleteColumn = function (_a) {
234
236
  }
235
237
  }
236
238
  }
237
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
239
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
238
240
  finally {
239
241
  try {
240
242
  if (sortedColumnIndexes_1_1 && !sortedColumnIndexes_1_1.done && (_c = sortedColumnIndexes_1.return)) _c.call(sortedColumnIndexes_1);
241
243
  }
242
- finally { if (e_6) throw e_6.error; }
244
+ finally { if (e_5) throw e_5.error; }
243
245
  }
244
246
  }
245
247
  if (sheet.merges) {
@@ -1 +1 @@
1
- {"version":3,"file":"delete-table-column.d.ts","sourceRoot":"","sources":["../../../interface/delete-table-column.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAY5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI7D,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,6OAepE,IAAI,CACL,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EACnB,aAAa,GACb,UAAU,GACV,QAAQ,GACR,iBAAiB,GACjB,sBAAsB,GACtB,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,GACnB,oBAAoB,GACpB,wBAAwB,GACxB,uBAAuB,GACvB,eAAe,CAClB,MACS,WAAW,SAAS,EAAE,gBAAgB,MAAM,SA4VrD,CAAC"}
1
+ {"version":3,"file":"delete-table-column.d.ts","sourceRoot":"","sources":["../../../interface/delete-table-column.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAY5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI7D,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,6OAepE,IAAI,CACL,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EACnB,aAAa,GACb,UAAU,GACV,QAAQ,GACR,iBAAiB,GACjB,sBAAsB,GACtB,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,GACnB,oBAAoB,GACpB,wBAAwB,GACxB,uBAAuB,GACvB,eAAe,CAClB,MACS,WAAW,SAAS,EAAE,gBAAgB,MAAM,SA8VrD,CAAC"}
@@ -179,7 +179,9 @@ export var deleteTableColumn = function (_a) {
179
179
  var _a = __read(produceWithPatches(prevSheetData, function (draft) {
180
180
  var e_6, _a, e_7, _b;
181
181
  var _c, _d, _e, _f, _g, _h, _j, _k, _l;
182
- var sourceRange = __assign(__assign({}, range), { startColumnIndex: referenceColumnIndex + count });
182
+ // The moved region is every cell after the deleted column within the table's rows,
183
+ // including any table to the right that sits inside that row band.
184
+ var sourceRange = __assign(__assign({}, range), { startColumnIndex: referenceColumnIndex + count, endColumnIndex: Number.MAX_SAFE_INTEGER });
183
185
  var movedKeys = new Set();
184
186
  /**
185
187
  * THREE-PASS FORMULA UPDATE STRATEGY FOR DELETION:
@@ -308,8 +310,7 @@ export var deleteTableColumn = function (_a) {
308
310
  continue;
309
311
  }
310
312
  var startCol = Math.min(Math.max(range.startColumnIndex, 1), dataColumnCount);
311
- var endCol = Math.min(range.endColumnIndex, dataColumnCount);
312
- for (var columnIndex = startCol; columnIndex < endCol; columnIndex++) {
313
+ for (var columnIndex = startCol; columnIndex < dataColumnCount; columnIndex++) {
313
314
  var cellData = rowValues === null || rowValues === void 0 ? void 0 : rowValues[columnIndex];
314
315
  var hasFormula = !!getExtendedValueFormula(getCellUserEnteredValue(cellData));
315
316
  if (!hasFormula) {
@@ -1 +1 @@
1
- {"version":3,"file":"delete-table-row.d.ts","sourceRoot":"","sources":["../../../interface/delete-table-row.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAgB5E,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAIjF,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,kSAiBjE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,MACvB,WAAW,SAAS,EAAE,YAAY,MAAM,EAAE,SAyXnD,CAAC"}
1
+ {"version":3,"file":"delete-table-row.d.ts","sourceRoot":"","sources":["../../../interface/delete-table-row.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAgB5E,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAIjF,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,kSAiBjE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,MACvB,WAAW,SAAS,EAAE,YAAY,MAAM,EAAE,SAoYnD,CAAC"}
@@ -17,6 +17,11 @@ export var deleteTableRow = function (_a) {
17
17
  var saveHistory = createHistory();
18
18
  var _a = rowIndexes, minRowIndex = _a[0], _b = rowIndexes.length - 1, maxRowIndex = _a[_b];
19
19
  var count = rowIndexes.length;
20
+ var _c = tableView.range, startColumnIndex = _c.startColumnIndex, endColumnIndex = _c.endColumnIndex;
21
+ var isInsideColumnBand = function (range) {
22
+ return range.startColumnIndex >= startColumnIndex &&
23
+ range.endColumnIndex <= endColumnIndex;
24
+ };
20
25
  enqueueStructureChange === null || enqueueStructureChange === void 0 ? void 0 : enqueueStructureChange({
21
26
  kind: "delete-table-row",
22
27
  sheetId: sheetId,
@@ -35,14 +40,15 @@ export var deleteTableRow = function (_a) {
35
40
  try {
36
41
  for (var draft_1 = __values(draft), draft_1_1 = draft_1.next(); !draft_1_1.done; draft_1_1 = draft_1.next()) {
37
42
  var table = draft_1_1.value;
38
- var startRowIndex = table.range.startRowIndex;
39
- var endRowIndex = table.range.endRowIndex;
40
- if (minRowIndex < startRowIndex) {
41
- moveFilterView(table, count, Direction.Up);
43
+ if (table.sheetId !== sheetId || !isInsideColumnBand(table.range)) {
44
+ continue;
42
45
  }
43
- if (minRowIndex >= startRowIndex && minRowIndex <= endRowIndex) {
46
+ if (table.id === tableView.id) {
44
47
  table.range.endRowIndex -= count;
45
48
  }
49
+ else if (maxRowIndex < table.range.startRowIndex) {
50
+ moveFilterView(table, count, Direction.Up);
51
+ }
46
52
  }
47
53
  }
48
54
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
@@ -66,7 +72,9 @@ export var deleteTableRow = function (_a) {
66
72
  for (var idx = draft.length - 1; idx >= 0; idx--) {
67
73
  var rule = draft[idx];
68
74
  var ranges = (_b = (_a = rule.ranges) === null || _a === void 0 ? void 0 : _a.map(function (range) {
69
- return updateSheetRangeOnDelete(range, "row", minRowIndex, count, sheetId);
75
+ return isInsideColumnBand(range)
76
+ ? updateSheetRangeOnDelete(range, "row", minRowIndex, count, sheetId)
77
+ : range;
70
78
  }).filter(function (range) { return !!range; })) !== null && _b !== void 0 ? _b : [];
71
79
  if (ranges.length) {
72
80
  rule.ranges = ranges;
@@ -88,7 +96,9 @@ export var deleteTableRow = function (_a) {
88
96
  for (var idx = draft.length - 1; idx >= 0; idx--) {
89
97
  var rule = draft[idx];
90
98
  var ranges = (_b = (_a = rule.ranges) === null || _a === void 0 ? void 0 : _a.map(function (range) {
91
- return updateSheetRangeOnDelete(range, "row", minRowIndex, count, sheetId);
99
+ return isInsideColumnBand(range)
100
+ ? updateSheetRangeOnDelete(range, "row", minRowIndex, count, sheetId)
101
+ : range;
92
102
  }).filter(function (range) { return !!range; })) !== null && _b !== void 0 ? _b : [];
93
103
  if (ranges.length) {
94
104
  rule.ranges = ranges;
@@ -112,7 +122,8 @@ export var deleteTableRow = function (_a) {
112
122
  if (sheet.rowMetadata) {
113
123
  sheet.rowMetadata.splice(minRowIndex, count);
114
124
  }
115
- if (sheet.basicFilter) {
125
+ if (sheet.basicFilter &&
126
+ isInsideColumnBand(sheet.basicFilter.range)) {
116
127
  if (minRowIndex < sheet.basicFilter.range.startRowIndex) {
117
128
  moveFilterView(sheet.basicFilter, count, Direction.Up);
118
129
  }
@@ -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;AAoB5E,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,qaAyB/D,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,MACrB,SAAS,MAAM,EAAE,sBAAsB,MAAM,EAAE,mBAAc,SA0TtE,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,SA4V9C,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;AAoB5E,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,qaAyB/D,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,MACrB,SAAS,MAAM,EAAE,sBAAsB,MAAM,EAAE,mBAAc,SA0TtE,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"}
@@ -349,7 +349,7 @@ export var insertTableColumn = function (_a) {
349
349
  try {
350
350
  for (var draft_3 = __values(draft), draft_3_1 = draft_3.next(); !draft_3_1.done; draft_3_1 = draft_3.next()) {
351
351
  var table_1 = draft_3_1.value;
352
- if (referenceColumnIndex < table_1.range.startColumnIndex &&
352
+ if (referenceColumnIndex <= table_1.range.startColumnIndex &&
353
353
  table_1.range.startRowIndex >= tableView.range.startRowIndex &&
354
354
  table_1.range.endRowIndex <= tableView.range.endRowIndex &&
355
355
  table_1.id !== tableView.id) {
@@ -485,7 +485,9 @@ export var insertTableColumn = function (_a) {
485
485
  var _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;
486
486
  var range = tableView.range;
487
487
  var headerRow = (_c = tableView.headerRow) !== null && _c !== void 0 ? _c : true;
488
- var sourceRange = __assign(__assign({}, range), { startColumnIndex: referenceColumnIndex });
488
+ // The moved region is every cell at/after the insertion point within the table's
489
+ // rows, including any table to the right that sits inside that row band.
490
+ var sourceRange = __assign(__assign({}, range), { startColumnIndex: referenceColumnIndex, endColumnIndex: Number.MAX_SAFE_INTEGER });
489
491
  var movedKeys = new Set();
490
492
  // PASS 1
491
493
  var insertionRange = {
@@ -587,8 +589,7 @@ export var insertTableColumn = function (_a) {
587
589
  for (var rowIndex = range.startRowIndex; rowIndex <= range.endRowIndex; rowIndex++) {
588
590
  var dataColumnCount = (_j = (_h = (_g = (_f = draft[sheetId]) === null || _f === void 0 ? void 0 : _f[rowIndex]) === null || _g === void 0 ? void 0 : _g.values) === null || _h === void 0 ? void 0 : _h.length) !== null && _j !== void 0 ? _j : 0;
589
591
  var startCol = Math.min(Math.max(referenceColumnIndex, 1), dataColumnCount);
590
- var endCol = Math.min(range.endColumnIndex + numColumns, dataColumnCount);
591
- for (var columnIndex = startCol; columnIndex < endCol; columnIndex++) {
592
+ for (var columnIndex = startCol; columnIndex < dataColumnCount; columnIndex++) {
592
593
  moveFormulaAtPosition({
593
594
  draft: draft,
594
595
  position: { sheetId: sheetId, rowIndex: rowIndex, columnIndex: columnIndex },
@@ -1 +1 @@
1
- {"version":3,"file":"insert-table-row.d.ts","sourceRoot":"","sources":["../../../interface/insert-table-row.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAa5E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAIjF,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,iTAkBjE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,MAE7B,WAAW,SAAS,EACpB,mBAAmB,MAAM,EACzB,UAAU,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,SA+axD,CAAC"}
1
+ {"version":3,"file":"insert-table-row.d.ts","sourceRoot":"","sources":["../../../interface/insert-table-row.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAa5E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAIjF,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,iTAkBjE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,MAE7B,WAAW,SAAS,EACpB,mBAAmB,MAAM,EACzB,UAAU,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,SAubxD,CAAC"}
@@ -17,6 +17,11 @@ export var insertTableRow = function (_a) {
17
17
  (relativeRowIndex !== null && relativeRowIndex !== void 0 ? relativeRowIndex : tableView.range.endRowIndex - tableView.range.startRowIndex + 1);
18
18
  var numRows = (_a = rowData === null || rowData === void 0 ? void 0 : rowData.length) !== null && _a !== void 0 ? _a : 1;
19
19
  var sheetId = tableView.sheetId;
20
+ var _b = tableView.range, startColumnIndex = _b.startColumnIndex, endColumnIndex = _b.endColumnIndex;
21
+ var isInsideColumnBand = function (range) {
22
+ return range.startColumnIndex >= startColumnIndex &&
23
+ range.endColumnIndex <= endColumnIndex;
24
+ };
20
25
  enqueueStructureChange === null || enqueueStructureChange === void 0 ? void 0 : enqueueStructureChange({
21
26
  kind: "insert-table-row",
22
27
  sheetId: sheetId,
@@ -36,15 +41,15 @@ export var insertTableRow = function (_a) {
36
41
  try {
37
42
  for (var draft_1 = __values(draft), draft_1_1 = draft_1.next(); !draft_1_1.done; draft_1_1 = draft_1.next()) {
38
43
  var table = draft_1_1.value;
39
- var startRowIndex = table.range.startRowIndex;
40
- var endRowIndex = table.range.endRowIndex;
41
- if (referenceRowIndex < startRowIndex) {
42
- moveFilterView(table, numRows, Direction.Down);
44
+ if (table.sheetId !== sheetId || !isInsideColumnBand(table.range)) {
45
+ continue;
43
46
  }
44
- if (referenceRowIndex >= startRowIndex &&
45
- referenceRowIndex <= endRowIndex + 1) {
47
+ if (table.id === tableView.id) {
46
48
  table.range.endRowIndex += numRows;
47
49
  }
50
+ else if (referenceRowIndex <= table.range.startRowIndex) {
51
+ moveFilterView(table, numRows, Direction.Down);
52
+ }
48
53
  }
49
54
  }
50
55
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
@@ -68,7 +73,9 @@ export var insertTableRow = function (_a) {
68
73
  for (var idx = draft.length - 1; idx >= 0; idx--) {
69
74
  var rule = draft[idx];
70
75
  var ranges = (_b = (_a = rule.ranges) === null || _a === void 0 ? void 0 : _a.map(function (range) {
71
- return updateSheetRangeOnInsert(range, "row", referenceRowIndex, numRows, sheetId);
76
+ return isInsideColumnBand(range)
77
+ ? updateSheetRangeOnInsert(range, "row", referenceRowIndex, numRows, sheetId)
78
+ : range;
72
79
  }).filter(function (range) { return !!range; })) !== null && _b !== void 0 ? _b : [];
73
80
  if (ranges.length) {
74
81
  rule.ranges = ranges;
@@ -90,7 +97,9 @@ export var insertTableRow = function (_a) {
90
97
  for (var idx = draft.length - 1; idx >= 0; idx--) {
91
98
  var rule = draft[idx];
92
99
  var ranges = (_b = (_a = rule.ranges) === null || _a === void 0 ? void 0 : _a.map(function (range) {
93
- return updateSheetRangeOnInsert(range, "row", referenceRowIndex, numRows, sheetId);
100
+ return isInsideColumnBand(range)
101
+ ? updateSheetRangeOnInsert(range, "row", referenceRowIndex, numRows, sheetId)
102
+ : range;
94
103
  }).filter(function (range) { return !!range; })) !== null && _b !== void 0 ? _b : [];
95
104
  if (ranges.length) {
96
105
  rule.ranges = ranges;
@@ -116,7 +125,8 @@ export var insertTableRow = function (_a) {
116
125
  var newRowMetaData = __spreadArray([], __read(Array(numRows)), false).map(function (_, index) { var _a; return (_a = sheet.rowMetadata) === null || _a === void 0 ? void 0 : _a[referenceRowIndex + index]; });
117
126
  (_a = sheet.rowMetadata).splice.apply(_a, __spreadArray([referenceRowIndex, 0], __read(newRowMetaData), false));
118
127
  }
119
- if (sheet.basicFilter) {
128
+ if (sheet.basicFilter &&
129
+ isInsideColumnBand(sheet.basicFilter.range)) {
120
130
  // Check if basicFilter needs to be moved
121
131
  if (sheet.basicFilter.range.startRowIndex >= referenceRowIndex) {
122
132
  moveFilterView(sheet.basicFilter, numRows, Direction.Down);
@@ -1 +1 @@
1
- {"version":3,"file":"update-sheet.d.ts","sourceRoot":"","sources":["../../../interface/update-sheet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,QAAQ,EACR,aAAa,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAMjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI;IAClE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5D,iBAAiB,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACnE,aAAa,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC,CAAC;IACzE,aAAa,CAAC,EAAE,CACd,MAAM,EAAE,cAAc,KACnB,CAAC,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC,EAAE,CAAC;IAC/C,aAAa,IAAI,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,qGAQ9D,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,MACf,SAAS,MAAM,EAAE,WAAW,OAAO,CAAC,CAAC,CAAC,kBAkF/C,CAAC"}
1
+ {"version":3,"file":"update-sheet.d.ts","sourceRoot":"","sources":["../../../interface/update-sheet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,QAAQ,EACR,aAAa,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAMjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI;IAClE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5D,iBAAiB,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACnE,aAAa,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC,CAAC;IACzE,aAAa,CAAC,EAAE,CACd,MAAM,EAAE,cAAc,KACnB,CAAC,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC,EAAE,CAAC;IAC/C,aAAa,IAAI,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,qGAQ9D,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,MACf,SAAS,MAAM,EAAE,WAAW,OAAO,CAAC,CAAC,CAAC,kBAsF/C,CAAC"}
@@ -5,12 +5,15 @@ import { sanitizeSheetSpecTitle } from "../helpers/sheet-title";
5
5
  export var updateSheet = function (_a) {
6
6
  var sheets = _a.sheets, locale = _a.locale, onChangeSheets = _a.onChangeSheets, onChangeSheetData = _a.onChangeSheetData, getGraphNodes = _a.getGraphNodes, getPrecedents = _a.getPrecedents, createHistory = _a.createHistory;
7
7
  return function (sheetId, sheetSpec) {
8
- var saveHistory = createHistory();
9
8
  var sanitizedSheetSpec = sanitizeSheetSpecTitle(sheetSpec);
10
9
  var curSheet = sheets === null || sheets === void 0 ? void 0 : sheets.find(function (sheet) { return sheet.sheetId === sheetId; });
11
10
  if (!curSheet) {
12
11
  return undefined;
13
12
  }
13
+ if (Object.keys(sanitizedSheetSpec).length === 0) {
14
+ return curSheet;
15
+ }
16
+ var saveHistory = createHistory();
14
17
  var oldTitle = curSheet.title;
15
18
  var newTitle = sanitizedSheetSpec.title;
16
19
  var isTitleChanging = newTitle !== undefined && newTitle !== oldTitle && oldTitle !== undefined;
@@ -1,5 +1,8 @@
1
1
  import type { Sheet } from "@rowsncolumns/spreadsheet";
2
2
  export declare const MAX_SHEET_TITLE_LENGTH = 32;
3
3
  export declare const truncateSheetTitle: (title: string) => string;
4
+ /** Worksheet names cannot be empty or whitespace-only. */
5
+ export declare const isValidSheetTitle: (title: string) => boolean;
6
+ /** Truncates a valid title; drops an invalid (blank) one so the rest of the spec still applies. */
4
7
  export declare const sanitizeSheetSpecTitle: <S extends Sheet>(sheetSpec: Partial<S>) => Partial<S>;
5
8
  //# sourceMappingURL=sheet-title.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sheet-title.d.ts","sourceRoot":"","sources":["../../../helpers/sheet-title.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEvD,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,KAAG,MAElD,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,CAAC,SAAS,KAAK,EACpD,WAAW,OAAO,CAAC,CAAC,CAAC,KACpB,OAAO,CAAC,CAAC,CASX,CAAC"}
1
+ {"version":3,"file":"sheet-title.d.ts","sourceRoot":"","sources":["../../../helpers/sheet-title.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEvD,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,KAAG,MAElD,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,iBAAiB,GAAI,OAAO,MAAM,KAAG,OAEjD,CAAC;AAEF,mGAAmG;AACnG,eAAO,MAAM,sBAAsB,GAAI,CAAC,SAAS,KAAK,EACpD,WAAW,OAAO,CAAC,CAAC,CAAC,KACpB,OAAO,CAAC,CAAC,CAcX,CAAC"}
@@ -2,10 +2,19 @@ export const MAX_SHEET_TITLE_LENGTH = 32;
2
2
  export const truncateSheetTitle = (title) => {
3
3
  return title.slice(0, MAX_SHEET_TITLE_LENGTH);
4
4
  };
5
+ /** Worksheet names cannot be empty or whitespace-only. */
6
+ export const isValidSheetTitle = (title) => {
7
+ return title.trim().length > 0;
8
+ };
9
+ /** Truncates a valid title; drops an invalid (blank) one so the rest of the spec still applies. */
5
10
  export const sanitizeSheetSpecTitle = (sheetSpec) => {
6
11
  if (typeof sheetSpec.title !== "string") {
7
12
  return sheetSpec;
8
13
  }
14
+ if (!isValidSheetTitle(sheetSpec.title)) {
15
+ const { title: _title, ...rest } = sheetSpec;
16
+ return rest;
17
+ }
9
18
  return {
10
19
  ...sheetSpec,
11
20
  title: truncateSheetTitle(sheetSpec.title),
@@ -1,14 +1,14 @@
1
1
  import { produceWithPatches } from "immer";
2
2
  import { useCallback } from "react";
3
3
  import { updateFormulaSheetReferences } from "../api/rename-sheet";
4
- import { truncateSheetTitle } from "../helpers/sheet-title";
4
+ import { isValidSheetTitle, truncateSheetTitle } from "../helpers/sheet-title";
5
5
  import { useCanEditSheet, useCanEditWorkbook } from "./use-can-edit-cellrange";
6
6
  export const useOnRenameSheet = ({ locale, onChangeSheetData, onChangeSheets, onChangeActiveCell, getActiveCell, getGraphNodes, getPrecedents, createHistory, onCommand, }) => {
7
7
  const canEditSheet = useCanEditSheet();
8
8
  const canEditWorkbook = useCanEditWorkbook();
9
9
  return useCallback((sheetId, name, oldName) => {
10
10
  // Worksheet names cannot be empty or whitespace-only
11
- if (name.trim().length === 0) {
11
+ if (!isValidSheetTitle(name)) {
12
12
  console.debug("Sheet name cannot be empty.");
13
13
  return;
14
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"delete-column.d.ts","sourceRoot":"","sources":["../../../interface/delete-column.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AASjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAG5E,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,qbAyB/D,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,MACrB,SAAS,MAAM,EAAE,eAAe,MAAM,EAAE,SA8TjD,CAAC"}
1
+ {"version":3,"file":"delete-column.d.ts","sourceRoot":"","sources":["../../../interface/delete-column.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AASjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAG5E,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,qbAyB/D,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,MACrB,SAAS,MAAM,EAAE,eAAe,MAAM,EAAE,SAuUjD,CAAC"}
@@ -71,33 +71,45 @@ export const deleteColumn = ({ rowCount, columnCount, locale, cellXfsRegistry, s
71
71
  // and table-column splice for partially-overlapped tables.
72
72
  onChangeTables?.((prevTables) => {
73
73
  const [nextState, patches, inversePatches] = produceWithPatches(prevTables, (draft) => {
74
- for (const table of draft) {
74
+ for (let idx = draft.length - 1; idx >= 0; idx--) {
75
+ const table = draft[idx];
75
76
  if (table.sheetId !== sheetId)
76
77
  continue;
77
- if (minColumnIndex < table.range.startColumnIndex) {
78
+ const { startColumnIndex, endColumnIndex } = table.range;
79
+ if (maxColumnIndex < startColumnIndex) {
78
80
  moveFilterView(table, count, Direction.Left);
81
+ continue;
79
82
  }
80
- if (minColumnIndex >= table.range.startColumnIndex &&
81
- minColumnIndex <= table.range.endColumnIndex) {
82
- if (table.filterSpecs) {
83
- for (const spec of table.filterSpecs) {
84
- if (spec.columnIndex >= minColumnIndex) {
85
- spec.columnIndex -= count;
86
- }
83
+ if (minColumnIndex > endColumnIndex)
84
+ continue;
85
+ if (minColumnIndex <= startColumnIndex &&
86
+ maxColumnIndex >= endColumnIndex) {
87
+ draft.splice(idx, 1);
88
+ continue;
89
+ }
90
+ if (table.filterSpecs) {
91
+ for (const spec of table.filterSpecs) {
92
+ if (spec.columnIndex >= minColumnIndex) {
93
+ spec.columnIndex -= count;
87
94
  }
88
95
  }
89
- if (table.sortSpecs) {
90
- for (const spec of table.sortSpecs) {
91
- if (spec.dimensionIndex >= minColumnIndex) {
92
- spec.dimensionIndex -= count;
93
- }
96
+ }
97
+ if (table.sortSpecs) {
98
+ for (const spec of table.sortSpecs) {
99
+ if (spec.dimensionIndex >= minColumnIndex) {
100
+ spec.dimensionIndex -= count;
94
101
  }
95
102
  }
96
- const columnArrayIndex = minColumnIndex - table.range.startColumnIndex;
97
- table.columns?.splice(columnArrayIndex, count);
98
- const delta = Math.min(table.range.endColumnIndex - minColumnIndex + 1, count);
99
- table.range.endColumnIndex -= delta;
100
103
  }
104
+ const overlapStart = Math.max(minColumnIndex, startColumnIndex);
105
+ const overlapEnd = Math.min(maxColumnIndex, endColumnIndex);
106
+ const removed = overlapEnd - overlapStart + 1;
107
+ table.columns?.splice(overlapStart - startColumnIndex, removed);
108
+ table.range.startColumnIndex = Math.min(startColumnIndex, minColumnIndex);
109
+ table.range.endColumnIndex =
110
+ table.range.startColumnIndex +
111
+ (endColumnIndex - startColumnIndex) -
112
+ removed;
101
113
  }
102
114
  });
103
115
  saveHistory({ tables: { patches, inversePatches } });
@@ -1 +1 @@
1
- {"version":3,"file":"delete-table-column.d.ts","sourceRoot":"","sources":["../../../interface/delete-table-column.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAY5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI7D,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,6OAepE,IAAI,CACL,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EACnB,aAAa,GACb,UAAU,GACV,QAAQ,GACR,iBAAiB,GACjB,sBAAsB,GACtB,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,GACnB,oBAAoB,GACpB,wBAAwB,GACxB,uBAAuB,GACvB,eAAe,CAClB,MACS,WAAW,SAAS,EAAE,gBAAgB,MAAM,SA4VrD,CAAC"}
1
+ {"version":3,"file":"delete-table-column.d.ts","sourceRoot":"","sources":["../../../interface/delete-table-column.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAY5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI7D,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,6OAepE,IAAI,CACL,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EACnB,aAAa,GACb,UAAU,GACV,QAAQ,GACR,iBAAiB,GACjB,sBAAsB,GACtB,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,GACnB,oBAAoB,GACpB,wBAAwB,GACxB,uBAAuB,GACvB,eAAe,CAClB,MACS,WAAW,SAAS,EAAE,gBAAgB,MAAM,SA8VrD,CAAC"}
@@ -121,9 +121,12 @@ export const deleteTableColumn = ({ columnCount, rowCount, locale, cellXfsRegist
121
121
  // Sheet data
122
122
  onChangeSheetData?.((prevSheetData) => {
123
123
  const [nextState, patches, inversePatches] = produceWithPatches(prevSheetData, (draft) => {
124
+ // The moved region is every cell after the deleted column within the table's rows,
125
+ // including any table to the right that sits inside that row band.
124
126
  const sourceRange = {
125
127
  ...range,
126
128
  startColumnIndex: referenceColumnIndex + count,
129
+ endColumnIndex: Number.MAX_SAFE_INTEGER,
127
130
  };
128
131
  const movedKeys = new Set();
129
132
  /**
@@ -233,8 +236,7 @@ export const deleteTableColumn = ({ columnCount, rowCount, locale, cellXfsRegist
233
236
  continue;
234
237
  }
235
238
  const startCol = Math.min(Math.max(range.startColumnIndex, 1), dataColumnCount);
236
- const endCol = Math.min(range.endColumnIndex, dataColumnCount);
237
- for (let columnIndex = startCol; columnIndex < endCol; columnIndex++) {
239
+ for (let columnIndex = startCol; columnIndex < dataColumnCount; columnIndex++) {
238
240
  const cellData = rowValues?.[columnIndex];
239
241
  const hasFormula = !!getExtendedValueFormula(getCellUserEnteredValue(cellData));
240
242
  if (!hasFormula) {
@@ -1 +1 @@
1
- {"version":3,"file":"delete-table-row.d.ts","sourceRoot":"","sources":["../../../interface/delete-table-row.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAgB5E,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAIjF,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,kSAiBjE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,MACvB,WAAW,SAAS,EAAE,YAAY,MAAM,EAAE,SAyXnD,CAAC"}
1
+ {"version":3,"file":"delete-table-row.d.ts","sourceRoot":"","sources":["../../../interface/delete-table-row.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAgB5E,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAIjF,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,kSAiBjE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,MACvB,WAAW,SAAS,EAAE,YAAY,MAAM,EAAE,SAoYnD,CAAC"}
@@ -15,6 +15,9 @@ export const deleteTableRow = ({ rowCount, columnCount, locale, cellXfsRegistry,
15
15
  const saveHistory = createHistory();
16
16
  const { 0: minRowIndex, [rowIndexes.length - 1]: maxRowIndex } = rowIndexes;
17
17
  const count = rowIndexes.length;
18
+ const { startColumnIndex, endColumnIndex } = tableView.range;
19
+ const isInsideColumnBand = (range) => range.startColumnIndex >= startColumnIndex &&
20
+ range.endColumnIndex <= endColumnIndex;
18
21
  enqueueStructureChange?.({
19
22
  kind: "delete-table-row",
20
23
  sheetId,
@@ -30,14 +33,15 @@ export const deleteTableRow = ({ rowCount, columnCount, locale, cellXfsRegistry,
30
33
  onChangeTables?.((prevTables) => {
31
34
  const [nextState, patches, inversePatches] = produceWithPatches(prevTables, (draft) => {
32
35
  for (const table of draft) {
33
- const startRowIndex = table.range.startRowIndex;
34
- const endRowIndex = table.range.endRowIndex;
35
- if (minRowIndex < startRowIndex) {
36
- moveFilterView(table, count, Direction.Up);
36
+ if (table.sheetId !== sheetId || !isInsideColumnBand(table.range)) {
37
+ continue;
37
38
  }
38
- if (minRowIndex >= startRowIndex && minRowIndex <= endRowIndex) {
39
+ if (table.id === tableView.id) {
39
40
  table.range.endRowIndex -= count;
40
41
  }
42
+ else if (maxRowIndex < table.range.startRowIndex) {
43
+ moveFilterView(table, count, Direction.Up);
44
+ }
41
45
  }
42
46
  });
43
47
  // Save history
@@ -52,7 +56,9 @@ export const deleteTableRow = ({ rowCount, columnCount, locale, cellXfsRegistry,
52
56
  for (let idx = draft.length - 1; idx >= 0; idx--) {
53
57
  const rule = draft[idx];
54
58
  const ranges = rule.ranges
55
- ?.map((range) => updateSheetRangeOnDelete(range, "row", minRowIndex, count, sheetId))
59
+ ?.map((range) => isInsideColumnBand(range)
60
+ ? updateSheetRangeOnDelete(range, "row", minRowIndex, count, sheetId)
61
+ : range)
56
62
  .filter((range) => !!range) ?? [];
57
63
  if (ranges.length) {
58
64
  rule.ranges = ranges;
@@ -73,7 +79,9 @@ export const deleteTableRow = ({ rowCount, columnCount, locale, cellXfsRegistry,
73
79
  for (let idx = draft.length - 1; idx >= 0; idx--) {
74
80
  const rule = draft[idx];
75
81
  const ranges = rule.ranges
76
- ?.map((range) => updateSheetRangeOnDelete(range, "row", minRowIndex, count, sheetId))
82
+ ?.map((range) => isInsideColumnBand(range)
83
+ ? updateSheetRangeOnDelete(range, "row", minRowIndex, count, sheetId)
84
+ : range)
77
85
  .filter((range) => !!range) ?? [];
78
86
  if (ranges.length) {
79
87
  rule.ranges = ranges;
@@ -96,7 +104,8 @@ export const deleteTableRow = ({ rowCount, columnCount, locale, cellXfsRegistry,
96
104
  if (sheet.rowMetadata) {
97
105
  sheet.rowMetadata.splice(minRowIndex, count);
98
106
  }
99
- if (sheet.basicFilter) {
107
+ if (sheet.basicFilter &&
108
+ isInsideColumnBand(sheet.basicFilter.range)) {
100
109
  if (minRowIndex < sheet.basicFilter.range.startRowIndex) {
101
110
  moveFilterView(sheet.basicFilter, count, Direction.Up);
102
111
  }
@@ -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;AAoB5E,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,qaAyB/D,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,MACrB,SAAS,MAAM,EAAE,sBAAsB,MAAM,EAAE,mBAAc,SA0TtE,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,SA4V9C,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;AAoB5E,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,qaAyB/D,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,MACrB,SAAS,MAAM,EAAE,sBAAsB,MAAM,EAAE,mBAAc,SA0TtE,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"}
@@ -259,7 +259,7 @@ export const insertTableColumn = ({ tables, columnCount, rowCount, locale, cellX
259
259
  onChangeTables?.((prevTables) => {
260
260
  const [nextState, patches, inversePatches] = produceWithPatches(prevTables, (draft) => {
261
261
  for (const table of draft) {
262
- if (referenceColumnIndex < table.range.startColumnIndex &&
262
+ if (referenceColumnIndex <= table.range.startColumnIndex &&
263
263
  table.range.startRowIndex >= tableView.range.startRowIndex &&
264
264
  table.range.endRowIndex <= tableView.range.endRowIndex &&
265
265
  table.id !== tableView.id) {
@@ -342,9 +342,12 @@ export const insertTableColumn = ({ tables, columnCount, rowCount, locale, cellX
342
342
  const [nextState, patches, inversePatches] = produceWithPatches(prevSheetData, (draft) => {
343
343
  const { range } = tableView;
344
344
  const headerRow = tableView.headerRow ?? true;
345
+ // The moved region is every cell at/after the insertion point within the table's
346
+ // rows, including any table to the right that sits inside that row band.
345
347
  const sourceRange = {
346
348
  ...range,
347
349
  startColumnIndex: referenceColumnIndex,
350
+ endColumnIndex: Number.MAX_SAFE_INTEGER,
348
351
  };
349
352
  const movedKeys = new Set();
350
353
  // PASS 1
@@ -427,8 +430,7 @@ export const insertTableColumn = ({ tables, columnCount, rowCount, locale, cellX
427
430
  for (let rowIndex = range.startRowIndex; rowIndex <= range.endRowIndex; rowIndex++) {
428
431
  const dataColumnCount = draft[sheetId]?.[rowIndex]?.values?.length ?? 0;
429
432
  const startCol = Math.min(Math.max(referenceColumnIndex, 1), dataColumnCount);
430
- const endCol = Math.min(range.endColumnIndex + numColumns, dataColumnCount);
431
- for (let columnIndex = startCol; columnIndex < endCol; columnIndex++) {
433
+ for (let columnIndex = startCol; columnIndex < dataColumnCount; columnIndex++) {
432
434
  moveFormulaAtPosition({
433
435
  draft,
434
436
  position: { sheetId, rowIndex, columnIndex },
@@ -1 +1 @@
1
- {"version":3,"file":"insert-table-row.d.ts","sourceRoot":"","sources":["../../../interface/insert-table-row.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAa5E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAIjF,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,iTAkBjE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,MAE7B,WAAW,SAAS,EACpB,mBAAmB,MAAM,EACzB,UAAU,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,SA+axD,CAAC"}
1
+ {"version":3,"file":"insert-table-row.d.ts","sourceRoot":"","sources":["../../../interface/insert-table-row.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAa5E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAIjF,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,iTAkBjE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,MAE7B,WAAW,SAAS,EACpB,mBAAmB,MAAM,EACzB,UAAU,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,SAubxD,CAAC"}
@@ -15,6 +15,9 @@ export const insertTableRow = ({ rowCount, columnCount, locale, cellXfsRegistry,
15
15
  tableView.range.endRowIndex - tableView.range.startRowIndex + 1);
16
16
  const numRows = rowData?.length ?? 1;
17
17
  const { sheetId } = tableView;
18
+ const { startColumnIndex, endColumnIndex } = tableView.range;
19
+ const isInsideColumnBand = (range) => range.startColumnIndex >= startColumnIndex &&
20
+ range.endColumnIndex <= endColumnIndex;
18
21
  enqueueStructureChange?.({
19
22
  kind: "insert-table-row",
20
23
  sheetId,
@@ -31,15 +34,15 @@ export const insertTableRow = ({ rowCount, columnCount, locale, cellXfsRegistry,
31
34
  onChangeTables?.((prevTables) => {
32
35
  const [nextState, patches, inversePatches] = produceWithPatches(prevTables, (draft) => {
33
36
  for (const table of draft) {
34
- const startRowIndex = table.range.startRowIndex;
35
- const endRowIndex = table.range.endRowIndex;
36
- if (referenceRowIndex < startRowIndex) {
37
- moveFilterView(table, numRows, Direction.Down);
37
+ if (table.sheetId !== sheetId || !isInsideColumnBand(table.range)) {
38
+ continue;
38
39
  }
39
- if (referenceRowIndex >= startRowIndex &&
40
- referenceRowIndex <= endRowIndex + 1) {
40
+ if (table.id === tableView.id) {
41
41
  table.range.endRowIndex += numRows;
42
42
  }
43
+ else if (referenceRowIndex <= table.range.startRowIndex) {
44
+ moveFilterView(table, numRows, Direction.Down);
45
+ }
43
46
  }
44
47
  });
45
48
  // Save history
@@ -54,7 +57,9 @@ export const insertTableRow = ({ rowCount, columnCount, locale, cellXfsRegistry,
54
57
  for (let idx = draft.length - 1; idx >= 0; idx--) {
55
58
  const rule = draft[idx];
56
59
  const ranges = rule.ranges
57
- ?.map((range) => updateSheetRangeOnInsert(range, "row", referenceRowIndex, numRows, sheetId))
60
+ ?.map((range) => isInsideColumnBand(range)
61
+ ? updateSheetRangeOnInsert(range, "row", referenceRowIndex, numRows, sheetId)
62
+ : range)
58
63
  .filter((range) => !!range) ??
59
64
  [];
60
65
  if (ranges.length) {
@@ -76,7 +81,9 @@ export const insertTableRow = ({ rowCount, columnCount, locale, cellXfsRegistry,
76
81
  for (let idx = draft.length - 1; idx >= 0; idx--) {
77
82
  const rule = draft[idx];
78
83
  const ranges = rule.ranges
79
- ?.map((range) => updateSheetRangeOnInsert(range, "row", referenceRowIndex, numRows, sheetId))
84
+ ?.map((range) => isInsideColumnBand(range)
85
+ ? updateSheetRangeOnInsert(range, "row", referenceRowIndex, numRows, sheetId)
86
+ : range)
80
87
  .filter((range) => !!range) ??
81
88
  [];
82
89
  if (ranges.length) {
@@ -101,7 +108,8 @@ export const insertTableRow = ({ rowCount, columnCount, locale, cellXfsRegistry,
101
108
  const newRowMetaData = [...Array(numRows)].map((_, index) => sheet.rowMetadata?.[referenceRowIndex + index]);
102
109
  sheet.rowMetadata.splice(referenceRowIndex, 0, ...newRowMetaData);
103
110
  }
104
- if (sheet.basicFilter) {
111
+ if (sheet.basicFilter &&
112
+ isInsideColumnBand(sheet.basicFilter.range)) {
105
113
  // Check if basicFilter needs to be moved
106
114
  if (sheet.basicFilter.range.startRowIndex >= referenceRowIndex) {
107
115
  moveFilterView(sheet.basicFilter, numRows, Direction.Down);
@@ -1 +1 @@
1
- {"version":3,"file":"update-sheet.d.ts","sourceRoot":"","sources":["../../../interface/update-sheet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,QAAQ,EACR,aAAa,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAMjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI;IAClE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5D,iBAAiB,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACnE,aAAa,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC,CAAC;IACzE,aAAa,CAAC,EAAE,CACd,MAAM,EAAE,cAAc,KACnB,CAAC,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC,EAAE,CAAC;IAC/C,aAAa,IAAI,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,qGAQ9D,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,MACf,SAAS,MAAM,EAAE,WAAW,OAAO,CAAC,CAAC,CAAC,kBAkF/C,CAAC"}
1
+ {"version":3,"file":"update-sheet.d.ts","sourceRoot":"","sources":["../../../interface/update-sheet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,QAAQ,EACR,aAAa,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAMjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI;IAClE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5D,iBAAiB,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACnE,aAAa,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC,CAAC;IACzE,aAAa,CAAC,EAAE,CACd,MAAM,EAAE,cAAc,KACnB,CAAC,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC,EAAE,CAAC;IAC/C,aAAa,IAAI,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,qGAQ9D,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,MACf,SAAS,MAAM,EAAE,WAAW,OAAO,CAAC,CAAC,CAAC,kBAsF/C,CAAC"}
@@ -3,12 +3,15 @@ import { updateFormulaSheetReferences } from "../api/rename-sheet";
3
3
  import { sanitizeSheetSpecTitle } from "../helpers/sheet-title";
4
4
  export const updateSheet = ({ sheets, locale, onChangeSheets, onChangeSheetData, getGraphNodes, getPrecedents, createHistory, }) => {
5
5
  return (sheetId, sheetSpec) => {
6
- const saveHistory = createHistory();
7
6
  const sanitizedSheetSpec = sanitizeSheetSpecTitle(sheetSpec);
8
7
  const curSheet = sheets?.find((sheet) => sheet.sheetId === sheetId);
9
8
  if (!curSheet) {
10
9
  return undefined;
11
10
  }
11
+ if (Object.keys(sanitizedSheetSpec).length === 0) {
12
+ return curSheet;
13
+ }
14
+ const saveHistory = createHistory();
12
15
  const oldTitle = curSheet.title;
13
16
  const newTitle = sanitizedSheetSpec.title;
14
17
  const isTitleChanging = newTitle !== undefined && newTitle !== oldTitle && oldTitle !== undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rowsncolumns/spreadsheet-state",
3
- "version": "28.0.67",
3
+ "version": "28.0.68",
4
4
  "main": "./dist/cjs/index.js",
5
5
  "module": "./dist/esm/index.js",
6
6
  "types": "./dist/esm/index.d.ts",
@@ -52,33 +52,33 @@
52
52
  "dist"
53
53
  ],
54
54
  "peerDependencies": {
55
- "@rowsncolumns/calculator": ">=7.2.29",
56
- "@rowsncolumns/common-types": ">=5.2.29",
57
- "@rowsncolumns/dag": ">=7.2.29",
58
- "@rowsncolumns/fast-formula-parser": "6.2.32",
59
- "@rowsncolumns/grid": ">=13.2.32",
60
- "@rowsncolumns/icons": ">=7.2.30",
55
+ "@rowsncolumns/calculator": ">=7.2.30",
56
+ "@rowsncolumns/common-types": ">=5.2.30",
57
+ "@rowsncolumns/dag": ">=7.2.30",
58
+ "@rowsncolumns/fast-formula-parser": "6.2.33",
59
+ "@rowsncolumns/grid": ">=13.2.33",
60
+ "@rowsncolumns/icons": ">=7.2.31",
61
61
  "@rowsncolumns/spreadsheet": ">=10.2.68",
62
- "@rowsncolumns/toolkit": ">=24.4.1",
63
- "@rowsncolumns/ui": ">=15.0.38",
64
- "@rowsncolumns/utils": ">=9.2.36"
62
+ "@rowsncolumns/toolkit": ">=24.4.2",
63
+ "@rowsncolumns/ui": ">=15.0.39",
64
+ "@rowsncolumns/utils": ">=9.2.37"
65
65
  },
66
66
  "devDependencies": {
67
- "@rowsncolumns/calculator": ">=7.2.29",
68
- "@rowsncolumns/common-types": ">=5.2.29",
69
- "@rowsncolumns/dag": ">=7.2.29",
70
- "@rowsncolumns/fast-formula-parser": ">=6.2.32",
71
- "@rowsncolumns/grid": ">=13.2.32",
72
- "@rowsncolumns/icons": ">=7.2.30",
67
+ "@rowsncolumns/calculator": ">=7.2.30",
68
+ "@rowsncolumns/common-types": ">=5.2.30",
69
+ "@rowsncolumns/dag": ">=7.2.30",
70
+ "@rowsncolumns/fast-formula-parser": ">=6.2.33",
71
+ "@rowsncolumns/grid": ">=13.2.33",
72
+ "@rowsncolumns/icons": ">=7.2.31",
73
73
  "@rowsncolumns/spreadsheet": ">=10.2.68",
74
- "@rowsncolumns/ui": ">=15.0.38",
75
- "@rowsncolumns/utils": ">=9.2.36"
74
+ "@rowsncolumns/ui": ">=15.0.39",
75
+ "@rowsncolumns/utils": ">=9.2.37"
76
76
  },
77
77
  "dependencies": {
78
- "@rowsncolumns/calculation-worker": ">=9.0.29",
79
- "@rowsncolumns/date-parser": ">=12.0.30",
80
- "@rowsncolumns/functions": ">=14.0.29",
81
- "@rowsncolumns/toolkit": ">=24.4.1",
78
+ "@rowsncolumns/calculation-worker": ">=9.0.30",
79
+ "@rowsncolumns/date-parser": ">=12.0.31",
80
+ "@rowsncolumns/functions": ">=14.0.30",
81
+ "@rowsncolumns/toolkit": ">=24.4.2",
82
82
  "formik": "^2.4.6",
83
83
  "immer": "^10.1.1",
84
84
  "jotai": "^2.12.4",