@rowsncolumns/spreadsheet-state 28.0.73 → 28.0.75
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/advanced-filter.d.ts +72 -0
- package/dist/cjs/api/advanced-filter.d.ts.map +1 -0
- package/dist/cjs/api/advanced-filter.js +0 -0
- package/dist/cjs/api/datatype.d.ts.map +1 -1
- package/dist/cjs/api/datatype.js +8 -1
- package/dist/cjs/api/fill-series-spec.d.ts +35 -0
- package/dist/cjs/api/fill-series-spec.d.ts.map +1 -0
- package/dist/cjs/api/fill-series-spec.js +164 -0
- package/dist/cjs/api/fill.d.ts +95 -3
- package/dist/cjs/api/fill.d.ts.map +1 -1
- package/dist/cjs/api/fill.js +1186 -418
- package/dist/cjs/api/goal-seek.d.ts +29 -0
- package/dist/cjs/api/goal-seek.d.ts.map +1 -0
- package/dist/cjs/api/goal-seek.js +131 -0
- package/dist/cjs/api/immer-utils.d.ts.map +1 -1
- package/dist/cjs/api/immer-utils.js +21 -15
- package/dist/cjs/api/intl.d.ts.map +1 -1
- package/dist/cjs/api/paint-format.d.ts +55 -0
- package/dist/cjs/api/paint-format.d.ts.map +1 -0
- package/dist/cjs/api/paint-format.js +174 -0
- package/dist/cjs/api/split-text.d.ts +12 -0
- package/dist/cjs/api/split-text.d.ts.map +1 -1
- package/dist/cjs/api/split-text.js +41 -0
- package/dist/cjs/api/subtotal.d.ts +85 -0
- package/dist/cjs/api/subtotal.d.ts.map +1 -0
- package/dist/cjs/api/subtotal.js +250 -0
- package/dist/cjs/commands.d.ts +19 -1
- package/dist/cjs/commands.d.ts.map +1 -1
- package/dist/cjs/components/editors/data-validation-rule-editor.d.ts.map +1 -1
- package/dist/cjs/components/editors/data-validation-rule-editor.js +83 -16
- package/dist/cjs/hooks/use-calculation-worker.d.ts.map +1 -1
- package/dist/cjs/hooks/use-calculation-worker.js +1 -0
- package/dist/cjs/hooks/use-calculation.d.ts +1 -1
- package/dist/cjs/hooks/use-on-advanced-filter.d.ts +21 -0
- package/dist/cjs/hooks/use-on-advanced-filter.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-advanced-filter.js +42 -0
- package/dist/cjs/hooks/use-on-fill.d.ts +13 -4
- package/dist/cjs/hooks/use-on-fill.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-fill.js +28 -7
- package/dist/cjs/hooks/use-on-goal-seek.d.ts +30 -0
- package/dist/cjs/hooks/use-on-goal-seek.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-goal-seek.js +140 -0
- package/dist/cjs/hooks/use-on-import-excel.d.ts +10 -1
- package/dist/cjs/hooks/use-on-import-excel.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-import-excel.js +8 -4
- package/dist/cjs/hooks/use-on-merge-unmerge-cells.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-merge-unmerge-cells.js +53 -34
- package/dist/cjs/hooks/use-on-subtotal.d.ts +26 -0
- package/dist/cjs/hooks/use-on-subtotal.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-subtotal.js +53 -0
- package/dist/cjs/hooks/use-paint-format.d.ts +19 -3
- package/dist/cjs/hooks/use-paint-format.d.ts.map +1 -1
- package/dist/cjs/hooks/use-paint-format.js +89 -32
- package/dist/cjs/hooks/use-sheet-properties.d.ts +2 -0
- package/dist/cjs/hooks/use-sheet-properties.d.ts.map +1 -1
- package/dist/cjs/hooks/use-sheet-properties.js +4 -0
- package/dist/cjs/hooks/use-split-text-to-columns.d.ts +2 -1
- package/dist/cjs/hooks/use-split-text-to-columns.d.ts.map +1 -1
- package/dist/cjs/hooks/use-split-text-to-columns.js +3 -2
- package/dist/cjs/hooks/use-spreadsheet-state.d.ts +50 -36
- package/dist/cjs/hooks/use-spreadsheet-state.d.ts.map +1 -1
- package/dist/cjs/hooks/use-spreadsheet-state.js +109 -19
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +8 -0
- package/dist/cjs/interface/apply-fill.d.ts +3 -3
- package/dist/cjs/interface/apply-fill.d.ts.map +1 -1
- package/dist/cjs/interface/apply-fill.js +100 -53
- package/dist/cjs/interface/change-batch-stream.d.ts.map +1 -1
- package/dist/cjs/interface/change-batch-stream.js +12 -6
- package/dist/cjs/interface/change-batch.d.ts.map +1 -1
- package/dist/cjs/interface/change-batch.js +17 -9
- package/dist/cjs/interface/change-formatting.d.ts.map +1 -1
- package/dist/cjs/interface/change-formatting.js +30 -11
- package/dist/cjs/interface/split-text.d.ts +2 -1
- package/dist/cjs/interface/split-text.d.ts.map +1 -1
- package/dist/cjs/interface/split-text.js +7 -3
- package/dist/cjs/interface/spreadsheet-interface.d.ts +1 -1
- package/dist/cjs/interface/spreadsheet-interface.d.ts.map +1 -1
- package/dist/cjs/interface/spreadsheet-interface.js +2 -2
- package/dist/cjs/sheet-cell.d.ts.map +1 -1
- package/dist/cjs/sheet-cell.js +37 -6
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/api/advanced-filter.d.ts +72 -0
- package/dist/esm/api/advanced-filter.d.ts.map +1 -0
- package/dist/esm/api/advanced-filter.js +0 -0
- package/dist/esm/api/datatype.d.ts.map +1 -1
- package/dist/esm/api/datatype.js +8 -1
- package/dist/esm/api/fill-series-spec.d.ts +35 -0
- package/dist/esm/api/fill-series-spec.d.ts.map +1 -0
- package/dist/esm/api/fill-series-spec.js +160 -0
- package/dist/esm/api/fill.d.ts +95 -3
- package/dist/esm/api/fill.d.ts.map +1 -1
- package/dist/esm/api/fill.js +1158 -418
- package/dist/esm/api/goal-seek.d.ts +29 -0
- package/dist/esm/api/goal-seek.d.ts.map +1 -0
- package/dist/esm/api/goal-seek.js +108 -0
- package/dist/esm/api/immer-utils.d.ts.map +1 -1
- package/dist/esm/api/immer-utils.js +21 -15
- package/dist/esm/api/intl.d.ts.map +1 -1
- package/dist/esm/api/paint-format.d.ts +55 -0
- package/dist/esm/api/paint-format.d.ts.map +1 -0
- package/dist/esm/api/paint-format.js +122 -0
- package/dist/esm/api/split-text.d.ts +12 -0
- package/dist/esm/api/split-text.d.ts.map +1 -1
- package/dist/esm/api/split-text.js +28 -0
- package/dist/esm/api/subtotal.d.ts +85 -0
- package/dist/esm/api/subtotal.d.ts.map +1 -0
- package/dist/esm/api/subtotal.js +181 -0
- package/dist/esm/commands.d.ts +19 -1
- package/dist/esm/commands.d.ts.map +1 -1
- package/dist/esm/components/editors/data-validation-rule-editor.d.ts.map +1 -1
- package/dist/esm/components/editors/data-validation-rule-editor.js +52 -4
- package/dist/esm/hooks/use-calculation-worker.d.ts.map +1 -1
- package/dist/esm/hooks/use-calculation-worker.js +1 -0
- package/dist/esm/hooks/use-calculation.d.ts +1 -1
- package/dist/esm/hooks/use-on-advanced-filter.d.ts +21 -0
- package/dist/esm/hooks/use-on-advanced-filter.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-advanced-filter.js +41 -0
- package/dist/esm/hooks/use-on-fill.d.ts +13 -4
- package/dist/esm/hooks/use-on-fill.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-fill.js +24 -4
- package/dist/esm/hooks/use-on-goal-seek.d.ts +30 -0
- package/dist/esm/hooks/use-on-goal-seek.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-goal-seek.js +82 -0
- package/dist/esm/hooks/use-on-import-excel.d.ts +10 -1
- package/dist/esm/hooks/use-on-import-excel.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-import-excel.js +8 -4
- package/dist/esm/hooks/use-on-merge-unmerge-cells.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-merge-unmerge-cells.js +13 -13
- package/dist/esm/hooks/use-on-subtotal.d.ts +26 -0
- package/dist/esm/hooks/use-on-subtotal.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-subtotal.js +48 -0
- package/dist/esm/hooks/use-paint-format.d.ts +19 -3
- package/dist/esm/hooks/use-paint-format.d.ts.map +1 -1
- package/dist/esm/hooks/use-paint-format.js +75 -30
- package/dist/esm/hooks/use-sheet-properties.d.ts +2 -0
- package/dist/esm/hooks/use-sheet-properties.d.ts.map +1 -1
- package/dist/esm/hooks/use-sheet-properties.js +4 -0
- package/dist/esm/hooks/use-split-text-to-columns.d.ts +2 -1
- package/dist/esm/hooks/use-split-text-to-columns.d.ts.map +1 -1
- package/dist/esm/hooks/use-split-text-to-columns.js +3 -2
- package/dist/esm/hooks/use-spreadsheet-state.d.ts +50 -36
- package/dist/esm/hooks/use-spreadsheet-state.d.ts.map +1 -1
- package/dist/esm/hooks/use-spreadsheet-state.js +100 -17
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +8 -0
- package/dist/esm/interface/apply-fill.d.ts +3 -3
- package/dist/esm/interface/apply-fill.d.ts.map +1 -1
- package/dist/esm/interface/apply-fill.js +93 -48
- package/dist/esm/interface/change-batch-stream.d.ts.map +1 -1
- package/dist/esm/interface/change-batch-stream.js +12 -6
- package/dist/esm/interface/change-batch.d.ts.map +1 -1
- package/dist/esm/interface/change-batch.js +15 -9
- package/dist/esm/interface/change-formatting.d.ts.map +1 -1
- package/dist/esm/interface/change-formatting.js +28 -11
- package/dist/esm/interface/split-text.d.ts +2 -1
- package/dist/esm/interface/split-text.d.ts.map +1 -1
- package/dist/esm/interface/split-text.js +6 -3
- package/dist/esm/interface/spreadsheet-interface.d.ts +1 -1
- package/dist/esm/interface/spreadsheet-interface.d.ts.map +1 -1
- package/dist/esm/interface/spreadsheet-interface.js +2 -2
- package/dist/esm/sheet-cell.d.ts.map +1 -1
- package/dist/esm/sheet-cell.js +37 -6
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +20 -20
|
@@ -19,6 +19,7 @@ export type UseOnImportExcelFileProps<T extends CellData, S extends Sheet> = {
|
|
|
19
19
|
onChangeCellXfs?: UseSpreadsheetProps<T, S>["onChangeCellXfs"];
|
|
20
20
|
onRequestFonts: UseSpreadsheetProps<T, S>["onRequestFonts"];
|
|
21
21
|
onChangeTheme: UseSpreadsheetProps<T, S>["onChangeTheme"];
|
|
22
|
+
onChangeNamedCellStyles?: UseSpreadsheetProps<T, S>["onChangeNamedCellStyles"];
|
|
22
23
|
onChangeSlicers: UseSpreadsheetProps<T, S>["onChangeSlicers"];
|
|
23
24
|
/**
|
|
24
25
|
* Phase D1 — pivot table import. Worker emits
|
|
@@ -39,7 +40,15 @@ export type UseOnImportExcelFileProps<T extends CellData, S extends Sheet> = {
|
|
|
39
40
|
export type ExcelImportResponse = {
|
|
40
41
|
requiresRecalc?: boolean;
|
|
41
42
|
iterativeCalculationOptions?: IterativeCalculationOptions;
|
|
43
|
+
/**
|
|
44
|
+
* Date system of the imported cell data — always the 1900 system: a
|
|
45
|
+
* `date1904` workbook is converted on import (date-formatted serials
|
|
46
|
+
* shifted by 1462 days), so this can be wired straight to
|
|
47
|
+
* `SheetCell.setUse1904` / `createExcelFile({ use1904 })`.
|
|
48
|
+
*/
|
|
42
49
|
use1904?: boolean;
|
|
50
|
+
/** The source workbook declared the 1904 date system (informational). */
|
|
51
|
+
sourceUse1904?: boolean;
|
|
43
52
|
success: boolean;
|
|
44
53
|
isPasswordProtected?: boolean;
|
|
45
54
|
};
|
|
@@ -59,7 +68,7 @@ export type ExcelImportOptions = {
|
|
|
59
68
|
*/
|
|
60
69
|
prompt?: UseSpreadsheetProps["onPrompt"];
|
|
61
70
|
};
|
|
62
|
-
export declare const useOnImportExcelFile: <T extends CellData, S extends Sheet>({ enableExcelImportHistory, onChangeSheetData, onChangeSheets, onChangeTables, onChangeEmbeds, onChangeNamedRanges, onChangeSharedStrings, onChangeConditionalFormats, onChangeDataValidations, onChangeCellXfs, onChangeCharts, onRequestFonts, onChangeTheme, onCreateDataValidationRule, onClearHistory, onChangeHistory, onChangeSlicers, onChangePivotTables, evaluateConditionalFormatting, evaluateDataValidations, clearRangeCache, onConfirm, onPrompt, }: UseOnImportExcelFileProps<T, S>) => {
|
|
71
|
+
export declare const useOnImportExcelFile: <T extends CellData, S extends Sheet>({ enableExcelImportHistory, onChangeSheetData, onChangeSheets, onChangeTables, onChangeEmbeds, onChangeNamedRanges, onChangeSharedStrings, onChangeConditionalFormats, onChangeDataValidations, onChangeCellXfs, onChangeCharts, onRequestFonts, onChangeTheme, onChangeNamedCellStyles, onCreateDataValidationRule, onClearHistory, onChangeHistory, onChangeSlicers, onChangePivotTables, evaluateConditionalFormatting, evaluateDataValidations, clearRangeCache, onConfirm, onPrompt, }: UseOnImportExcelFileProps<T, S>) => {
|
|
63
72
|
importExcelFile: (file: File | ArrayBuffer, options?: ExcelImportOptions) => Promise<ExcelImportResponse>;
|
|
64
73
|
isImportingExcelfile: boolean;
|
|
65
74
|
generateStatePatches: () => Promise<SpreadsheetPatch>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-on-import-excel.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-import-excel.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"use-on-import-excel.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-import-excel.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import { useCallback, useState } from "react";
|
|
|
7
7
|
import { SheetCell } from "../sheet-cell";
|
|
8
8
|
var TIMEOUT_FONT_LOAD = 5000;
|
|
9
9
|
export var useOnImportExcelFile = function (_a) {
|
|
10
|
-
var _b = _a.enableExcelImportHistory, enableExcelImportHistory = _b === void 0 ? false : _b, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeEmbeds = _a.onChangeEmbeds, onChangeNamedRanges = _a.onChangeNamedRanges, onChangeSharedStrings = _a.onChangeSharedStrings, onChangeConditionalFormats = _a.onChangeConditionalFormats, onChangeDataValidations = _a.onChangeDataValidations, onChangeCellXfs = _a.onChangeCellXfs, onChangeCharts = _a.onChangeCharts, onRequestFonts = _a.onRequestFonts, onChangeTheme = _a.onChangeTheme, onCreateDataValidationRule = _a.onCreateDataValidationRule, onClearHistory = _a.onClearHistory, onChangeHistory = _a.onChangeHistory, onChangeSlicers = _a.onChangeSlicers, onChangePivotTables = _a.onChangePivotTables, evaluateConditionalFormatting = _a.evaluateConditionalFormatting, evaluateDataValidations = _a.evaluateDataValidations, clearRangeCache = _a.clearRangeCache, onConfirm = _a.onConfirm, onPrompt = _a.onPrompt;
|
|
10
|
+
var _b = _a.enableExcelImportHistory, enableExcelImportHistory = _b === void 0 ? false : _b, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeEmbeds = _a.onChangeEmbeds, onChangeNamedRanges = _a.onChangeNamedRanges, onChangeSharedStrings = _a.onChangeSharedStrings, onChangeConditionalFormats = _a.onChangeConditionalFormats, onChangeDataValidations = _a.onChangeDataValidations, onChangeCellXfs = _a.onChangeCellXfs, onChangeCharts = _a.onChangeCharts, onRequestFonts = _a.onRequestFonts, onChangeTheme = _a.onChangeTheme, onChangeNamedCellStyles = _a.onChangeNamedCellStyles, onCreateDataValidationRule = _a.onCreateDataValidationRule, onClearHistory = _a.onClearHistory, onChangeHistory = _a.onChangeHistory, onChangeSlicers = _a.onChangeSlicers, onChangePivotTables = _a.onChangePivotTables, evaluateConditionalFormatting = _a.evaluateConditionalFormatting, evaluateDataValidations = _a.evaluateDataValidations, clearRangeCache = _a.clearRangeCache, onConfirm = _a.onConfirm, onPrompt = _a.onPrompt;
|
|
11
11
|
var _c = __read(useState(false), 2), isImportingExcelfile = _c[0], setIsImporting = _c[1];
|
|
12
12
|
var _d = __read(useLoadingIndicator(), 2), showLoader = _d[0], hideLoader = _d[1];
|
|
13
13
|
var getViewPort = useGetViewPort();
|
|
@@ -247,7 +247,7 @@ export var useOnImportExcelFile = function (_a) {
|
|
|
247
247
|
var _a = createExcelImportWorker(file, minRowCount, minColumnCount), observable = _a.observable, sendMessage = _a.sendMessage;
|
|
248
248
|
var requiresRecalc = false;
|
|
249
249
|
var iterativeCalculationOptions;
|
|
250
|
-
var
|
|
250
|
+
var sourceUse1904 = false;
|
|
251
251
|
var isPromptingForPassword = false;
|
|
252
252
|
var isPasswordProtected = false;
|
|
253
253
|
// Set import
|
|
@@ -381,7 +381,7 @@ export var useOnImportExcelFile = function (_a) {
|
|
|
381
381
|
requiresRecalc = (_m = response.requiresRecalc) !== null && _m !== void 0 ? _m : false;
|
|
382
382
|
iterativeCalculationOptions =
|
|
383
383
|
(_o = response.iterativeCalculationOptions) !== null && _o !== void 0 ? _o : undefined;
|
|
384
|
-
|
|
384
|
+
sourceUse1904 = (_p = response.use1904) !== null && _p !== void 0 ? _p : false;
|
|
385
385
|
}
|
|
386
386
|
if (response.responseType === ResponseType.GET_SHEETS_SUCCESS) {
|
|
387
387
|
onChangeSheets(response.sheets);
|
|
@@ -393,6 +393,9 @@ export var useOnImportExcelFile = function (_a) {
|
|
|
393
393
|
if (response.theme) {
|
|
394
394
|
onChangeTheme === null || onChangeTheme === void 0 ? void 0 : onChangeTheme(response.theme);
|
|
395
395
|
}
|
|
396
|
+
if (response.namedCellStyles) {
|
|
397
|
+
onChangeNamedCellStyles === null || onChangeNamedCellStyles === void 0 ? void 0 : onChangeNamedCellStyles(response.namedCellStyles);
|
|
398
|
+
}
|
|
396
399
|
}
|
|
397
400
|
if (response.responseType === ResponseType.GET_CONDITIONAL_FORMATTING) {
|
|
398
401
|
showLoader("Loading conditional formatting");
|
|
@@ -644,7 +647,8 @@ export var useOnImportExcelFile = function (_a) {
|
|
|
644
647
|
resolve({
|
|
645
648
|
requiresRecalc: requiresRecalc,
|
|
646
649
|
iterativeCalculationOptions: iterativeCalculationOptions,
|
|
647
|
-
use1904:
|
|
650
|
+
use1904: false,
|
|
651
|
+
sourceUse1904: sourceUse1904,
|
|
648
652
|
success: true,
|
|
649
653
|
isPasswordProtected: isPasswordProtected,
|
|
650
654
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-on-merge-unmerge-cells.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-merge-unmerge-cells.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,SAAS,EAGV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,QAAQ,EACR,mBAAmB,EACnB,KAAK,EACN,MAAM,2BAA2B,CAAC;AAOnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAO9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,KAAK,2BAA2B,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC5B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzD,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC/D,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5D,kBAAkB,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC3E,kBAAkB,EAAE,CAAC,SAAS,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC9D,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,iKAWzE,2BAA2B,CAAC,CAAC,EAAE,CAAC,CAAC;4BASrB,MAAM,cACH,aAAa,cACb,aAAa,CAAC,mBAAmB,CAAC,EAAE,cACpC,SAAS;
|
|
1
|
+
{"version":3,"file":"use-on-merge-unmerge-cells.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-merge-unmerge-cells.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,SAAS,EAGV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,QAAQ,EACR,mBAAmB,EACnB,KAAK,EACN,MAAM,2BAA2B,CAAC;AAOnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAO9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,KAAK,2BAA2B,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC5B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzD,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC/D,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5D,kBAAkB,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC3E,kBAAkB,EAAE,CAAC,SAAS,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC9D,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,iKAWzE,2BAA2B,CAAC,CAAC,EAAE,CAAC,CAAC;4BASrB,MAAM,cACH,aAAa,cACb,aAAa,CAAC,mBAAmB,CAAC,EAAE,cACpC,SAAS;8BAqRZ,MAAM,cACH,aAAa,qBACN,aAAa,CAAC,mBAAmB,CAAC,EAAE;CA4I5D,CAAC"}
|
|
@@ -17,6 +17,7 @@ export var useOnMergeUnMergeCells = function (_a) {
|
|
|
17
17
|
* Merge cells
|
|
18
18
|
*/
|
|
19
19
|
var onMergeCells = useCallback(function (sheetId, activeCell, selections, direction) {
|
|
20
|
+
var e_1, _a;
|
|
20
21
|
if (!selections.length) {
|
|
21
22
|
error("Merge Cells: Could not merge cells without selections");
|
|
22
23
|
return;
|
|
@@ -45,6 +46,23 @@ export var useOnMergeUnMergeCells = function (_a) {
|
|
|
45
46
|
newMerges.push(__assign(__assign({}, range), { startColumnIndex: columnIndex, endColumnIndex: columnIndex }));
|
|
46
47
|
}
|
|
47
48
|
}
|
|
49
|
+
else if (selections.length > 1) {
|
|
50
|
+
try {
|
|
51
|
+
// A multi-area selection merges each area on its own (Excel's Merge & Center on a
|
|
52
|
+
// Ctrl-selection). The format painter tiles a source block's merges through this path.
|
|
53
|
+
for (var selections_1 = __values(selections), selections_1_1 = selections_1.next(); !selections_1_1.done; selections_1_1 = selections_1.next()) {
|
|
54
|
+
var sel = selections_1_1.value;
|
|
55
|
+
newMerges.push(sel.range);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
59
|
+
finally {
|
|
60
|
+
try {
|
|
61
|
+
if (selections_1_1 && !selections_1_1.done && (_a = selections_1.return)) _a.call(selections_1);
|
|
62
|
+
}
|
|
63
|
+
finally { if (e_1) throw e_1.error; }
|
|
64
|
+
}
|
|
65
|
+
}
|
|
48
66
|
else {
|
|
49
67
|
newMerges.push(range);
|
|
50
68
|
}
|
|
@@ -82,8 +100,8 @@ export var useOnMergeUnMergeCells = function (_a) {
|
|
|
82
100
|
// Update sheet data
|
|
83
101
|
onChangeSheetData === null || onChangeSheetData === void 0 ? void 0 : onChangeSheetData(function (prevSheetData) {
|
|
84
102
|
var _a = __read(produceWithPatches(prevSheetData, function (draft) {
|
|
85
|
-
var
|
|
86
|
-
var
|
|
103
|
+
var e_2, _a, e_3, _b, e_4, _c, e_5, _d;
|
|
104
|
+
var _e, _f, _g, _h, _j, _k, _l, _m;
|
|
87
105
|
// First, check if we need to move content to master cells
|
|
88
106
|
// If master cell is empty, find first cell with content and copy it
|
|
89
107
|
var checkCell = new SheetCell();
|
|
@@ -95,7 +113,7 @@ export var useOnMergeUnMergeCells = function (_a) {
|
|
|
95
113
|
columnIndex: mergeRange.startColumnIndex,
|
|
96
114
|
};
|
|
97
115
|
// Check if master cell has content
|
|
98
|
-
var masterCellData = (
|
|
116
|
+
var masterCellData = (_g = (_f = (_e = draft[sheetId]) === null || _e === void 0 ? void 0 : _e[masterCell.rowIndex]) === null || _f === void 0 ? void 0 : _f.values) === null || _g === void 0 ? void 0 : _g[masterCell.columnIndex];
|
|
99
117
|
// Use current() to get plain data from Immer draft
|
|
100
118
|
var plainMasterCellData = masterCellData
|
|
101
119
|
? current(masterCellData)
|
|
@@ -111,14 +129,14 @@ export var useOnMergeUnMergeCells = function (_a) {
|
|
|
111
129
|
// If master cell is empty, find first cell with content and copy it
|
|
112
130
|
if (!masterHasContent) {
|
|
113
131
|
try {
|
|
114
|
-
for (var
|
|
115
|
-
var
|
|
132
|
+
for (var _o = (e_3 = void 0, __values(iterateCellsInRange(mergeRange))), _p = _o.next(); !_p.done; _p = _o.next()) {
|
|
133
|
+
var _q = __read(_p.value, 2), rowIndex = _q[0], columnIndex = _q[1];
|
|
116
134
|
// Skip the master cell itself
|
|
117
135
|
if (rowIndex === masterCell.rowIndex &&
|
|
118
136
|
columnIndex === masterCell.columnIndex) {
|
|
119
137
|
continue;
|
|
120
138
|
}
|
|
121
|
-
var cellData = (
|
|
139
|
+
var cellData = (_k = (_j = (_h = draft[sheetId]) === null || _h === void 0 ? void 0 : _h[rowIndex]) === null || _j === void 0 ? void 0 : _j.values) === null || _k === void 0 ? void 0 : _k[columnIndex];
|
|
122
140
|
// Use current() to get plain data from Immer draft
|
|
123
141
|
var plainCellData = cellData ? current(cellData) : cellData;
|
|
124
142
|
// Check if cell has content
|
|
@@ -137,50 +155,51 @@ export var useOnMergeUnMergeCells = function (_a) {
|
|
|
137
155
|
}
|
|
138
156
|
}
|
|
139
157
|
}
|
|
140
|
-
catch (
|
|
158
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
141
159
|
finally {
|
|
142
160
|
try {
|
|
143
|
-
if (
|
|
161
|
+
if (_p && !_p.done && (_b = _o.return)) _b.call(_o);
|
|
144
162
|
}
|
|
145
|
-
finally { if (
|
|
163
|
+
finally { if (e_3) throw e_3.error; }
|
|
146
164
|
}
|
|
147
165
|
}
|
|
148
166
|
}
|
|
149
167
|
}
|
|
150
|
-
catch (
|
|
168
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
151
169
|
finally {
|
|
152
170
|
try {
|
|
153
171
|
if (newMerges_1_1 && !newMerges_1_1.done && (_a = newMerges_1.return)) _a.call(newMerges_1);
|
|
154
172
|
}
|
|
155
|
-
finally { if (
|
|
173
|
+
finally { if (e_2) throw e_2.error; }
|
|
156
174
|
}
|
|
157
175
|
// Keep track of master cells
|
|
158
176
|
// Merging cells only keeps the upper-left value and discards other values.
|
|
159
177
|
var masterCells = new Set();
|
|
160
|
-
|
|
161
|
-
for (var
|
|
162
|
-
|
|
178
|
+
try {
|
|
179
|
+
for (var newMerges_2 = __values(newMerges), newMerges_2_1 = newMerges_2.next(); !newMerges_2_1.done; newMerges_2_1 = newMerges_2.next()) {
|
|
180
|
+
var merge = newMerges_2_1.value;
|
|
181
|
+
masterCells.add(cellIdentifier(merge.startRowIndex, merge.startColumnIndex));
|
|
163
182
|
}
|
|
164
183
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
184
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
185
|
+
finally {
|
|
186
|
+
try {
|
|
187
|
+
if (newMerges_2_1 && !newMerges_2_1.done && (_c = newMerges_2.return)) _c.call(newMerges_2);
|
|
168
188
|
}
|
|
169
|
-
|
|
170
|
-
else {
|
|
171
|
-
masterCells.add(cellIdentifier(range.startRowIndex, range.startColumnIndex));
|
|
189
|
+
finally { if (e_4) throw e_4.error; }
|
|
172
190
|
}
|
|
173
191
|
// Create a cell
|
|
174
192
|
var sheetCell = new SheetCell();
|
|
193
|
+
var mergedCells = newMerges.flatMap(function (merge) { return __spreadArray([], __read(iterateCellsInRange(merge)), false); });
|
|
175
194
|
try {
|
|
176
|
-
for (var
|
|
177
|
-
var
|
|
195
|
+
for (var mergedCells_1 = __values(mergedCells), mergedCells_1_1 = mergedCells_1.next(); !mergedCells_1_1.done; mergedCells_1_1 = mergedCells_1.next()) {
|
|
196
|
+
var _r = __read(mergedCells_1_1.value, 2), rowIndex = _r[0], columnIndex = _r[1];
|
|
178
197
|
var cellId = cellIdentifier(rowIndex, columnIndex);
|
|
179
198
|
if (masterCells.has(cellId)) {
|
|
180
199
|
continue;
|
|
181
200
|
}
|
|
182
201
|
var currentSheet = createSheetDraft(draft, sheetId, rowIndex);
|
|
183
|
-
sheetCell.assign(sheetId, { rowIndex: rowIndex, columnIndex: columnIndex }, (
|
|
202
|
+
sheetCell.assign(sheetId, { rowIndex: rowIndex, columnIndex: columnIndex }, (_m = (_l = draft[sheetId][rowIndex]) === null || _l === void 0 ? void 0 : _l.values) === null || _m === void 0 ? void 0 : _m[columnIndex], { locale: locale, sharedStringRegistry: sharedStringRegistry, cellXfsRegistry: cellXfsRegistry });
|
|
184
203
|
// Clear values
|
|
185
204
|
sheetCell.setUserEnteredValue(undefined);
|
|
186
205
|
sheetCell.setEffectiveValue(undefined);
|
|
@@ -200,12 +219,12 @@ export var useOnMergeUnMergeCells = function (_a) {
|
|
|
200
219
|
});
|
|
201
220
|
}
|
|
202
221
|
}
|
|
203
|
-
catch (
|
|
222
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
204
223
|
finally {
|
|
205
224
|
try {
|
|
206
|
-
if (
|
|
225
|
+
if (mergedCells_1_1 && !mergedCells_1_1.done && (_d = mergedCells_1.return)) _d.call(mergedCells_1);
|
|
207
226
|
}
|
|
208
|
-
finally { if (
|
|
227
|
+
finally { if (e_5) throw e_5.error; }
|
|
209
228
|
}
|
|
210
229
|
}), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
|
|
211
230
|
// Update history
|
|
@@ -275,7 +294,7 @@ export var useOnMergeUnMergeCells = function (_a) {
|
|
|
275
294
|
if (activeMerges) {
|
|
276
295
|
onChangeSheetData === null || onChangeSheetData === void 0 ? void 0 : onChangeSheetData(function (prevSheetData) {
|
|
277
296
|
var _a = __read(produceWithPatches(prevSheetData, function (draft) {
|
|
278
|
-
var
|
|
297
|
+
var e_6, _a, e_7, _b;
|
|
279
298
|
var _c, _d;
|
|
280
299
|
try {
|
|
281
300
|
for (var activeMerges_1 = __values(activeMerges), activeMerges_1_1 = activeMerges_1.next(); !activeMerges_1_1.done; activeMerges_1_1 = activeMerges_1.next()) {
|
|
@@ -288,7 +307,7 @@ export var useOnMergeUnMergeCells = function (_a) {
|
|
|
288
307
|
// Create a cell
|
|
289
308
|
var sheetCell = new SheetCell();
|
|
290
309
|
try {
|
|
291
|
-
for (var _e = (
|
|
310
|
+
for (var _e = (e_7 = void 0, __values(iterateCellsInRange(range))), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
292
311
|
var _g = __read(_f.value, 2), rowIndex = _g[0], columnIndex = _g[1];
|
|
293
312
|
if (isEqualCells({ rowIndex: rowIndex, columnIndex: columnIndex }, topRightCell)) {
|
|
294
313
|
continue;
|
|
@@ -314,21 +333,21 @@ export var useOnMergeUnMergeCells = function (_a) {
|
|
|
314
333
|
});
|
|
315
334
|
}
|
|
316
335
|
}
|
|
317
|
-
catch (
|
|
336
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
318
337
|
finally {
|
|
319
338
|
try {
|
|
320
339
|
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
321
340
|
}
|
|
322
|
-
finally { if (
|
|
341
|
+
finally { if (e_7) throw e_7.error; }
|
|
323
342
|
}
|
|
324
343
|
}
|
|
325
344
|
}
|
|
326
|
-
catch (
|
|
345
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
327
346
|
finally {
|
|
328
347
|
try {
|
|
329
348
|
if (activeMerges_1_1 && !activeMerges_1_1.done && (_a = activeMerges_1.return)) _a.call(activeMerges_1);
|
|
330
349
|
}
|
|
331
|
-
finally { if (
|
|
350
|
+
finally { if (e_6) throw e_6.error; }
|
|
332
351
|
}
|
|
333
352
|
}), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
|
|
334
353
|
// Update history
|
|
@@ -340,8 +359,8 @@ export var useOnMergeUnMergeCells = function (_a) {
|
|
|
340
359
|
});
|
|
341
360
|
// Clear selections
|
|
342
361
|
// const newSelections = currentSelections
|
|
343
|
-
var
|
|
344
|
-
onChangeSelections === null || onChangeSelections === void 0 ? void 0 : onChangeSelections(sheetId,
|
|
362
|
+
var selections_2 = activeMerges.map(function (range) { return ({ range: range }); });
|
|
363
|
+
onChangeSelections === null || onChangeSelections === void 0 ? void 0 : onChangeSelections(sheetId, selections_2);
|
|
345
364
|
}
|
|
346
365
|
onCommand === null || onCommand === void 0 ? void 0 : onCommand({
|
|
347
366
|
command: "unmerge-cells",
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { GridRange } from "@rowsncolumns/common-types";
|
|
2
|
+
import { type SubtotalOptions, type SubtotalPlan, type SubtotalPlanExecutor } from "../api/subtotal";
|
|
3
|
+
import type { useSheetProperties } from "./use-sheet-properties";
|
|
4
|
+
export type { SubtotalOptions, SubtotalPlan };
|
|
5
|
+
export type UseOnSubtotalProps = {
|
|
6
|
+
getEffectiveValue: ReturnType<typeof useSheetProperties>["getEffectiveValue"];
|
|
7
|
+
getFormattedValue: ReturnType<typeof useSheetProperties>["getFormattedValue"];
|
|
8
|
+
getFormulaValue: ReturnType<typeof useSheetProperties>["getFormulaValue"];
|
|
9
|
+
getRowOutlineLevel: ReturnType<typeof useSheetProperties>["getRowOutlineLevel"];
|
|
10
|
+
onDeleteRow: SubtotalPlanExecutor["onDeleteRow"];
|
|
11
|
+
onInsertRow: SubtotalPlanExecutor["onInsertRow"];
|
|
12
|
+
onChangeBatch: (sheetId: number, ranges: GridRange, values: (string | null)[][]) => void;
|
|
13
|
+
onGroupRows: SubtotalPlanExecutor["onGroupRows"];
|
|
14
|
+
onUngroupRows: SubtotalPlanExecutor["onUngroupRows"];
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Excel's Data → Outline → Subtotal, composed over the existing row
|
|
18
|
+
* insert / batch write / row grouping callbacks so both engines execute it
|
|
19
|
+
* through the same streamed commands (see `planSubtotals` for the layout).
|
|
20
|
+
* Groups on the DISPLAYED value of the group column (Excel compares what the
|
|
21
|
+
* cells show). "Replace current subtotals" also resets the range's outline
|
|
22
|
+
* before regrouping, so re-applying keeps Excel's three levels. Returns the
|
|
23
|
+
* applied plan, or `undefined` when the range is protected or has no data rows.
|
|
24
|
+
*/
|
|
25
|
+
export declare const useOnSubtotal: ({ getEffectiveValue, getFormattedValue, getFormulaValue, getRowOutlineLevel, onDeleteRow, onInsertRow, onChangeBatch, onGroupRows, onUngroupRows, }: UseOnSubtotalProps) => (sheetId: number, options: SubtotalOptions) => SubtotalPlan | undefined;
|
|
26
|
+
//# sourceMappingURL=use-on-subtotal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-on-subtotal.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-subtotal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAG5D,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EAC1B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC;AAE9C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,iBAAiB,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC9E,iBAAiB,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC9E,eAAe,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC1E,kBAAkB,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAChF,WAAW,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;IACjD,WAAW,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;IACjD,aAAa,EAAE,CACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,KACxB,IAAI,CAAC;IACV,WAAW,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;IACjD,aAAa,EAAE,oBAAoB,CAAC,eAAe,CAAC,CAAC;CACtD,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GAAI,qJAU3B,kBAAkB,eAIP,MAAM,WAAW,eAAe,KAAG,YAAY,GAAG,SAoC/D,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { useCallback } from "react";
|
|
2
|
+
import { applySubtotalPlan, planSubtotals, } from "../api/subtotal";
|
|
3
|
+
import { useCanEditCellRange } from "./use-can-edit-cellrange";
|
|
4
|
+
/**
|
|
5
|
+
* Excel's Data → Outline → Subtotal, composed over the existing row
|
|
6
|
+
* insert / batch write / row grouping callbacks so both engines execute it
|
|
7
|
+
* through the same streamed commands (see `planSubtotals` for the layout).
|
|
8
|
+
* Groups on the DISPLAYED value of the group column (Excel compares what the
|
|
9
|
+
* cells show). "Replace current subtotals" also resets the range's outline
|
|
10
|
+
* before regrouping, so re-applying keeps Excel's three levels. Returns the
|
|
11
|
+
* applied plan, or `undefined` when the range is protected or has no data rows.
|
|
12
|
+
*/
|
|
13
|
+
export var useOnSubtotal = function (_a) {
|
|
14
|
+
var getEffectiveValue = _a.getEffectiveValue, getFormattedValue = _a.getFormattedValue, getFormulaValue = _a.getFormulaValue, getRowOutlineLevel = _a.getRowOutlineLevel, onDeleteRow = _a.onDeleteRow, onInsertRow = _a.onInsertRow, onChangeBatch = _a.onChangeBatch, onGroupRows = _a.onGroupRows, onUngroupRows = _a.onUngroupRows;
|
|
15
|
+
var canEditCellRange = useCanEditCellRange();
|
|
16
|
+
return useCallback(function (sheetId, options) {
|
|
17
|
+
if (!canEditCellRange(sheetId, options.range)) {
|
|
18
|
+
console.debug("This range is protected, users cannot edit this cell range.");
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
var plan = planSubtotals(options, {
|
|
22
|
+
getValue: function (rowIndex, columnIndex) {
|
|
23
|
+
var _a;
|
|
24
|
+
return (_a = getFormattedValue(sheetId, rowIndex, columnIndex)) !== null && _a !== void 0 ? _a : getEffectiveValue(sheetId, rowIndex, columnIndex);
|
|
25
|
+
},
|
|
26
|
+
getFormula: function (rowIndex, columnIndex) {
|
|
27
|
+
return getFormulaValue(sheetId, rowIndex, columnIndex);
|
|
28
|
+
},
|
|
29
|
+
getOutlineLevel: function (rowIndex) { return getRowOutlineLevel(sheetId, rowIndex); },
|
|
30
|
+
});
|
|
31
|
+
if (!plan)
|
|
32
|
+
return undefined;
|
|
33
|
+
applySubtotalPlan(sheetId, plan, {
|
|
34
|
+
onDeleteRow: onDeleteRow,
|
|
35
|
+
onInsertRow: onInsertRow,
|
|
36
|
+
onChangeBatch: onChangeBatch,
|
|
37
|
+
onGroupRows: onGroupRows,
|
|
38
|
+
onUngroupRows: onUngroupRows,
|
|
39
|
+
});
|
|
40
|
+
return plan;
|
|
41
|
+
}, [
|
|
42
|
+
canEditCellRange,
|
|
43
|
+
getEffectiveValue,
|
|
44
|
+
getFormattedValue,
|
|
45
|
+
getFormulaValue,
|
|
46
|
+
getRowOutlineLevel,
|
|
47
|
+
onDeleteRow,
|
|
48
|
+
onInsertRow,
|
|
49
|
+
onChangeBatch,
|
|
50
|
+
onGroupRows,
|
|
51
|
+
onUngroupRows,
|
|
52
|
+
]);
|
|
53
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { CellInterface, SelectionArea } from "@rowsncolumns/common-types";
|
|
2
|
-
import type { SelectionAttributes, SheetRange } from "@rowsncolumns/spreadsheet";
|
|
1
|
+
import type { CellInterface, GridRange, SelectionArea } from "@rowsncolumns/common-types";
|
|
2
|
+
import type { CellFormat, SelectionAttributes, SheetRange } from "@rowsncolumns/spreadsheet";
|
|
3
3
|
import type { useOnChangeFormatting } from "./use-on-change-formatting";
|
|
4
4
|
import type { useSheetProperties } from "./use-sheet-properties";
|
|
5
5
|
import type { useSheetState } from "./use-sheet-state";
|
|
@@ -7,8 +7,24 @@ export type UsePaintFormatProps = {
|
|
|
7
7
|
onChangeSelections: ReturnType<typeof useSheetState>["onChangeSelections"];
|
|
8
8
|
onChangeFormatting: ReturnType<typeof useOnChangeFormatting>["onChangeFormatting"];
|
|
9
9
|
getEffectiveFormat: ReturnType<typeof useSheetProperties>["getEffectiveFormat"];
|
|
10
|
+
/**
|
|
11
|
+
* The merges of a sheet (absolute ranges). When provided, the painter carries the merges that
|
|
12
|
+
* lie fully inside the source block and tiles them onto the target (Sheets / Excel parity).
|
|
13
|
+
*/
|
|
14
|
+
getMerges?: (sheetId: number) => GridRange[] | null | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Replace the merges inside `targetRange` with `merges` (already tiled, absolute). The
|
|
17
|
+
* spreadsheet-state wiring unmerges the target then merges each range in one step.
|
|
18
|
+
*/
|
|
19
|
+
onPaintMerges?: (sheetId: number, activeCell: CellInterface, targetRange: GridRange, merges: GridRange[]) => void;
|
|
20
|
+
/**
|
|
21
|
+
* The table-banding / alternating-colour formats the grid paints on a sheet (keyed by
|
|
22
|
+
* `cellIdentifier`). When provided, the captured pattern carries the visible stripe colours as
|
|
23
|
+
* static fills, like Sheets.
|
|
24
|
+
*/
|
|
25
|
+
getBandedCells?: (sheetId: number) => Map<string, CellFormat> | undefined;
|
|
10
26
|
};
|
|
11
|
-
export declare const usePaintFormat: ({ getEffectiveFormat, onChangeFormatting, onChangeSelections, }: UsePaintFormatProps) => {
|
|
27
|
+
export declare const usePaintFormat: ({ getEffectiveFormat, onChangeFormatting, onChangeSelections, getMerges, onPaintMerges, getBandedCells, }: UsePaintFormatProps) => {
|
|
12
28
|
isPaintFormatActive: boolean;
|
|
13
29
|
onSavePaintFormat: (sheetId: number, activeCell: CellInterface, selections: SelectionArea<SelectionAttributes>[]) => void;
|
|
14
30
|
onApplyPaintFormat: (sheetId: number, activeCell: CellInterface, selections?: SelectionArea<SelectionAttributes>[]) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-paint-format.d.ts","sourceRoot":"","sources":["../../../hooks/use-paint-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"use-paint-format.d.ts","sourceRoot":"","sources":["../../../hooks/use-paint-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACd,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACV,UAAU,EACV,mBAAmB,EACnB,UAAU,EACX,MAAM,2BAA2B,CAAC;AAYnC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,mBAAmB,GAAG;IAChC,kBAAkB,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC3E,kBAAkB,EAAE,UAAU,CAC5B,OAAO,qBAAqB,CAC7B,CAAC,oBAAoB,CAAC,CAAC;IACxB,kBAAkB,EAAE,UAAU,CAC5B,OAAO,kBAAkB,CAC1B,CAAC,oBAAoB,CAAC,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IAChE;;;OAGG;IACH,aAAa,CAAC,EAAE,CACd,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,aAAa,EACzB,WAAW,EAAE,SAAS,EACtB,MAAM,EAAE,SAAS,EAAE,KAChB,IAAI,CAAC;IACV;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,SAAS,CAAC;CAC3E,CAAC;AAaF,eAAO,MAAM,cAAc,GAAI,2GAO5B,mBAAmB;;iCA8EP,MAAM,cACH,aAAa,cACb,aAAa,CAAC,mBAAmB,CAAC,EAAE;kCAevC,MAAM,cACH,aAAa,eACZ,aAAa,CAAC,mBAAmB,CAAC,EAAE;oCAkF/B,UAAU,oBAIV,UAAU;CAmCjC,CAAC"}
|
|
@@ -1,39 +1,92 @@
|
|
|
1
1
|
import { __assign, __read, __values } from "tslib";
|
|
2
|
-
import { selectionFromActiveCell } from "@rowsncolumns/grid";
|
|
3
2
|
import { useCallback, useState } from "react";
|
|
3
|
+
import { collectPaintMerges, getBandedCellFormat, layerBandedFormat, paintSourceForActiveCell, spreadMergeAnchorFormats, tilePaintMerges, } from "../api/paint-format";
|
|
4
4
|
// A paint-format target spanning at least this many rows/cols is a header-click
|
|
5
5
|
// full-column/row selection, not an intentional drag — bound it to the pattern.
|
|
6
6
|
var UNBOUNDED_PAINT_SPAN = 10000;
|
|
7
|
+
var EMPTY_PATTERN = {
|
|
8
|
+
formats: [],
|
|
9
|
+
merges: [],
|
|
10
|
+
rows: 0,
|
|
11
|
+
cols: 0,
|
|
12
|
+
};
|
|
7
13
|
export var usePaintFormat = function (_a) {
|
|
8
|
-
var getEffectiveFormat = _a.getEffectiveFormat, onChangeFormatting = _a.onChangeFormatting, onChangeSelections = _a.onChangeSelections;
|
|
9
|
-
var _b = __read(useState(
|
|
10
|
-
var
|
|
14
|
+
var getEffectiveFormat = _a.getEffectiveFormat, onChangeFormatting = _a.onChangeFormatting, onChangeSelections = _a.onChangeSelections, getMerges = _a.getMerges, onPaintMerges = _a.onPaintMerges, getBandedCells = _a.getBandedCells;
|
|
15
|
+
var _b = __read(useState(EMPTY_PATTERN), 2), pattern = _b[0], setPattern = _b[1];
|
|
16
|
+
var paintFormats = pattern.formats;
|
|
17
|
+
/**
|
|
18
|
+
* Capture the visible look of `range`: the effective format of every cell layered over the
|
|
19
|
+
* table stripe the grid paints beneath it, plus the merges fully inside the range.
|
|
20
|
+
*/
|
|
21
|
+
var capturePattern = useCallback(function (sheetId, ranges) {
|
|
11
22
|
var e_1, _a;
|
|
12
|
-
var
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
var paintFormats = [];
|
|
23
|
+
var _b, _c;
|
|
24
|
+
var bandedCells = getBandedCells === null || getBandedCells === void 0 ? void 0 : getBandedCells(sheetId);
|
|
25
|
+
var formats = [];
|
|
16
26
|
try {
|
|
17
|
-
for (var
|
|
18
|
-
var
|
|
19
|
-
for (var rowIndex =
|
|
27
|
+
for (var ranges_1 = __values(ranges), ranges_1_1 = ranges_1.next(); !ranges_1_1.done; ranges_1_1 = ranges_1.next()) {
|
|
28
|
+
var range = ranges_1_1.value;
|
|
29
|
+
for (var rowIndex = range.startRowIndex; rowIndex <= range.endRowIndex; rowIndex++) {
|
|
20
30
|
var rowFormats = [];
|
|
21
|
-
for (var columnIndex =
|
|
22
|
-
rowFormats.push(getEffectiveFormat(sheetId, rowIndex, columnIndex));
|
|
31
|
+
for (var columnIndex = range.startColumnIndex; columnIndex <= range.endColumnIndex; columnIndex++) {
|
|
32
|
+
rowFormats.push(layerBandedFormat(getEffectiveFormat(sheetId, rowIndex, columnIndex), getBandedCellFormat(bandedCells, rowIndex, columnIndex)));
|
|
23
33
|
}
|
|
24
|
-
|
|
34
|
+
formats.push(rowFormats);
|
|
25
35
|
}
|
|
26
36
|
}
|
|
27
37
|
}
|
|
28
38
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
29
39
|
finally {
|
|
30
40
|
try {
|
|
31
|
-
if (
|
|
41
|
+
if (ranges_1_1 && !ranges_1_1.done && (_a = ranges_1.return)) _a.call(ranges_1);
|
|
32
42
|
}
|
|
33
43
|
finally { if (e_1) throw e_1.error; }
|
|
34
44
|
}
|
|
35
|
-
|
|
36
|
-
|
|
45
|
+
// Merges travel with a single-block source only; a multi-area capture has no single
|
|
46
|
+
// tiling origin (the format rows are stacked, as before).
|
|
47
|
+
var source = ranges.length === 1 ? ranges[0] : undefined;
|
|
48
|
+
var merges = source
|
|
49
|
+
? collectPaintMerges(getMerges === null || getMerges === void 0 ? void 0 : getMerges(sheetId), source)
|
|
50
|
+
: [];
|
|
51
|
+
// Excel keeps a merged area's style on every constituent cell; the grid paints the anchor's.
|
|
52
|
+
spreadMergeAnchorFormats(formats, merges);
|
|
53
|
+
return {
|
|
54
|
+
formats: formats,
|
|
55
|
+
merges: merges,
|
|
56
|
+
rows: formats.length,
|
|
57
|
+
cols: (_c = (_b = formats[0]) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0,
|
|
58
|
+
};
|
|
59
|
+
}, [getEffectiveFormat, getBandedCells, getMerges]);
|
|
60
|
+
/**
|
|
61
|
+
* Replace the target's merges with the pattern's, tiled with the pattern's period.
|
|
62
|
+
*/
|
|
63
|
+
var applyPatternMerges = useCallback(function (sheetId, activeCell, current, targets) {
|
|
64
|
+
var e_2, _a;
|
|
65
|
+
if (!current.merges.length || !onPaintMerges)
|
|
66
|
+
return;
|
|
67
|
+
try {
|
|
68
|
+
for (var targets_1 = __values(targets), targets_1_1 = targets_1.next(); !targets_1_1.done; targets_1_1 = targets_1.next()) {
|
|
69
|
+
var target = targets_1_1.value;
|
|
70
|
+
var tiled = tilePaintMerges(current.merges, current.rows, current.cols, target);
|
|
71
|
+
onPaintMerges(sheetId, activeCell, target, tiled);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
75
|
+
finally {
|
|
76
|
+
try {
|
|
77
|
+
if (targets_1_1 && !targets_1_1.done && (_a = targets_1.return)) _a.call(targets_1);
|
|
78
|
+
}
|
|
79
|
+
finally { if (e_2) throw e_2.error; }
|
|
80
|
+
}
|
|
81
|
+
}, [onPaintMerges]);
|
|
82
|
+
var onSavePaintFormat = useCallback(function (sheetId, activeCell, selections) {
|
|
83
|
+
// A plain click on a merged cell arms the painter with the anchor and NO selection (the
|
|
84
|
+
// grid clears the list) — Excel treats that click as the whole merged area.
|
|
85
|
+
var ranges = selections.length
|
|
86
|
+
? selections.map(function (sel) { return sel.range; })
|
|
87
|
+
: [paintSourceForActiveCell(getMerges === null || getMerges === void 0 ? void 0 : getMerges(sheetId), activeCell)];
|
|
88
|
+
setPattern(capturePattern(sheetId, ranges));
|
|
89
|
+
}, [capturePattern, getMerges]);
|
|
37
90
|
// Applies a saved paintFormat
|
|
38
91
|
var onApplyPaintFormat = useCallback(function (sheetId, activeCell, selections) {
|
|
39
92
|
/**
|
|
@@ -46,9 +99,7 @@ export var usePaintFormat = function (_a) {
|
|
|
46
99
|
// header-click full-column/row targets are bounded to the pattern so a paint
|
|
47
100
|
// never enumerates an entire 1M-row column.
|
|
48
101
|
var clampEnd = function (start, end, span) {
|
|
49
|
-
return end - start >= UNBOUNDED_PAINT_SPAN
|
|
50
|
-
? Math.min(end, start + span)
|
|
51
|
-
: end;
|
|
102
|
+
return end - start >= UNBOUNDED_PAINT_SPAN ? Math.min(end, start + span) : end;
|
|
52
103
|
};
|
|
53
104
|
var newSelections = (selections === null || selections === void 0 ? void 0 : selections.length)
|
|
54
105
|
? selections.map(function (sel) { return (__assign(__assign({}, sel), { range: __assign(__assign({}, sel.range), { endRowIndex: clampEnd(sel.range.startRowIndex, sel.range.endRowIndex, rowSpan), endColumnIndex: clampEnd(sel.range.startColumnIndex, sel.range.endColumnIndex, colSpan) }) })); })
|
|
@@ -66,6 +117,8 @@ export var usePaintFormat = function (_a) {
|
|
|
66
117
|
onChangeFormatting(sheetId, activeCell, newSelections, paintFormats, {
|
|
67
118
|
replace: true,
|
|
68
119
|
});
|
|
120
|
+
// Merges tile with the same period as the formats.
|
|
121
|
+
applyPatternMerges(sheetId, activeCell, pattern, newSelections.map(function (sel) { return sel.range; }));
|
|
69
122
|
/**
|
|
70
123
|
* User has made selections. lets preserve it
|
|
71
124
|
*/
|
|
@@ -73,8 +126,14 @@ export var usePaintFormat = function (_a) {
|
|
|
73
126
|
onChangeSelections === null || onChangeSelections === void 0 ? void 0 : onChangeSelections(sheetId, newSelections);
|
|
74
127
|
}
|
|
75
128
|
// Reset paintformats
|
|
76
|
-
|
|
77
|
-
}, [
|
|
129
|
+
setPattern(EMPTY_PATTERN);
|
|
130
|
+
}, [
|
|
131
|
+
pattern,
|
|
132
|
+
paintFormats,
|
|
133
|
+
onChangeSelections,
|
|
134
|
+
onChangeFormatting,
|
|
135
|
+
applyPatternMerges,
|
|
136
|
+
]);
|
|
78
137
|
/**
|
|
79
138
|
* Copy formatting from a source range to target range
|
|
80
139
|
*/
|
|
@@ -87,24 +146,22 @@ export var usePaintFormat = function (_a) {
|
|
|
87
146
|
* Sheet range to paste to
|
|
88
147
|
*/
|
|
89
148
|
targetSheetRange) {
|
|
90
|
-
var
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
for (var columnIndex = sourceSheetRange.startColumnIndex; columnIndex <= sourceSheetRange.endColumnIndex; columnIndex++) {
|
|
94
|
-
rowFormats.push(getEffectiveFormat(sourceSheetRange.sheetId, rowIndex, columnIndex));
|
|
95
|
-
}
|
|
96
|
-
paintFormats.push(rowFormats);
|
|
97
|
-
}
|
|
149
|
+
var captured = capturePattern(sourceSheetRange.sheetId, [
|
|
150
|
+
sourceSheetRange,
|
|
151
|
+
]);
|
|
98
152
|
// Apply
|
|
99
153
|
var activeCell = {
|
|
100
154
|
rowIndex: targetSheetRange.startRowIndex,
|
|
101
155
|
columnIndex: targetSheetRange.startColumnIndex,
|
|
102
156
|
};
|
|
103
157
|
// Copy formatting
|
|
104
|
-
onChangeFormatting(targetSheetRange.sheetId, activeCell, [{ range: targetSheetRange }],
|
|
158
|
+
onChangeFormatting(targetSheetRange.sheetId, activeCell, [{ range: targetSheetRange }], captured.formats, {
|
|
105
159
|
replace: true,
|
|
106
160
|
});
|
|
107
|
-
|
|
161
|
+
applyPatternMerges(targetSheetRange.sheetId, activeCell, captured, [
|
|
162
|
+
targetSheetRange,
|
|
163
|
+
]);
|
|
164
|
+
}, [onChangeFormatting, capturePattern, applyPatternMerges]);
|
|
108
165
|
return {
|
|
109
166
|
isPaintFormatActive: paintFormats.length > 0,
|
|
110
167
|
onSavePaintFormat: onSavePaintFormat,
|