@affino/datagrid-vue 0.3.31 → 0.3.33
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 +3 -0
- package/dist/app/useDataGridAppClipboard.d.ts.map +1 -1
- package/dist/app/useDataGridAppClipboard.js +95 -21
- package/dist/app/useDataGridAppFill.d.ts +1 -0
- package/dist/app/useDataGridAppFill.d.ts.map +1 -1
- package/dist/app/useDataGridAppFill.js +7 -1
- package/dist/app/useDataGridAppInlineEditing.js +1 -1
- package/dist/app/useDataGridAppIntentHistory.d.ts.map +1 -1
- package/dist/app/useDataGridAppIntentHistory.js +23 -2
- package/dist/app/useDataGridAppInteractionController.d.ts +1 -0
- package/dist/app/useDataGridAppInteractionController.d.ts.map +1 -1
- package/dist/app/useDataGridAppInteractionController.js +199 -49
- package/dist/app/useDataGridAppViewport.d.ts +4 -1
- package/dist/app/useDataGridAppViewport.d.ts.map +1 -1
- package/dist/app/useDataGridAppViewport.js +67 -23
- package/dist/composables/useDataGridRuntime.d.ts.map +1 -1
- package/dist/composables/useDataGridRuntime.js +41 -1
- package/package.json +3 -3
|
@@ -24,6 +24,7 @@ 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
30
|
recordEditTransaction: (beforeSnapshot: TSnapshot, afterSnapshotOverride?: TSnapshot, label?: string) => void;
|
|
@@ -56,5 +57,7 @@ export interface UseDataGridAppClipboardResult {
|
|
|
56
57
|
isCellInPendingClipboardRange: (rowOffset: number, columnIndex: number) => boolean;
|
|
57
58
|
isCellOnPendingClipboardEdge: (rowOffset: number, columnIndex: number, edge: DataGridAppPendingClipboardEdge) => boolean;
|
|
58
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;
|
|
59
62
|
export declare function useDataGridAppClipboard<TRow, TSnapshot>(options: UseDataGridAppClipboardOptions<TRow, TSnapshot>): UseDataGridAppClipboardResult;
|
|
60
63
|
//# sourceMappingURL=useDataGridAppClipboard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataGridAppClipboard.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppClipboard.ts"],"names":[],"mappings":"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
|
|
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,13 +57,15 @@ 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);
|
|
@@ -75,26 +91,35 @@ export function useDataGridAppClipboard(options) {
|
|
|
75
91
|
editsByRowId.set(row.rowId, current);
|
|
76
92
|
}
|
|
77
93
|
}
|
|
78
|
-
|
|
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) {
|
|
105
|
+
return 0;
|
|
106
|
+
}
|
|
107
|
+
if (updates.length === 0) {
|
|
79
108
|
return 0;
|
|
80
109
|
}
|
|
81
|
-
const rowIds = Array.from(
|
|
110
|
+
const rowIds = Array.from(new Set(updates.map(update => update.rowId)));
|
|
82
111
|
const beforeSnapshot = applyOptions.recordHistory === false
|
|
83
112
|
? null
|
|
84
113
|
: (options.captureRowsSnapshotForRowIds?.(rowIds) ?? options.captureRowsSnapshot());
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}));
|
|
114
|
+
const afterSnapshot = beforeSnapshot != null
|
|
115
|
+
? buildAfterEditSnapshot(beforeSnapshot, updates)
|
|
116
|
+
: null;
|
|
89
117
|
await options.runtime.api.rows.applyEdits(updates);
|
|
90
118
|
options.applySelectionRange(normalized);
|
|
91
119
|
if (beforeSnapshot != null) {
|
|
92
|
-
|
|
93
|
-
? options.captureRowsSnapshotForRowIds(rowIds)
|
|
94
|
-
: options.captureRowsSnapshot();
|
|
95
|
-
options.recordEditTransaction(beforeSnapshot, afterSnapshot, applyOptions.recordHistoryLabel);
|
|
120
|
+
options.recordEditTransaction(beforeSnapshot, afterSnapshot ?? undefined, applyOptions.recordHistoryLabel);
|
|
96
121
|
}
|
|
97
|
-
return
|
|
122
|
+
return updates.length;
|
|
98
123
|
});
|
|
99
124
|
const rangesEqual = (left, right) => {
|
|
100
125
|
if (!left || !right) {
|
|
@@ -128,6 +153,35 @@ export function useDataGridAppClipboard(options) {
|
|
|
128
153
|
}
|
|
129
154
|
return options.captureRowsSnapshot();
|
|
130
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
|
+
};
|
|
131
185
|
const buildFillMatrixFromRange = options.buildFillMatrixFromRange ?? ((range) => {
|
|
132
186
|
const matrix = [];
|
|
133
187
|
for (let rowIndex = range.startRow; rowIndex <= range.endRow; rowIndex += 1) {
|
|
@@ -187,6 +241,14 @@ export function useDataGridAppClipboard(options) {
|
|
|
187
241
|
return true;
|
|
188
242
|
};
|
|
189
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
|
+
}
|
|
190
252
|
return stageClipboardOperation("copy", trigger);
|
|
191
253
|
};
|
|
192
254
|
const pasteSelectedCells = async (trigger = "keyboard", pasteOptions = {}) => {
|
|
@@ -233,21 +295,33 @@ export function useDataGridAppClipboard(options) {
|
|
|
233
295
|
void trigger;
|
|
234
296
|
return true;
|
|
235
297
|
}
|
|
236
|
-
const beforeSnapshot = captureBeforeEditSnapshot(pendingOperation === "cut"
|
|
237
|
-
? [pendingSourceRange, normalizedTargetRange]
|
|
238
|
-
: [normalizedTargetRange]);
|
|
239
298
|
if (pendingOperation === "cut" && pendingSourceRange) {
|
|
240
|
-
|
|
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;
|
|
241
317
|
}
|
|
242
|
-
const appliedRows = await applyClipboardEdits(targetRange, matrix, { recordHistory:
|
|
318
|
+
const appliedRows = await applyClipboardEdits(targetRange, matrix, { recordHistory: true });
|
|
243
319
|
if (appliedRows <= 0) {
|
|
244
320
|
return false;
|
|
245
321
|
}
|
|
246
|
-
options.recordEditTransaction(beforeSnapshot);
|
|
247
322
|
if (pendingOperation !== "none") {
|
|
248
323
|
clearPendingClipboardOperation(false);
|
|
249
324
|
}
|
|
250
|
-
options.applySelectionRange(normalizedTargetRange);
|
|
251
325
|
options.syncViewport();
|
|
252
326
|
void trigger;
|
|
253
327
|
return true;
|
|
@@ -45,6 +45,7 @@ export interface UseDataGridAppFillOptions {
|
|
|
45
45
|
affectedRange?: DataGridCopyRange | null;
|
|
46
46
|
behavior: DataGridFillBehavior;
|
|
47
47
|
} | null) => void;
|
|
48
|
+
syncServerFillViewport?: (range?: DataGridCopyRange | null) => void | Promise<void>;
|
|
48
49
|
syncViewport: () => void;
|
|
49
50
|
}
|
|
50
51
|
export interface UseDataGridAppFillResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataGridAppFill.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppFill.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"useDataGridAppFill.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppFill.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,9 +26,15 @@ export function useDataGridAppFill(options) {
|
|
|
26
26
|
affectedRange: committed.affectedRange ?? previewRange,
|
|
27
27
|
behavior,
|
|
28
28
|
});
|
|
29
|
-
options.
|
|
29
|
+
if (options.syncServerFillViewport) {
|
|
30
|
+
await options.syncServerFillViewport(committed.invalidation?.range ?? committed.affectedRange ?? previewRange);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
options.syncViewport();
|
|
34
|
+
}
|
|
30
35
|
return true;
|
|
31
36
|
}
|
|
37
|
+
return false;
|
|
32
38
|
}
|
|
33
39
|
const matrix = buildDataGridFillMatrix({
|
|
34
40
|
baseRange,
|
|
@@ -345,6 +345,7 @@ export function useDataGridAppInlineEditing(options) {
|
|
|
345
345
|
const afterSnapshot = typeof beforeSnapshot !== "undefined"
|
|
346
346
|
? buildAfterSnapshotFromEdit(beforeSnapshot, resolvedRowId, currentEditingCell.columnKey, parsedValue)
|
|
347
347
|
: undefined;
|
|
348
|
+
clearInlineEdit();
|
|
348
349
|
await options.runtime.api.rows.applyEdits([
|
|
349
350
|
{
|
|
350
351
|
rowId: resolvedRowId,
|
|
@@ -366,7 +367,6 @@ export function useDataGridAppInlineEditing(options) {
|
|
|
366
367
|
},
|
|
367
368
|
});
|
|
368
369
|
options.recordEditTransaction(beforeSnapshot, afterSnapshot, "Cell edit");
|
|
369
|
-
clearInlineEdit();
|
|
370
370
|
suppressNextBlurCommit.value = false;
|
|
371
371
|
if (target !== "none") {
|
|
372
372
|
focusAfterInlineEdit(resolvedRowId, currentEditingCell.columnKey, target, {
|
|
@@ -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) {
|
|
@@ -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,
|
|
@@ -152,6 +152,7 @@ export interface UseDataGridAppInteractionControllerOptions<TRow extends Record<
|
|
|
152
152
|
rangesEqual: (left: DataGridCopyRange | null, right: DataGridCopyRange | null) => boolean;
|
|
153
153
|
buildFillMatrixFromRange: (range: DataGridCopyRange) => string[][];
|
|
154
154
|
applyRangeMove?: (baseRange: DataGridCopyRange, targetRange: DataGridCopyRange) => boolean | Promise<boolean>;
|
|
155
|
+
refreshServerFillViewport?: (range?: DataGridCopyRange | null) => void | Promise<void>;
|
|
155
156
|
syncViewport: () => void;
|
|
156
157
|
editingCell: Ref<{
|
|
157
158
|
rowId: string | number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataGridAppInteractionController.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppInteractionController.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,WAAW,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AACzE,OAAO,KAAK,EACV,sBAAsB,EACtB,eAAe,EACf,yBAAyB,EAC1B,MAAM,uBAAuB,CAAA;AAM9B,OAAO,EACL,KAAK,oBAAoB,EAI1B,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAeL,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"useDataGridAppInteractionController.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppInteractionController.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { computed, nextTick, ref } from "vue";
|
|
|
2
2
|
import { invokeDataGridCellInteraction, resolveDataGridCellKeyboardAction, toggleDataGridCellValue, } from "@affino/datagrid-core";
|
|
3
3
|
import { buildDataGridFillMatrix, canToggleDataGridFillBehavior, resolveDataGridDefaultFillBehavior, } from "../composables/dataGridFillBehavior";
|
|
4
4
|
import { useDataGridAxisAutoScrollDelta, useDataGridCellNavigation, useDataGridCellPointerDownRouter, useDataGridDragPointerSelection, useDataGridFillHandleStart, useDataGridFillSelectionLifecycle, useDataGridHistoryActionRunner, useDataGridKeyboardCommandRouter, useDataGridPointerCellCoordResolver, useDataGridPointerAutoScroll, useDataGridPointerPreviewRouter, useDataGridRangeMoveLifecycle, useDataGridRangeMoveStart, useDataGridRangeMutationEngine, } from "../advanced";
|
|
5
|
+
import { resolveMissingRowIndexInRange } from "./useDataGridAppClipboard";
|
|
5
6
|
function getFillRangeStart(range) {
|
|
6
7
|
const candidate = range;
|
|
7
8
|
return Number.isFinite(candidate.startRow)
|
|
@@ -25,6 +26,28 @@ function formatServerFillAffectedRange(range, fallbackColumns) {
|
|
|
25
26
|
: fallbackColumns.endColumn;
|
|
26
27
|
return `${start}..${end} x ${startColumn}..${endColumn}`;
|
|
27
28
|
}
|
|
29
|
+
function normalizeServerFillInvalidationRange(range) {
|
|
30
|
+
if (!range) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
const candidate = range;
|
|
34
|
+
const rawStart = Number.isFinite(candidate.startRow)
|
|
35
|
+
? candidate.startRow
|
|
36
|
+
: candidate.start;
|
|
37
|
+
const rawEnd = Number.isFinite(candidate.endRow)
|
|
38
|
+
? candidate.endRow
|
|
39
|
+
: candidate.end;
|
|
40
|
+
const start = Number(rawStart);
|
|
41
|
+
const end = Number(rawEnd ?? rawStart);
|
|
42
|
+
if (!Number.isFinite(start) || !Number.isFinite(end)) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
start: Math.max(0, Math.trunc(start)),
|
|
47
|
+
end: Math.max(Math.max(0, Math.trunc(start)), Math.trunc(end)),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const ROW_SELECTION_COLUMN_KEY = "__datagrid_row_selection__";
|
|
28
51
|
import { useDataGridAppFill, } from "./useDataGridAppFill";
|
|
29
52
|
import { restoreDataGridFocus } from "./dataGridFocusRestore";
|
|
30
53
|
const DRAG_SELECTION_POINTER_THRESHOLD_PX = 4;
|
|
@@ -53,10 +76,53 @@ export function useDataGridAppInteractionController(options) {
|
|
|
53
76
|
}
|
|
54
77
|
return options.readCell(row, columnKey).trim().length > 0;
|
|
55
78
|
};
|
|
79
|
+
const isServerBackedRowModel = () => {
|
|
80
|
+
const controllerRowModel = options.runtimeRowModel;
|
|
81
|
+
const runtimeRowModel = options.runtime.rowModel;
|
|
82
|
+
return controllerRowModel?.dataSource != null || runtimeRowModel?.dataSource != null;
|
|
83
|
+
};
|
|
84
|
+
const resolveSelectableColumnIndexes = () => {
|
|
85
|
+
return options.visibleColumns.value
|
|
86
|
+
.map((column, columnIndex) => ({ column, columnIndex }))
|
|
87
|
+
.filter(({ column }) => column.key !== ROW_SELECTION_COLUMN_KEY)
|
|
88
|
+
.map(({ columnIndex }) => columnIndex);
|
|
89
|
+
};
|
|
56
90
|
const resolveDirectionalSemanticJumpTarget = (current, direction, event) => {
|
|
57
91
|
if (!(event.ctrlKey || event.metaKey) || event.altKey) {
|
|
58
92
|
return undefined;
|
|
59
93
|
}
|
|
94
|
+
if (event.shiftKey && isServerBackedRowModel()) {
|
|
95
|
+
const lastRowIndex = Math.max(0, options.totalRows.value - 1);
|
|
96
|
+
const selectableColumnIndexes = resolveSelectableColumnIndexes();
|
|
97
|
+
const firstSelectableColumnIndex = selectableColumnIndexes[0] ?? 0;
|
|
98
|
+
const lastSelectableColumnIndex = selectableColumnIndexes[selectableColumnIndexes.length - 1] ?? Math.max(0, options.visibleColumns.value.length - 1);
|
|
99
|
+
switch (direction) {
|
|
100
|
+
case "down":
|
|
101
|
+
return options.normalizeCellCoord({
|
|
102
|
+
...current,
|
|
103
|
+
rowIndex: lastRowIndex,
|
|
104
|
+
rowId: getBodyRowAtIndex(lastRowIndex)?.rowId ?? null,
|
|
105
|
+
}) ?? current;
|
|
106
|
+
case "up":
|
|
107
|
+
return options.normalizeCellCoord({
|
|
108
|
+
...current,
|
|
109
|
+
rowIndex: 0,
|
|
110
|
+
rowId: getBodyRowAtIndex(0)?.rowId ?? null,
|
|
111
|
+
}) ?? current;
|
|
112
|
+
case "right":
|
|
113
|
+
return options.normalizeCellCoord({
|
|
114
|
+
...current,
|
|
115
|
+
columnIndex: lastSelectableColumnIndex,
|
|
116
|
+
rowId: getBodyRowAtIndex(current.rowIndex)?.rowId ?? null,
|
|
117
|
+
}) ?? current;
|
|
118
|
+
case "left":
|
|
119
|
+
return options.normalizeCellCoord({
|
|
120
|
+
...current,
|
|
121
|
+
columnIndex: firstSelectableColumnIndex,
|
|
122
|
+
rowId: getBodyRowAtIndex(current.rowIndex)?.rowId ?? null,
|
|
123
|
+
}) ?? current;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
60
126
|
const currentCellIsNonEmpty = isSemanticNavigationCellNonEmpty(current.rowIndex, current.columnIndex);
|
|
61
127
|
if (currentCellIsNonEmpty == null) {
|
|
62
128
|
return undefined;
|
|
@@ -458,15 +524,7 @@ export function useDataGridAppInteractionController(options) {
|
|
|
458
524
|
return false;
|
|
459
525
|
}
|
|
460
526
|
const rowCount = Math.max(0, previewRange.endRow - previewRange.startRow + 1);
|
|
461
|
-
|
|
462
|
-
return false;
|
|
463
|
-
}
|
|
464
|
-
for (let rowIndex = previewRange.startRow; rowIndex <= previewRange.endRow; rowIndex += 1) {
|
|
465
|
-
if (!options.runtime?.getBodyRowAtIndex?.(rowIndex)) {
|
|
466
|
-
return true;
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
return false;
|
|
527
|
+
return rowCount >= 256;
|
|
470
528
|
},
|
|
471
529
|
commitServerFill: async ({ baseRange, previewRange, behavior }) => {
|
|
472
530
|
const runtimeRowModelDataSource = options.runtimeRowModel?.dataSource;
|
|
@@ -478,60 +536,146 @@ export function useDataGridAppInteractionController(options) {
|
|
|
478
536
|
}
|
|
479
537
|
const snapshot = options.runtime.api.rows.getSnapshot();
|
|
480
538
|
const operationId = `fill-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
481
|
-
const
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
groupExpansion: snapshot.groupExpansion ?? { expandedByDefault: false, toggledGroupKeys: [] },
|
|
488
|
-
treeData: null,
|
|
489
|
-
pivot: null,
|
|
490
|
-
pagination: snapshot.pagination ?? {
|
|
491
|
-
enabled: false,
|
|
492
|
-
pageSize: 0,
|
|
493
|
-
currentPage: 0,
|
|
494
|
-
pageCount: 0,
|
|
495
|
-
totalRowCount: 0,
|
|
496
|
-
startIndex: 0,
|
|
497
|
-
endIndex: 0,
|
|
498
|
-
},
|
|
499
|
-
},
|
|
500
|
-
sourceRange: baseRange,
|
|
501
|
-
targetRange: previewRange,
|
|
502
|
-
fillColumns: options.visibleColumns.value
|
|
503
|
-
.slice(previewRange.startColumn, previewRange.endColumn + 1)
|
|
504
|
-
.map(column => String(column.key)),
|
|
505
|
-
referenceColumns: options.visibleColumns.value
|
|
506
|
-
.slice(baseRange.startColumn, baseRange.endColumn + 1)
|
|
507
|
-
.map(column => String(column.key)),
|
|
508
|
-
mode: behavior,
|
|
509
|
-
metadata: { origin: "double-click-fill", behaviorSource: "default" },
|
|
539
|
+
const sourceMatrix = options.buildFillMatrixFromRange(baseRange);
|
|
540
|
+
const fillMatrix = buildDataGridFillMatrix({
|
|
541
|
+
baseRange,
|
|
542
|
+
previewRange,
|
|
543
|
+
sourceMatrix,
|
|
544
|
+
behavior,
|
|
510
545
|
});
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
546
|
+
const materializedTargetRowIds = [];
|
|
547
|
+
const optimisticUpdatesByRowId = new Map();
|
|
548
|
+
let optimisticFillCandidate = options.captureRowsSnapshotForRowIds != null;
|
|
549
|
+
if (optimisticFillCandidate) {
|
|
550
|
+
for (let rowIndex = previewRange.startRow; rowIndex <= previewRange.endRow; rowIndex += 1) {
|
|
551
|
+
const targetRow = getBodyRowAtIndex(rowIndex);
|
|
552
|
+
const isMaterialized = options.isRowMaterializedAtIndex
|
|
553
|
+
? options.isRowMaterializedAtIndex(rowIndex)
|
|
554
|
+
: !!targetRow && targetRow.__placeholder !== true;
|
|
555
|
+
if (!isMaterialized || !targetRow || targetRow.kind === "group" || targetRow.rowId == null || targetRow.__placeholder === true) {
|
|
556
|
+
optimisticFillCandidate = false;
|
|
557
|
+
break;
|
|
558
|
+
}
|
|
559
|
+
materializedTargetRowIds.push(targetRow.rowId);
|
|
560
|
+
for (let columnIndex = previewRange.startColumn; columnIndex <= previewRange.endColumn; columnIndex += 1) {
|
|
561
|
+
const columnKey = options.visibleColumns.value[columnIndex]?.key;
|
|
562
|
+
if (!columnKey || columnKey === ROW_SELECTION_COLUMN_KEY) {
|
|
563
|
+
continue;
|
|
564
|
+
}
|
|
565
|
+
const rowOffset = rowIndex - previewRange.startRow;
|
|
566
|
+
const columnOffset = columnIndex - previewRange.startColumn;
|
|
567
|
+
const nextValue = fillMatrix[rowOffset]?.[columnOffset] ?? "";
|
|
568
|
+
const current = optimisticUpdatesByRowId.get(targetRow.rowId) ?? {};
|
|
569
|
+
current[columnKey] = nextValue;
|
|
570
|
+
optimisticUpdatesByRowId.set(targetRow.rowId, current);
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
let optimisticRollbackUpdates = null;
|
|
575
|
+
if (optimisticFillCandidate && materializedTargetRowIds.length > 0 && optimisticUpdatesByRowId.size > 0) {
|
|
576
|
+
const baselineSnapshot = options.captureRowsSnapshotForRowIds?.(materializedTargetRowIds);
|
|
577
|
+
const baselineRows = baselineSnapshot?.rows ?? [];
|
|
578
|
+
if (baselineRows.length === materializedTargetRowIds.length) {
|
|
579
|
+
const baselineByRowId = new Map();
|
|
580
|
+
for (const entry of baselineRows) {
|
|
581
|
+
baselineByRowId.set(entry.rowId, entry.row);
|
|
582
|
+
}
|
|
583
|
+
optimisticRollbackUpdates = materializedTargetRowIds.flatMap(rowId => {
|
|
584
|
+
const row = baselineByRowId.get(rowId);
|
|
585
|
+
return row ? [{ rowId, data: row }] : [];
|
|
586
|
+
});
|
|
587
|
+
if (optimisticRollbackUpdates.length > 0) {
|
|
588
|
+
options.reportFillPlumbingState?.("server_fill_optimistic_applied", true);
|
|
589
|
+
await Promise.resolve(options.runtime.api.rows.applyEdits(Array.from(optimisticUpdatesByRowId.entries()).map(([rowId, data]) => ({
|
|
590
|
+
rowId,
|
|
591
|
+
data: data,
|
|
592
|
+
}))));
|
|
593
|
+
}
|
|
594
|
+
else {
|
|
595
|
+
optimisticRollbackUpdates = null;
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
else {
|
|
599
|
+
optimisticFillCandidate = false;
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
let result = null;
|
|
603
|
+
try {
|
|
604
|
+
result = await dataSource.commitFillOperation({
|
|
605
|
+
operationId,
|
|
606
|
+
projection: {
|
|
607
|
+
sortModel: snapshot.sortModel ?? [],
|
|
608
|
+
filterModel: snapshot.filterModel ?? null,
|
|
609
|
+
groupBy: snapshot.groupBy ?? null,
|
|
610
|
+
groupExpansion: snapshot.groupExpansion ?? { expandedByDefault: false, toggledGroupKeys: [] },
|
|
611
|
+
treeData: null,
|
|
612
|
+
pivot: null,
|
|
613
|
+
pagination: snapshot.pagination ?? {
|
|
614
|
+
enabled: false,
|
|
615
|
+
pageSize: 0,
|
|
616
|
+
currentPage: 0,
|
|
617
|
+
pageCount: 0,
|
|
618
|
+
totalRowCount: 0,
|
|
619
|
+
startIndex: 0,
|
|
620
|
+
endIndex: 0,
|
|
621
|
+
},
|
|
622
|
+
},
|
|
623
|
+
sourceRange: baseRange,
|
|
624
|
+
targetRange: previewRange,
|
|
625
|
+
fillColumns: options.visibleColumns.value
|
|
626
|
+
.slice(previewRange.startColumn, previewRange.endColumn + 1)
|
|
627
|
+
.map(column => String(column.key)),
|
|
628
|
+
referenceColumns: options.visibleColumns.value
|
|
629
|
+
.slice(baseRange.startColumn, baseRange.endColumn + 1)
|
|
630
|
+
.map(column => String(column.key)),
|
|
631
|
+
mode: behavior,
|
|
632
|
+
metadata: { origin: "double-click-fill", behaviorSource: "default" },
|
|
633
|
+
});
|
|
634
|
+
options.reportFillPlumbingState?.("commitFillOperation_called", true);
|
|
635
|
+
options.reportFillPlumbingState?.("server_fill_operationId", true);
|
|
636
|
+
}
|
|
637
|
+
catch {
|
|
638
|
+
if (optimisticRollbackUpdates && optimisticRollbackUpdates.length > 0) {
|
|
639
|
+
await Promise.resolve(options.runtime.api.rows.applyEdits(optimisticRollbackUpdates));
|
|
640
|
+
}
|
|
514
641
|
options.reportFillWarning?.("server fill commit failed");
|
|
515
642
|
return null;
|
|
516
643
|
}
|
|
517
|
-
if (
|
|
518
|
-
|
|
644
|
+
if (!result) {
|
|
645
|
+
if (optimisticRollbackUpdates && optimisticRollbackUpdates.length > 0) {
|
|
646
|
+
await Promise.resolve(options.runtime.api.rows.applyEdits(optimisticRollbackUpdates));
|
|
647
|
+
}
|
|
648
|
+
options.reportFillWarning?.("server fill commit failed");
|
|
519
649
|
return null;
|
|
520
650
|
}
|
|
521
651
|
const invalidationRange = result.invalidation?.kind === "range" ? result.invalidation.range : previewRange;
|
|
522
|
-
|
|
523
|
-
options.
|
|
652
|
+
const normalizedInvalidationRange = normalizeServerFillInvalidationRange(invalidationRange);
|
|
653
|
+
options.reportFillPlumbingDetail?.("server_fill_raw_invalidation", JSON.stringify(invalidationRange ?? null));
|
|
654
|
+
options.reportFillPlumbingDetail?.("server_fill_normalized_invalidation", normalizedInvalidationRange ? `${normalizedInvalidationRange.start}..${normalizedInvalidationRange.end}` : "none");
|
|
655
|
+
options.reportFillPlumbingDetail?.("server_fill_affected_range", formatServerFillAffectedRange(normalizedInvalidationRange ?? invalidationRange, previewRange));
|
|
656
|
+
const affectedRowCount = result.affectedRowCount ?? 0;
|
|
657
|
+
const warnings = result.warnings ?? [];
|
|
658
|
+
options.reportFillWarning?.(warnings[0] ?? (affectedRowCount > 0 ? "server fill committed" : "server fill no-op"));
|
|
524
659
|
options.reportFillPlumbingState?.("server_fill_affectedRowCount", true);
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
660
|
+
if (!options.refreshServerFillViewport) {
|
|
661
|
+
const runtimeRowModel = options.runtimeRowModel;
|
|
662
|
+
const runtimeRowModelFallback = options.runtime.rowModel;
|
|
663
|
+
const rowsApi = options.runtime.api.rows;
|
|
664
|
+
const invalidateTarget = runtimeRowModel?.invalidateRange ?? runtimeRowModelFallback?.invalidateRange;
|
|
665
|
+
if (normalizedInvalidationRange && typeof invalidateTarget === "function") {
|
|
666
|
+
invalidateTarget(normalizedInvalidationRange);
|
|
667
|
+
options.reportFillPlumbingState?.("server_fill_invalidation_applied", true);
|
|
668
|
+
}
|
|
669
|
+
await Promise.resolve(rowsApi.refresh?.());
|
|
528
670
|
}
|
|
529
|
-
await Promise.resolve(rowsApi.refresh?.());
|
|
530
671
|
return {
|
|
531
672
|
operationId: result.operationId,
|
|
532
673
|
revision: result.revision,
|
|
533
674
|
affectedRange: invalidationRange,
|
|
534
675
|
invalidation: result.invalidation ?? null,
|
|
676
|
+
affectedRowCount,
|
|
677
|
+
affectedCellCount: result.affectedCellCount ?? affectedRowCount,
|
|
678
|
+
warnings,
|
|
535
679
|
};
|
|
536
680
|
},
|
|
537
681
|
applyClipboardEdits: options.applyClipboardEdits,
|
|
@@ -560,6 +704,7 @@ export function useDataGridAppInteractionController(options) {
|
|
|
560
704
|
mode: session.behavior,
|
|
561
705
|
});
|
|
562
706
|
},
|
|
707
|
+
syncServerFillViewport: options.refreshServerFillViewport,
|
|
563
708
|
syncViewport: options.syncViewport,
|
|
564
709
|
});
|
|
565
710
|
const applyCommittedFillRange = async (baseRange, previewRange, behavior) => {
|
|
@@ -1197,6 +1342,11 @@ export function useDataGridAppInteractionController(options) {
|
|
|
1197
1342
|
if (!range) {
|
|
1198
1343
|
return false;
|
|
1199
1344
|
}
|
|
1345
|
+
const missingRowIndex = resolveMissingRowIndexInRange(getBodyRowAtIndex, range);
|
|
1346
|
+
if (missingRowIndex != null) {
|
|
1347
|
+
options.reportFillWarning?.("Selected range includes unloaded rows. Load rows or use server operation.");
|
|
1348
|
+
return false;
|
|
1349
|
+
}
|
|
1200
1350
|
const beforeSnapshot = captureRowsSnapshotForRanges([range]);
|
|
1201
1351
|
options.clearPendingClipboardOperation(false);
|
|
1202
1352
|
const applied = await options.applyClipboardEdits(range, [[""]], { recordHistory: false });
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Ref } from "vue";
|
|
2
|
-
import type { DataGridColumnSnapshot, DataGridRowNode } from "@affino/datagrid-core";
|
|
2
|
+
import type { DataGridColumnSnapshot, DataGridRowNode, DataGridViewportRange } from "@affino/datagrid-core";
|
|
3
3
|
import type { UseDataGridRuntimeResult } from "../composables/useDataGridRuntime";
|
|
4
4
|
import type { DataGridAppMode, DataGridAppRowRenderMode } from "./useDataGridAppControls";
|
|
5
5
|
type MaybeRef<T> = T | Ref<T>;
|
|
@@ -38,8 +38,10 @@ export interface UseDataGridAppViewportResult<TRow> {
|
|
|
38
38
|
bodyViewportRef: Ref<HTMLElement | null>;
|
|
39
39
|
viewportScrollTop: Ref<number>;
|
|
40
40
|
displayRows: Ref<readonly DataGridRowNode<TRow>[]>;
|
|
41
|
+
displayRowsRevision: Ref<number>;
|
|
41
42
|
pinnedBottomRows: Ref<readonly DataGridRowNode<TRow>[]>;
|
|
42
43
|
renderedColumns: Ref<readonly DataGridColumnSnapshot[]>;
|
|
44
|
+
renderedViewportRange: Ref<DataGridViewportRange | null>;
|
|
43
45
|
viewportRowStart: Ref<number>;
|
|
44
46
|
viewportRowEnd: Ref<number>;
|
|
45
47
|
viewportColumnStart: Ref<number>;
|
|
@@ -53,6 +55,7 @@ export interface UseDataGridAppViewportResult<TRow> {
|
|
|
53
55
|
mainTrackStyle: Ref<Record<string, string>>;
|
|
54
56
|
indexColumnStyle: Ref<Record<string, string>>;
|
|
55
57
|
columnStyle: (key: string) => Record<string, string>;
|
|
58
|
+
syncRenderedRowsInRange: (range: DataGridViewportRange) => void;
|
|
56
59
|
handleViewportScroll: (event: Event) => void;
|
|
57
60
|
syncViewportFromDom: () => void;
|
|
58
61
|
scheduleViewportSync: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataGridAppViewport.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppViewport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAC9F,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"useDataGridAppViewport.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppViewport.ts"],"names":[],"mappings":"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"}
|
|
@@ -206,6 +206,8 @@ export function useDataGridAppViewport(options) {
|
|
|
206
206
|
const bodyViewportRef = ref(null);
|
|
207
207
|
const viewportScrollTop = ref(0);
|
|
208
208
|
const displayRows = shallowRef([]);
|
|
209
|
+
const displayRowsRevision = ref(0);
|
|
210
|
+
const renderedViewportRange = ref(null);
|
|
209
211
|
const viewportScrollLeft = ref(0);
|
|
210
212
|
const viewportClientWidth = ref(0);
|
|
211
213
|
const viewportShellClientWidth = ref(0);
|
|
@@ -548,7 +550,7 @@ export function useDataGridAppViewport(options) {
|
|
|
548
550
|
return visibleRange.start >= lastSyncedRange.start + hysteresis
|
|
549
551
|
&& visibleRange.end <= lastSyncedRange.end - hysteresis;
|
|
550
552
|
};
|
|
551
|
-
const
|
|
553
|
+
const resolveIndexedVisibleRows = (range) => {
|
|
552
554
|
const getBodyRowAtIndex = options.runtime.getBodyRowAtIndex;
|
|
553
555
|
if (typeof getBodyRowAtIndex !== "function" || !lastSyncedRange) {
|
|
554
556
|
return null;
|
|
@@ -558,36 +560,72 @@ export function useDataGridAppViewport(options) {
|
|
|
558
560
|
const previousLength = previousRange.end >= previousRange.start
|
|
559
561
|
? previousRange.end - previousRange.start + 1
|
|
560
562
|
: 0;
|
|
561
|
-
if (previousRows.length !== previousLength) {
|
|
562
|
-
return null;
|
|
563
|
-
}
|
|
564
563
|
const overlapStart = Math.max(previousRange.start, range.start);
|
|
565
564
|
const overlapEnd = Math.min(previousRange.end, range.end);
|
|
566
|
-
|
|
567
|
-
|
|
565
|
+
const canReuseOverlap = previousRows.length === previousLength && overlapEnd >= overlapStart;
|
|
566
|
+
if (!canReuseOverlap) {
|
|
567
|
+
const rows = [];
|
|
568
|
+
for (let rowIndex = range.start; rowIndex <= range.end; rowIndex += 1) {
|
|
569
|
+
const row = getBodyRowAtIndex(rowIndex);
|
|
570
|
+
if (!row) {
|
|
571
|
+
return null;
|
|
572
|
+
}
|
|
573
|
+
rows.push(row);
|
|
574
|
+
}
|
|
575
|
+
return { rows, mode: "indexed" };
|
|
568
576
|
}
|
|
569
577
|
const nextRows = [];
|
|
570
578
|
for (let rowIndex = range.start; rowIndex < overlapStart; rowIndex += 1) {
|
|
571
579
|
const row = getBodyRowAtIndex(rowIndex);
|
|
572
|
-
if (row) {
|
|
573
|
-
|
|
580
|
+
if (!row) {
|
|
581
|
+
return null;
|
|
574
582
|
}
|
|
583
|
+
nextRows.push(row);
|
|
575
584
|
}
|
|
576
585
|
const overlapOffset = overlapStart - previousRange.start;
|
|
577
586
|
const overlapLength = overlapEnd - overlapStart + 1;
|
|
578
587
|
for (let index = 0; index < overlapLength; index += 1) {
|
|
579
588
|
const row = previousRows[overlapOffset + index];
|
|
580
|
-
if (row) {
|
|
581
|
-
|
|
589
|
+
if (!row) {
|
|
590
|
+
return null;
|
|
582
591
|
}
|
|
592
|
+
nextRows.push(row);
|
|
583
593
|
}
|
|
584
594
|
for (let rowIndex = overlapEnd + 1; rowIndex <= range.end; rowIndex += 1) {
|
|
585
595
|
const row = getBodyRowAtIndex(rowIndex);
|
|
586
|
-
if (row) {
|
|
587
|
-
|
|
596
|
+
if (!row) {
|
|
597
|
+
return null;
|
|
588
598
|
}
|
|
599
|
+
nextRows.push(row);
|
|
600
|
+
}
|
|
601
|
+
return { rows: nextRows, mode: "incremental" };
|
|
602
|
+
};
|
|
603
|
+
const updateRenderedViewportRange = (rows) => {
|
|
604
|
+
if (rows.length === 0) {
|
|
605
|
+
renderedViewportRange.value = null;
|
|
606
|
+
return;
|
|
589
607
|
}
|
|
590
|
-
|
|
608
|
+
const first = rows[0];
|
|
609
|
+
const last = rows[rows.length - 1];
|
|
610
|
+
const start = first && Number.isFinite(first.displayIndex)
|
|
611
|
+
? Math.max(0, Math.trunc(first.displayIndex))
|
|
612
|
+
: null;
|
|
613
|
+
const end = last && Number.isFinite(last.displayIndex)
|
|
614
|
+
? Math.max(0, Math.trunc(last.displayIndex))
|
|
615
|
+
: null;
|
|
616
|
+
if (start == null || end == null) {
|
|
617
|
+
renderedViewportRange.value = null;
|
|
618
|
+
return;
|
|
619
|
+
}
|
|
620
|
+
renderedViewportRange.value = {
|
|
621
|
+
start,
|
|
622
|
+
end: Math.max(start, end),
|
|
623
|
+
};
|
|
624
|
+
};
|
|
625
|
+
const commitDisplayRows = (rows) => {
|
|
626
|
+
displayRows.value = rows;
|
|
627
|
+
displayRowsRevision.value += 1;
|
|
628
|
+
updateRenderedViewportRange(rows);
|
|
591
629
|
};
|
|
592
630
|
const syncVisibleRows = (range, force = false) => {
|
|
593
631
|
if (!force
|
|
@@ -617,18 +655,18 @@ export function useDataGridAppViewport(options) {
|
|
|
617
655
|
let setViewportRangeMs = 0;
|
|
618
656
|
let displayRowsAssignMs = 0;
|
|
619
657
|
let viewportCommitMs = 0;
|
|
620
|
-
const
|
|
658
|
+
const indexedRows = force
|
|
621
659
|
? null
|
|
622
660
|
: (() => {
|
|
623
661
|
if (!perfTraceEnabled) {
|
|
624
|
-
return
|
|
662
|
+
return resolveIndexedVisibleRows(range);
|
|
625
663
|
}
|
|
626
664
|
const incrementalStart = resolveDataGridPerfNow();
|
|
627
|
-
const rows =
|
|
665
|
+
const rows = resolveIndexedVisibleRows(range);
|
|
628
666
|
incrementalResolveMs = resolveDataGridPerfNow() - incrementalStart;
|
|
629
667
|
return rows;
|
|
630
668
|
})();
|
|
631
|
-
if (
|
|
669
|
+
if (indexedRows) {
|
|
632
670
|
const setWindowRange = options.runtime.setVirtualWindowRange ?? options.runtime.setViewportRange;
|
|
633
671
|
if (typeof setWindowRange === "function") {
|
|
634
672
|
const commitStart = perfTraceEnabled ? resolveDataGridPerfNow() : 0;
|
|
@@ -637,12 +675,12 @@ export function useDataGridAppViewport(options) {
|
|
|
637
675
|
setWindowRange(range);
|
|
638
676
|
setViewportRangeMs = resolveDataGridPerfNow() - setViewportRangeStart;
|
|
639
677
|
const displayRowsAssignStart = resolveDataGridPerfNow();
|
|
640
|
-
|
|
678
|
+
commitDisplayRows(indexedRows.rows);
|
|
641
679
|
displayRowsAssignMs = resolveDataGridPerfNow() - displayRowsAssignStart;
|
|
642
680
|
}
|
|
643
681
|
else {
|
|
644
682
|
setWindowRange(range);
|
|
645
|
-
|
|
683
|
+
commitDisplayRows(indexedRows.rows);
|
|
646
684
|
}
|
|
647
685
|
if (perfTraceEnabled) {
|
|
648
686
|
viewportCommitMs = resolveDataGridPerfNow() - commitStart;
|
|
@@ -650,7 +688,7 @@ export function useDataGridAppViewport(options) {
|
|
|
650
688
|
}
|
|
651
689
|
else {
|
|
652
690
|
const syncStart = perfTraceEnabled ? resolveDataGridPerfNow() : 0;
|
|
653
|
-
|
|
691
|
+
commitDisplayRows(options.runtime.syncBodyRowsInRange(range));
|
|
654
692
|
if (perfTraceEnabled) {
|
|
655
693
|
runtimeSyncMs = resolveDataGridPerfNow() - syncStart;
|
|
656
694
|
}
|
|
@@ -658,7 +696,7 @@ export function useDataGridAppViewport(options) {
|
|
|
658
696
|
}
|
|
659
697
|
else {
|
|
660
698
|
const syncStart = perfTraceEnabled ? resolveDataGridPerfNow() : 0;
|
|
661
|
-
|
|
699
|
+
commitDisplayRows(options.runtime.syncBodyRowsInRange(range));
|
|
662
700
|
if (perfTraceEnabled) {
|
|
663
701
|
runtimeSyncMs = resolveDataGridPerfNow() - syncStart;
|
|
664
702
|
}
|
|
@@ -669,9 +707,9 @@ export function useDataGridAppViewport(options) {
|
|
|
669
707
|
};
|
|
670
708
|
if (perfTraceEnabled) {
|
|
671
709
|
lastVisibleRowSyncPerf = {
|
|
672
|
-
mode:
|
|
710
|
+
mode: indexedRows
|
|
673
711
|
? ((typeof options.runtime.setVirtualWindowRange === "function" || typeof options.runtime.setViewportRange === "function")
|
|
674
|
-
?
|
|
712
|
+
? indexedRows.mode
|
|
675
713
|
: "incremental-runtime-fallback")
|
|
676
714
|
: "runtime",
|
|
677
715
|
totalMs: resolveDataGridPerfNow() - visibleRowsPerfStart,
|
|
@@ -688,6 +726,9 @@ export function useDataGridAppViewport(options) {
|
|
|
688
726
|
};
|
|
689
727
|
}
|
|
690
728
|
};
|
|
729
|
+
const syncRenderedRowsInRange = (range) => {
|
|
730
|
+
syncVisibleRows(range, true);
|
|
731
|
+
};
|
|
691
732
|
const syncHeaderScrollLeftFromBody = (bodyScrollLeft) => {
|
|
692
733
|
const headerViewport = headerViewportRef.value;
|
|
693
734
|
if (!headerViewport) {
|
|
@@ -869,8 +910,10 @@ export function useDataGridAppViewport(options) {
|
|
|
869
910
|
bodyViewportRef,
|
|
870
911
|
viewportScrollTop,
|
|
871
912
|
displayRows,
|
|
913
|
+
displayRowsRevision,
|
|
872
914
|
pinnedBottomRows: computed(() => options.runtime.rowPartition.value.pinnedBottomRows),
|
|
873
915
|
renderedColumns: computed(() => viewportColumnMetrics.value.renderedColumns),
|
|
916
|
+
renderedViewportRange,
|
|
874
917
|
viewportRowStart,
|
|
875
918
|
viewportRowEnd,
|
|
876
919
|
viewportColumnStart: computed(() => viewportColumnMetrics.value.start),
|
|
@@ -884,6 +927,7 @@ export function useDataGridAppViewport(options) {
|
|
|
884
927
|
mainTrackStyle,
|
|
885
928
|
indexColumnStyle,
|
|
886
929
|
columnStyle,
|
|
930
|
+
syncRenderedRowsInRange,
|
|
887
931
|
handleViewportScroll,
|
|
888
932
|
syncViewportFromDom,
|
|
889
933
|
scheduleViewportSync,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataGridRuntime.d.ts","sourceRoot":"","sources":["../../src/composables/useDataGridRuntime.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"useDataGridRuntime.d.ts","sourceRoot":"","sources":["../../src/composables/useDataGridRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -279,17 +279,38 @@ export function useDataGridRuntime(options) {
|
|
|
279
279
|
const normalizedRange = normalizeBodyViewportRange(range, rowPartition.value.bodyRowCount);
|
|
280
280
|
const syncedRows = runtime.syncRowsInRange(normalizedRange);
|
|
281
281
|
if (sparseRowModel) {
|
|
282
|
+
for (let bodyIndex = normalizedRange.start; bodyIndex <= normalizedRange.end; bodyIndex += 1) {
|
|
283
|
+
const previousRow = bodyRows[bodyIndex];
|
|
284
|
+
if (previousRow
|
|
285
|
+
&& (typeof previousRow.rowId === "string" || typeof previousRow.rowId === "number")
|
|
286
|
+
&& bodyRowIndexById.get(previousRow.rowId) === bodyIndex) {
|
|
287
|
+
bodyRowIndexById.delete(previousRow.rowId);
|
|
288
|
+
}
|
|
289
|
+
delete bodyRows[bodyIndex];
|
|
290
|
+
}
|
|
291
|
+
const rowsByBodyIndex = new Map();
|
|
282
292
|
for (const row of syncedRows) {
|
|
283
293
|
if (isPinnedBodyExcludedRow(row)) {
|
|
284
294
|
continue;
|
|
285
295
|
}
|
|
286
296
|
const bodyIndex = Math.max(0, Math.trunc(row.displayIndex));
|
|
297
|
+
if (bodyIndex < normalizedRange.start || bodyIndex > normalizedRange.end) {
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
287
300
|
bodyRows[bodyIndex] = row;
|
|
301
|
+
rowsByBodyIndex.set(bodyIndex, row);
|
|
288
302
|
if (typeof row.rowId === "string" || typeof row.rowId === "number") {
|
|
289
303
|
bodyRowIndexById.set(row.rowId, bodyIndex);
|
|
290
304
|
}
|
|
291
305
|
}
|
|
292
|
-
|
|
306
|
+
const rows = [];
|
|
307
|
+
for (let bodyIndex = normalizedRange.start; bodyIndex <= normalizedRange.end; bodyIndex += 1) {
|
|
308
|
+
const row = rowsByBodyIndex.get(bodyIndex);
|
|
309
|
+
if (row) {
|
|
310
|
+
rows.push(row);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return rows;
|
|
293
314
|
}
|
|
294
315
|
if (rowPartition.value.bodyRowCount === 0 || bodyRows.length === 0) {
|
|
295
316
|
return [];
|
|
@@ -298,6 +319,25 @@ export function useDataGridRuntime(options) {
|
|
|
298
319
|
if (normalizedRange.start >= endExclusive) {
|
|
299
320
|
return [];
|
|
300
321
|
}
|
|
322
|
+
for (const row of syncedRows) {
|
|
323
|
+
if (isPinnedBodyExcludedRow(row)) {
|
|
324
|
+
continue;
|
|
325
|
+
}
|
|
326
|
+
let bodyIndex = -1;
|
|
327
|
+
if (typeof row.rowId === "string" || typeof row.rowId === "number") {
|
|
328
|
+
bodyIndex = resolveBodyRowIndexById(row.rowId);
|
|
329
|
+
}
|
|
330
|
+
if (bodyIndex < 0) {
|
|
331
|
+
bodyIndex = Math.max(0, Math.trunc(row.displayIndex));
|
|
332
|
+
}
|
|
333
|
+
if (bodyIndex < normalizedRange.start || bodyIndex >= endExclusive) {
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
bodyRows[bodyIndex] = row;
|
|
337
|
+
if (typeof row.rowId === "string" || typeof row.rowId === "number") {
|
|
338
|
+
bodyRowIndexById.set(row.rowId, bodyIndex);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
301
341
|
return bodyRows.slice(normalizedRange.start, endExclusive);
|
|
302
342
|
}
|
|
303
343
|
function getBodyRowAtIndex(rowIndex) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@affino/datagrid-vue",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.33",
|
|
4
4
|
"author": "Anton Pavlov <a.pavlov@affino.dev>",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Vue adapter and headless foundation for Affino DataGrid",
|
|
@@ -75,9 +75,9 @@
|
|
|
75
75
|
}
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
|
-
"@affino/datagrid-core": "0.3.
|
|
78
|
+
"@affino/datagrid-core": "0.3.22",
|
|
79
79
|
"@affino/datagrid-pivot": "0.1.2",
|
|
80
|
-
"@affino/datagrid-orchestration": "0.3.
|
|
80
|
+
"@affino/datagrid-orchestration": "0.3.14",
|
|
81
81
|
"@affino/datagrid-worker": "0.1.1"
|
|
82
82
|
},
|
|
83
83
|
"devDependencies": {
|