@affino/datagrid-vue 0.3.30 → 0.3.32
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/app/useDataGridAppClipboard.d.ts +8 -3
- package/dist/app/useDataGridAppClipboard.d.ts.map +1 -1
- package/dist/app/useDataGridAppClipboard.js +99 -21
- package/dist/app/useDataGridAppFill.d.ts +28 -3
- package/dist/app/useDataGridAppFill.d.ts.map +1 -1
- package/dist/app/useDataGridAppFill.js +25 -3
- package/dist/app/useDataGridAppInlineEditing.d.ts +11 -1
- package/dist/app/useDataGridAppInlineEditing.d.ts.map +1 -1
- package/dist/app/useDataGridAppInlineEditing.js +44 -3
- package/dist/app/useDataGridAppIntentHistory.d.ts.map +1 -1
- package/dist/app/useDataGridAppIntentHistory.js +24 -3
- package/dist/app/useDataGridAppInteractionController.d.ts +105 -5
- package/dist/app/useDataGridAppInteractionController.d.ts.map +1 -1
- package/dist/app/useDataGridAppInteractionController.js +479 -39
- package/dist/app/useDataGridAppViewport.d.ts +4 -1
- package/dist/app/useDataGridAppViewport.d.ts.map +1 -1
- package/dist/app/useDataGridAppViewport.js +39 -4
- package/dist/composables/useDataGridRuntime.d.ts +1 -1
- package/dist/composables/useDataGridRuntime.d.ts.map +1 -1
- package/dist/composables/useDataGridRuntime.js +41 -1
- package/package.json +3 -3
|
@@ -24,16 +24,18 @@ export interface UseDataGridAppClipboardOptions<TRow, TSnapshot> {
|
|
|
24
24
|
} | null;
|
|
25
25
|
applySelectionRange: (range: DataGridCopyRange) => void;
|
|
26
26
|
clearCellSelection: () => void;
|
|
27
|
+
setLastAction?: (message: string) => void;
|
|
27
28
|
captureRowsSnapshot: () => TSnapshot;
|
|
28
29
|
captureRowsSnapshotForRowIds?: (rowIds: readonly (string | number)[]) => TSnapshot;
|
|
29
|
-
recordEditTransaction: (beforeSnapshot: TSnapshot) => void;
|
|
30
|
+
recordEditTransaction: (beforeSnapshot: TSnapshot, afterSnapshotOverride?: TSnapshot, label?: string) => void;
|
|
30
31
|
readCell: (row: DataGridRowNode<TRow>, columnKey: string) => string;
|
|
31
32
|
readClipboardCell?: (row: DataGridRowNode<TRow>, columnKey: string) => string;
|
|
32
33
|
isCellEditable: (row: DataGridRowNode<TRow>, rowIndex: number, columnKey: string, columnIndex: number) => boolean;
|
|
33
34
|
syncViewport: () => void;
|
|
34
35
|
applyClipboardEdits?: (range: DataGridCopyRange, matrix: string[][], options?: {
|
|
35
36
|
recordHistory?: boolean;
|
|
36
|
-
|
|
37
|
+
recordHistoryLabel?: string;
|
|
38
|
+
}) => number | Promise<number>;
|
|
37
39
|
buildFillMatrixFromRange?: (range: DataGridCopyRange) => string[][];
|
|
38
40
|
buildPasteSpecialMatrixFromRange?: (range: DataGridCopyRange, mode: Exclude<DataGridAppPasteMode, "default">) => string[][];
|
|
39
41
|
}
|
|
@@ -44,7 +46,8 @@ export interface UseDataGridAppClipboardResult {
|
|
|
44
46
|
normalizeClipboardRange: (range: DataGridCopyRange) => DataGridCopyRange | null;
|
|
45
47
|
applyClipboardEdits: (range: DataGridCopyRange, matrix: string[][], options?: {
|
|
46
48
|
recordHistory?: boolean;
|
|
47
|
-
|
|
49
|
+
recordHistoryLabel?: string;
|
|
50
|
+
}) => number | Promise<number>;
|
|
48
51
|
rangesEqual: (left: DataGridCopyRange | null, right: DataGridCopyRange | null) => boolean;
|
|
49
52
|
buildFillMatrixFromRange: (range: DataGridCopyRange) => string[][];
|
|
50
53
|
clearPendingClipboardOperation: (clearSelection: boolean, clearBufferedClipboardPayload?: boolean) => boolean;
|
|
@@ -54,5 +57,7 @@ export interface UseDataGridAppClipboardResult {
|
|
|
54
57
|
isCellInPendingClipboardRange: (rowOffset: number, columnIndex: number) => boolean;
|
|
55
58
|
isCellOnPendingClipboardEdge: (rowOffset: number, columnIndex: number, edge: DataGridAppPendingClipboardEdge) => boolean;
|
|
56
59
|
}
|
|
60
|
+
export declare function isDataGridRowMissingOrPlaceholder<TRow>(row: DataGridRowNode<TRow> | null | undefined): boolean;
|
|
61
|
+
export declare function resolveMissingRowIndexInRange<TRow>(getBodyRowAtIndex: (rowIndex: number) => DataGridRowNode<TRow> | null | undefined, range: DataGridCopyRange): number | null;
|
|
57
62
|
export declare function useDataGridAppClipboard<TRow, TSnapshot>(options: UseDataGridAppClipboardOptions<TRow, TSnapshot>): UseDataGridAppClipboardResult;
|
|
58
63
|
//# sourceMappingURL=useDataGridAppClipboard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataGridAppClipboard.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppClipboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,KAAK,EAA0B,sBAAsB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,MAAM,MAAM,oCAAoC,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAA;AAC1E,MAAM,MAAM,+BAA+B,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAA;AACjF,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,QAAQ,CAAA;AAEvD,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,oBAAoB,CAAA;CAC5B;AAED,MAAM,WAAW,8BAA8B,CAAC,IAAI,EAAE,SAAS;IAC7D,IAAI,EAAE,GAAG,CAAC,eAAe,CAAC,CAAA;IAC1B,OAAO,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,mBAAmB,CAAC,CAAA;IAC1E,wBAAwB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC7E,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACtB,cAAc,EAAE,GAAG,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAAA;IACtD,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC7B,qBAAqB,EAAE,MAAM,iBAAiB,GAAG,IAAI,CAAA;IACrD,sBAAsB,CAAC,EAAE,MAAM,SAAS,iBAAiB,EAAE,CAAA;IAC3D,uBAAuB,EAAE,MAAM;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC/E,mBAAmB,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACvD,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,mBAAmB,EAAE,MAAM,SAAS,CAAA;IACpC,4BAA4B,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,SAAS,CAAA;IAClF,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"useDataGridAppClipboard.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppClipboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
import { ref } from "vue";
|
|
2
2
|
import { useDataGridClipboardBridge, useDataGridCopyRangeHelpers } from "../advanced";
|
|
3
|
+
export function isDataGridRowMissingOrPlaceholder(row) {
|
|
4
|
+
if (!row) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
return row.__placeholder === true;
|
|
8
|
+
}
|
|
9
|
+
export function resolveMissingRowIndexInRange(getBodyRowAtIndex, range) {
|
|
10
|
+
for (let rowIndex = range.startRow; rowIndex <= range.endRow; rowIndex += 1) {
|
|
11
|
+
if (isDataGridRowMissingOrPlaceholder(getBodyRowAtIndex(rowIndex))) {
|
|
12
|
+
return rowIndex;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
3
17
|
export function useDataGridAppClipboard(options) {
|
|
4
18
|
const getBodyRowAtIndex = (rowIndex) => {
|
|
5
19
|
const runtime = options.runtime;
|
|
@@ -43,20 +57,19 @@ export function useDataGridAppClipboard(options) {
|
|
|
43
57
|
getCellValue: (row, columnKey) => (options.readClipboardCell
|
|
44
58
|
? options.readClipboardCell(row, columnKey)
|
|
45
59
|
: options.readCell(row, columnKey)),
|
|
46
|
-
setLastAction:
|
|
60
|
+
setLastAction: message => {
|
|
61
|
+
options.setLastAction?.(message);
|
|
62
|
+
},
|
|
47
63
|
closeContextMenu: () => undefined,
|
|
48
64
|
});
|
|
49
|
-
const
|
|
65
|
+
const collectClipboardEdits = (range, matrix) => {
|
|
50
66
|
const normalized = normalizeClipboardRange(range);
|
|
51
67
|
if (!normalized) {
|
|
52
|
-
return
|
|
68
|
+
return { normalizedRange: null, updates: [] };
|
|
53
69
|
}
|
|
54
70
|
const matrixHeight = Math.max(1, matrix.length);
|
|
55
71
|
const matrixWidth = Math.max(1, matrix[0]?.length ?? 1);
|
|
56
72
|
const editsByRowId = new Map();
|
|
57
|
-
const beforeSnapshot = applyOptions.recordHistory === false
|
|
58
|
-
? null
|
|
59
|
-
: options.captureRowsSnapshot();
|
|
60
73
|
for (let rowIndex = normalized.startRow; rowIndex <= normalized.endRow; rowIndex += 1) {
|
|
61
74
|
const row = options.ensureEditableRowAtIndex?.(rowIndex) ?? getBodyRowAtIndex(rowIndex);
|
|
62
75
|
if (!row || row.rowId == null || row.kind === "group") {
|
|
@@ -78,19 +91,35 @@ export function useDataGridAppClipboard(options) {
|
|
|
78
91
|
editsByRowId.set(row.rowId, current);
|
|
79
92
|
}
|
|
80
93
|
}
|
|
81
|
-
|
|
94
|
+
return {
|
|
95
|
+
normalizedRange: normalized,
|
|
96
|
+
updates: Array.from(editsByRowId.entries(), ([rowId, data]) => ({
|
|
97
|
+
rowId,
|
|
98
|
+
data: data,
|
|
99
|
+
})),
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
const applyClipboardEdits = options.applyClipboardEdits ?? (async (range, matrix, applyOptions = {}) => {
|
|
103
|
+
const { normalizedRange: normalized, updates } = collectClipboardEdits(range, matrix);
|
|
104
|
+
if (!normalized) {
|
|
82
105
|
return 0;
|
|
83
106
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
107
|
+
if (updates.length === 0) {
|
|
108
|
+
return 0;
|
|
109
|
+
}
|
|
110
|
+
const rowIds = Array.from(new Set(updates.map(update => update.rowId)));
|
|
111
|
+
const beforeSnapshot = applyOptions.recordHistory === false
|
|
112
|
+
? null
|
|
113
|
+
: (options.captureRowsSnapshotForRowIds?.(rowIds) ?? options.captureRowsSnapshot());
|
|
114
|
+
const afterSnapshot = beforeSnapshot != null
|
|
115
|
+
? buildAfterEditSnapshot(beforeSnapshot, updates)
|
|
116
|
+
: null;
|
|
117
|
+
await options.runtime.api.rows.applyEdits(updates);
|
|
89
118
|
options.applySelectionRange(normalized);
|
|
90
119
|
if (beforeSnapshot != null) {
|
|
91
|
-
options.recordEditTransaction(beforeSnapshot);
|
|
120
|
+
options.recordEditTransaction(beforeSnapshot, afterSnapshot ?? undefined, applyOptions.recordHistoryLabel);
|
|
92
121
|
}
|
|
93
|
-
return
|
|
122
|
+
return updates.length;
|
|
94
123
|
});
|
|
95
124
|
const rangesEqual = (left, right) => {
|
|
96
125
|
if (!left || !right) {
|
|
@@ -124,6 +153,35 @@ export function useDataGridAppClipboard(options) {
|
|
|
124
153
|
}
|
|
125
154
|
return options.captureRowsSnapshot();
|
|
126
155
|
};
|
|
156
|
+
const buildAfterEditSnapshot = (beforeSnapshot, updates) => {
|
|
157
|
+
if (!beforeSnapshot || typeof beforeSnapshot !== "object") {
|
|
158
|
+
return beforeSnapshot;
|
|
159
|
+
}
|
|
160
|
+
const snapshot = beforeSnapshot;
|
|
161
|
+
if (!Array.isArray(snapshot.rows)) {
|
|
162
|
+
return beforeSnapshot;
|
|
163
|
+
}
|
|
164
|
+
const updatesByRowId = new Map();
|
|
165
|
+
for (const update of updates) {
|
|
166
|
+
updatesByRowId.set(update.rowId, update.data);
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
...beforeSnapshot,
|
|
170
|
+
rows: snapshot.rows.map(entry => {
|
|
171
|
+
const patch = updatesByRowId.get(entry.rowId);
|
|
172
|
+
if (!patch) {
|
|
173
|
+
return entry;
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
...entry,
|
|
177
|
+
row: {
|
|
178
|
+
...entry.row,
|
|
179
|
+
...patch,
|
|
180
|
+
},
|
|
181
|
+
};
|
|
182
|
+
}),
|
|
183
|
+
};
|
|
184
|
+
};
|
|
127
185
|
const buildFillMatrixFromRange = options.buildFillMatrixFromRange ?? ((range) => {
|
|
128
186
|
const matrix = [];
|
|
129
187
|
for (let rowIndex = range.startRow; rowIndex <= range.endRow; rowIndex += 1) {
|
|
@@ -183,6 +241,14 @@ export function useDataGridAppClipboard(options) {
|
|
|
183
241
|
return true;
|
|
184
242
|
};
|
|
185
243
|
const copySelectedCells = async (trigger = "keyboard") => {
|
|
244
|
+
const sourceRange = copyRangeHelpers.resolveCopyRange();
|
|
245
|
+
if (sourceRange) {
|
|
246
|
+
const missingRowIndex = resolveMissingRowIndexInRange(getBodyRowAtIndex, sourceRange);
|
|
247
|
+
if (missingRowIndex != null) {
|
|
248
|
+
options.setLastAction?.("Selected range includes unloaded rows. Load rows or use server export.");
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
186
252
|
return stageClipboardOperation("copy", trigger);
|
|
187
253
|
};
|
|
188
254
|
const pasteSelectedCells = async (trigger = "keyboard", pasteOptions = {}) => {
|
|
@@ -229,21 +295,33 @@ export function useDataGridAppClipboard(options) {
|
|
|
229
295
|
void trigger;
|
|
230
296
|
return true;
|
|
231
297
|
}
|
|
232
|
-
const beforeSnapshot = captureBeforeEditSnapshot(pendingOperation === "cut"
|
|
233
|
-
? [pendingSourceRange, normalizedTargetRange]
|
|
234
|
-
: [normalizedTargetRange]);
|
|
235
298
|
if (pendingOperation === "cut" && pendingSourceRange) {
|
|
236
|
-
|
|
299
|
+
const beforeSnapshot = captureBeforeEditSnapshot([pendingSourceRange, normalizedTargetRange]);
|
|
300
|
+
const sourceClearUpdates = collectClipboardEdits(pendingSourceRange, [[""]]).updates;
|
|
301
|
+
const targetUpdates = collectClipboardEdits(targetRange, matrix).updates;
|
|
302
|
+
await applyClipboardEdits(pendingSourceRange, [[""]], { recordHistory: false });
|
|
303
|
+
const appliedRows = await applyClipboardEdits(targetRange, matrix, { recordHistory: false });
|
|
304
|
+
if (appliedRows <= 0) {
|
|
305
|
+
return false;
|
|
306
|
+
}
|
|
307
|
+
const afterSnapshot = buildAfterEditSnapshot(beforeSnapshot, [
|
|
308
|
+
...sourceClearUpdates,
|
|
309
|
+
...targetUpdates,
|
|
310
|
+
]);
|
|
311
|
+
options.recordEditTransaction(beforeSnapshot, afterSnapshot);
|
|
312
|
+
clearPendingClipboardOperation(false);
|
|
313
|
+
options.applySelectionRange(normalizedTargetRange);
|
|
314
|
+
options.syncViewport();
|
|
315
|
+
void trigger;
|
|
316
|
+
return true;
|
|
237
317
|
}
|
|
238
|
-
const appliedRows = applyClipboardEdits(targetRange, matrix, { recordHistory:
|
|
318
|
+
const appliedRows = await applyClipboardEdits(targetRange, matrix, { recordHistory: true });
|
|
239
319
|
if (appliedRows <= 0) {
|
|
240
320
|
return false;
|
|
241
321
|
}
|
|
242
|
-
options.recordEditTransaction(beforeSnapshot);
|
|
243
322
|
if (pendingOperation !== "none") {
|
|
244
323
|
clearPendingClipboardOperation(false);
|
|
245
324
|
}
|
|
246
|
-
options.applySelectionRange(normalizedTargetRange);
|
|
247
325
|
options.syncViewport();
|
|
248
326
|
void trigger;
|
|
249
327
|
return true;
|
|
@@ -18,14 +18,39 @@ export interface UseDataGridAppFillOptions {
|
|
|
18
18
|
resolveSelectionRange: () => DataGridCopyRange | null;
|
|
19
19
|
rangesEqual: (left: DataGridCopyRange | null, right: DataGridCopyRange | null) => boolean;
|
|
20
20
|
buildFillMatrixFromRange: (range: DataGridCopyRange) => string[][];
|
|
21
|
-
|
|
21
|
+
shouldUseServerFill?: (baseRange: DataGridCopyRange, previewRange: DataGridCopyRange, behavior: DataGridFillBehavior) => boolean;
|
|
22
|
+
commitServerFill?: (request: {
|
|
23
|
+
baseRange: DataGridCopyRange;
|
|
24
|
+
previewRange: DataGridCopyRange;
|
|
25
|
+
behavior: DataGridFillBehavior;
|
|
26
|
+
}) => Promise<{
|
|
27
|
+
operationId: string;
|
|
28
|
+
revision?: string | number | null;
|
|
29
|
+
affectedRange?: DataGridCopyRange | null;
|
|
30
|
+
invalidation?: {
|
|
31
|
+
kind: "range";
|
|
32
|
+
range: DataGridCopyRange;
|
|
33
|
+
reason?: string;
|
|
34
|
+
} | null;
|
|
35
|
+
} | null>;
|
|
36
|
+
applyClipboardEdits: (range: DataGridCopyRange, matrix: string[][], options?: {
|
|
37
|
+
recordHistory?: boolean;
|
|
38
|
+
recordHistoryLabel?: string;
|
|
39
|
+
}) => number | Promise<number>;
|
|
22
40
|
isCellEditableAt: (rowIndex: number, columnIndex: number) => boolean;
|
|
23
41
|
setLastAppliedFillSession: (session: DataGridAppAppliedFillSession | null) => void;
|
|
42
|
+
setLastServerFillSession?: (session: {
|
|
43
|
+
operationId: string;
|
|
44
|
+
revision?: string | number | null;
|
|
45
|
+
affectedRange?: DataGridCopyRange | null;
|
|
46
|
+
behavior: DataGridFillBehavior;
|
|
47
|
+
} | null) => void;
|
|
48
|
+
syncServerFillViewport?: (range?: DataGridCopyRange | null) => void | Promise<void>;
|
|
24
49
|
syncViewport: () => void;
|
|
25
50
|
}
|
|
26
51
|
export interface UseDataGridAppFillResult {
|
|
27
|
-
applyFillPreview: (behavior?: DataGridFillBehavior) => boolean
|
|
28
|
-
applyFillRange: (baseRange: DataGridCopyRange, previewRange: DataGridCopyRange, behavior?: DataGridFillBehavior) => boolean
|
|
52
|
+
applyFillPreview: (behavior?: DataGridFillBehavior) => boolean | Promise<boolean>;
|
|
53
|
+
applyFillRange: (baseRange: DataGridCopyRange, previewRange: DataGridCopyRange, behavior?: DataGridFillBehavior) => boolean | Promise<boolean>;
|
|
29
54
|
isCellInFillPreview: (rowOffset: number, columnIndex: number) => boolean;
|
|
30
55
|
isFillHandleCell: (rowOffset: number, columnIndex: number) => boolean;
|
|
31
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataGridAppFill.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppFill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC9B,OAAO,EACL,KAAK,oBAAoB,EAI1B,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EACL,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,iBAAiB,CAAA;IAC5B,YAAY,EAAE,iBAAiB,CAAA;IAC/B,QAAQ,EAAE,oBAAoB,CAAA;IAC9B,mBAAmB,EAAE,OAAO,CAAA;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,GAAG,CAAC,eAAe,CAAC,CAAA;IAC1B,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC7B,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAC5B,aAAa,EAAE,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAA;IAC5C,gBAAgB,EAAE,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAA;IAC/C,kBAAkB,EAAE,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAA;IACpD,qBAAqB,EAAE,MAAM,iBAAiB,GAAG,IAAI,CAAA;IACrD,WAAW,EAAE,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI,KAAK,OAAO,CAAA;IACzF,wBAAwB,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,MAAM,EAAE,EAAE,CAAA;IAClE,mBAAmB,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"useDataGridAppFill.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppFill.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { buildDataGridFillMatrix, canToggleDataGridFillBehavior, resolveDataGridDefaultFillBehavior, } from "../composables/dataGridFillBehavior";
|
|
2
2
|
import {} from "../advanced";
|
|
3
3
|
export function useDataGridAppFill(options) {
|
|
4
|
-
const applyFillRange = (baseRange, previewRange, behaviorOverride) => {
|
|
4
|
+
const applyFillRange = async (baseRange, previewRange, behaviorOverride) => {
|
|
5
5
|
if (options.rangesEqual(baseRange, previewRange)) {
|
|
6
6
|
return false;
|
|
7
7
|
}
|
|
@@ -16,13 +16,35 @@ export function useDataGridAppFill(options) {
|
|
|
16
16
|
previewRange,
|
|
17
17
|
sourceMatrix,
|
|
18
18
|
});
|
|
19
|
+
const useServerFill = options.shouldUseServerFill?.(baseRange, previewRange, behavior) ?? false;
|
|
20
|
+
if (useServerFill && options.commitServerFill) {
|
|
21
|
+
const committed = await options.commitServerFill({ baseRange, previewRange, behavior });
|
|
22
|
+
if (committed) {
|
|
23
|
+
options.setLastServerFillSession?.({
|
|
24
|
+
operationId: committed.operationId,
|
|
25
|
+
revision: committed.revision,
|
|
26
|
+
affectedRange: committed.affectedRange ?? previewRange,
|
|
27
|
+
behavior,
|
|
28
|
+
});
|
|
29
|
+
if (options.syncServerFillViewport) {
|
|
30
|
+
await options.syncServerFillViewport(committed.invalidation?.range ?? committed.affectedRange ?? previewRange);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
options.syncViewport();
|
|
34
|
+
}
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
19
39
|
const matrix = buildDataGridFillMatrix({
|
|
20
40
|
baseRange,
|
|
21
41
|
previewRange,
|
|
22
42
|
sourceMatrix,
|
|
23
43
|
behavior,
|
|
24
44
|
});
|
|
25
|
-
const appliedRows = options.applyClipboardEdits(previewRange, matrix
|
|
45
|
+
const appliedRows = await options.applyClipboardEdits(previewRange, matrix, {
|
|
46
|
+
recordHistoryLabel: "Fill edit",
|
|
47
|
+
});
|
|
26
48
|
if (appliedRows > 0) {
|
|
27
49
|
options.setLastAppliedFillSession({
|
|
28
50
|
baseRange: { ...baseRange },
|
|
@@ -39,7 +61,7 @@ export function useDataGridAppFill(options) {
|
|
|
39
61
|
}
|
|
40
62
|
return false;
|
|
41
63
|
};
|
|
42
|
-
const applyFillPreview = (behavior) => {
|
|
64
|
+
const applyFillPreview = async (behavior) => {
|
|
43
65
|
const baseRange = options.fillBaseRange.value;
|
|
44
66
|
const previewRange = options.fillPreviewRange.value;
|
|
45
67
|
if (!baseRange || !previewRange) {
|
|
@@ -31,7 +31,17 @@ export interface UseDataGridAppInlineEditingOptions<TRow, TSnapshot> {
|
|
|
31
31
|
isCellEditable: (row: DataGridRowNode<TRow>, rowIndex: number, columnKey: string, columnIndex: number) => boolean;
|
|
32
32
|
captureRowsSnapshot: () => TSnapshot;
|
|
33
33
|
captureRowsSnapshotForRowIds?: (rowIds: readonly (string | number)[]) => TSnapshot;
|
|
34
|
-
recordEditTransaction: (beforeSnapshot: TSnapshot) => void;
|
|
34
|
+
recordEditTransaction: (beforeSnapshot: TSnapshot, afterSnapshotOverride?: TSnapshot, label?: string) => void;
|
|
35
|
+
onCellEdit?: (payload: {
|
|
36
|
+
rowId: string | number;
|
|
37
|
+
columnKey: string;
|
|
38
|
+
oldValue: unknown;
|
|
39
|
+
newValue: unknown;
|
|
40
|
+
patch: {
|
|
41
|
+
rowId: string | number;
|
|
42
|
+
data: Partial<TRow>;
|
|
43
|
+
};
|
|
44
|
+
}) => void;
|
|
35
45
|
}
|
|
36
46
|
export interface UseDataGridAppInlineEditingResult<TRow> {
|
|
37
47
|
editingCell: Ref<DataGridAppEditingCell | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataGridAppInlineEditing.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppInlineEditing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAC7C,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAG/D,UAAU,sBAAsB;IAC9B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB;AAED,KAAK,iCAAiC,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAA;AAElG,UAAU,iCAAiC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,kCAAkC,CAAC,IAAI,EAAE,SAAS;IACjE,IAAI,EAAE,GAAG,CAAC,eAAe,CAAC,CAAA;IAC1B,eAAe,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACxC,cAAc,EAAE,GAAG,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAAA;IACtD,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACtB,OAAO,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,mBAAmB,CAAC,CAAA;IAC1E,wBAAwB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC7E,QAAQ,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAA;IACnE,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAA;IAC5D,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAA;IACxD,kBAAkB,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAA;IAC5D,uBAAuB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;IACxE,cAAc,EAAE,CACd,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,EAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,KAChB,OAAO,CAAA;IACZ,mBAAmB,EAAE,MAAM,SAAS,CAAA;IACpC,4BAA4B,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,SAAS,CAAA;IAClF,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"useDataGridAppInlineEditing.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppInlineEditing.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,27 @@ import { nextTick, ref } from "vue";
|
|
|
2
2
|
import { buildDataGridCellRenderModel, parseDataGridCellDraftValue, } from "@affino/datagrid-core";
|
|
3
3
|
import { restoreDataGridFocus } from "./dataGridFocusRestore";
|
|
4
4
|
export function useDataGridAppInlineEditing(options) {
|
|
5
|
+
const buildAfterSnapshotFromEdit = (beforeSnapshot, rowId, columnKey, nextValue) => {
|
|
6
|
+
if (beforeSnapshot && typeof beforeSnapshot === "object" && Array.isArray(beforeSnapshot.rows)) {
|
|
7
|
+
const snapshot = beforeSnapshot;
|
|
8
|
+
return {
|
|
9
|
+
...beforeSnapshot,
|
|
10
|
+
rows: snapshot.rows.map(entry => {
|
|
11
|
+
if (entry.rowId !== rowId) {
|
|
12
|
+
return entry;
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
...entry,
|
|
16
|
+
row: {
|
|
17
|
+
...entry.row,
|
|
18
|
+
[columnKey]: nextValue,
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
return beforeSnapshot;
|
|
25
|
+
};
|
|
5
26
|
const editingCell = ref(null);
|
|
6
27
|
const editingCellValue = ref("");
|
|
7
28
|
const editingCellInitialFilter = ref("");
|
|
@@ -285,7 +306,7 @@ export function useDataGridAppInlineEditing(options) {
|
|
|
285
306
|
focusInlineEditor();
|
|
286
307
|
return true;
|
|
287
308
|
};
|
|
288
|
-
const commitInlineEdit = (targetOrEvent = "stay") => {
|
|
309
|
+
const commitInlineEdit = async (targetOrEvent = "stay") => {
|
|
289
310
|
const currentEditingCell = editingCell.value;
|
|
290
311
|
if (!currentEditingCell) {
|
|
291
312
|
return;
|
|
@@ -309,6 +330,11 @@ export function useDataGridAppInlineEditing(options) {
|
|
|
309
330
|
}
|
|
310
331
|
const resolvedRowId = rowNode?.rowId ?? currentEditingCell.rowId;
|
|
311
332
|
const columnSnapshot = options.visibleColumns.value.find(column => column.key === currentEditingCell.columnKey);
|
|
333
|
+
const oldValue = rowNode && rowNode.kind !== "group"
|
|
334
|
+
? (columnSnapshot
|
|
335
|
+
? readEditorSourceValue(rowNode, columnSnapshot)
|
|
336
|
+
: rowNode.data[currentEditingCell.columnKey])
|
|
337
|
+
: undefined;
|
|
312
338
|
const parsedValue = columnSnapshot
|
|
313
339
|
? parseDataGridCellDraftValue({
|
|
314
340
|
column: columnSnapshot.column,
|
|
@@ -316,7 +342,10 @@ export function useDataGridAppInlineEditing(options) {
|
|
|
316
342
|
draft: editingCellValue.value,
|
|
317
343
|
})
|
|
318
344
|
: editingCellValue.value;
|
|
319
|
-
|
|
345
|
+
const afterSnapshot = typeof beforeSnapshot !== "undefined"
|
|
346
|
+
? buildAfterSnapshotFromEdit(beforeSnapshot, resolvedRowId, currentEditingCell.columnKey, parsedValue)
|
|
347
|
+
: undefined;
|
|
348
|
+
await options.runtime.api.rows.applyEdits([
|
|
320
349
|
{
|
|
321
350
|
rowId: resolvedRowId,
|
|
322
351
|
data: {
|
|
@@ -324,7 +353,19 @@ export function useDataGridAppInlineEditing(options) {
|
|
|
324
353
|
},
|
|
325
354
|
},
|
|
326
355
|
]);
|
|
327
|
-
options.
|
|
356
|
+
options.onCellEdit?.({
|
|
357
|
+
rowId: resolvedRowId,
|
|
358
|
+
columnKey: currentEditingCell.columnKey,
|
|
359
|
+
oldValue,
|
|
360
|
+
newValue: parsedValue,
|
|
361
|
+
patch: {
|
|
362
|
+
rowId: resolvedRowId,
|
|
363
|
+
data: {
|
|
364
|
+
[currentEditingCell.columnKey]: parsedValue,
|
|
365
|
+
},
|
|
366
|
+
},
|
|
367
|
+
});
|
|
368
|
+
options.recordEditTransaction(beforeSnapshot, afterSnapshot, "Cell edit");
|
|
328
369
|
clearInlineEdit();
|
|
329
370
|
suppressNextBlurCommit.value = false;
|
|
330
371
|
if (target !== "none") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataGridAppIntentHistory.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppIntentHistory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAEjF,MAAM,WAAW,sBAAsB,CAAC,IAAI;IAC1C,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,IAAI,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,CAAC,CAAA;CACnD;AAED,MAAM,WAAW,kCAAkC,CAAC,IAAI;IACtD,OAAO,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,mBAAmB,GAAG,yBAAyB,CAAC,CAAA;IACtG,YAAY,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,CAAA;IACjC,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,iCAAiC,CAAC,IAAI;IACrD,mBAAmB,EAAE,MAAM,sBAAsB,CAAC,IAAI,CAAC,CAAA;IACvD,wBAAwB,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,sBAAsB,CAAC,IAAI,CAAC,CAAA;IAChG,OAAO,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAC7F,OAAO,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAC7F,gBAAgB,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAA;IAC/G,uBAAuB,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAA;IAC7H,OAAO,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;CAC9F;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAC9C,OAAO,EAAE,kCAAkC,CAAC,IAAI,CAAC,GAChD,iCAAiC,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"useDataGridAppIntentHistory.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppIntentHistory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAEjF,MAAM,WAAW,sBAAsB,CAAC,IAAI;IAC1C,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,IAAI,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,CAAC,CAAA;CACnD;AAED,MAAM,WAAW,kCAAkC,CAAC,IAAI;IACtD,OAAO,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,mBAAmB,GAAG,yBAAyB,CAAC,CAAA;IACtG,YAAY,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,CAAA;IACjC,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,iCAAiC,CAAC,IAAI;IACrD,mBAAmB,EAAE,MAAM,sBAAsB,CAAC,IAAI,CAAC,CAAA;IACvD,wBAAwB,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,sBAAsB,CAAC,IAAI,CAAC,CAAA;IAChG,OAAO,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAC7F,OAAO,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAC7F,gBAAgB,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAA;IAC/G,uBAAuB,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAA;IAC7H,OAAO,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;CAC9F;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAC9C,OAAO,EAAE,kCAAkC,CAAC,IAAI,CAAC,GAChD,iCAAiC,CAAC,IAAI,CAAC,CAgIzC"}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { useDataGridIntentHistory } from "../advanced";
|
|
2
2
|
export function useDataGridAppIntentHistory(options) {
|
|
3
|
+
const cloneSnapshot = (snapshot) => ({
|
|
4
|
+
kind: snapshot.kind,
|
|
5
|
+
rows: snapshot.rows.map(entry => ({
|
|
6
|
+
rowId: entry.rowId,
|
|
7
|
+
row: options.cloneRowData(entry.row),
|
|
8
|
+
})),
|
|
9
|
+
});
|
|
3
10
|
const resolveRuntimeRowById = (rowId) => {
|
|
4
11
|
const rowIndex = options.runtime.resolveBodyRowIndexById(rowId);
|
|
5
12
|
if (rowIndex >= 0) {
|
|
@@ -53,7 +60,7 @@ export function useDataGridAppIntentHistory(options) {
|
|
|
53
60
|
applySnapshot: snapshot => {
|
|
54
61
|
if (snapshot.kind === "partial") {
|
|
55
62
|
if (snapshot.rows.length > 0) {
|
|
56
|
-
options.runtime.api.rows.applyEdits(snapshot.rows.map(entry => ({
|
|
63
|
+
return options.runtime.api.rows.applyEdits(snapshot.rows.map(entry => ({
|
|
57
64
|
rowId: entry.rowId,
|
|
58
65
|
data: options.cloneRowData(entry.row),
|
|
59
66
|
})));
|
|
@@ -61,7 +68,21 @@ export function useDataGridAppIntentHistory(options) {
|
|
|
61
68
|
options.syncViewport();
|
|
62
69
|
return;
|
|
63
70
|
}
|
|
64
|
-
options.runtime.api.rows
|
|
71
|
+
const rowsApi = options.runtime.api.rows;
|
|
72
|
+
if (typeof rowsApi.hasDataMutationSupport === "function" && !rowsApi.hasDataMutationSupport()) {
|
|
73
|
+
const rowPatches = snapshot.rows.map(entry => ({
|
|
74
|
+
rowId: entry.rowId,
|
|
75
|
+
data: options.cloneRowData(entry.row),
|
|
76
|
+
}));
|
|
77
|
+
if (rowPatches.length > 0) {
|
|
78
|
+
return Promise.resolve(rowsApi.applyEdits?.(rowPatches)).then(() => {
|
|
79
|
+
options.syncViewport();
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
options.syncViewport();
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
rowsApi.setData?.(snapshot.rows.map((entry, index) => ({
|
|
65
86
|
rowId: entry.rowId,
|
|
66
87
|
originalIndex: index,
|
|
67
88
|
row: options.cloneRowData(entry.row),
|
|
@@ -75,7 +96,7 @@ export function useDataGridAppIntentHistory(options) {
|
|
|
75
96
|
?? (beforeSnapshot.kind === "partial"
|
|
76
97
|
? captureRowsSnapshotByIds(beforeSnapshot.rows.map(entry => entry.rowId))
|
|
77
98
|
: captureRowsSnapshot());
|
|
78
|
-
return intentHistory.recordIntentTransaction(descriptor, beforeSnapshot, afterSnapshot);
|
|
99
|
+
return intentHistory.recordIntentTransaction(descriptor, cloneSnapshot(beforeSnapshot), cloneSnapshot(afterSnapshot));
|
|
79
100
|
};
|
|
80
101
|
return {
|
|
81
102
|
captureRowsSnapshot,
|