@affino/datagrid-vue 0.3.31 → 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.
@@ -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":"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,CACrB,cAAc,EAAE,SAAS,EACzB,qBAAqB,CAAC,EAAE,SAAS,EACjC,KAAK,CAAC,EAAE,MAAM,KACX,IAAI,CAAA;IACT,QAAQ,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAA;IACnE,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAA;IAC7E,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,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,mBAAmB,CAAC,EAAE,CACpB,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,EAAE,EAAE,EAClB,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAC;QAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;KAAE,KAC/D,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC7B,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,MAAM,EAAE,EAAE,CAAA;IACnE,gCAAgC,CAAC,EAAE,CACjC,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,OAAO,CAAC,oBAAoB,EAAE,SAAS,CAAC,KAC3C,MAAM,EAAE,EAAE,CAAA;CAChB;AAED,MAAM,WAAW,6BAA6B;IAC5C,yBAAyB,EAAE,GAAG,CAAC,oCAAoC,CAAC,CAAA;IACpE,qBAAqB,EAAE,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAA;IACpD,sBAAsB,EAAE,GAAG,CAAC,SAAS,iBAAiB,EAAE,CAAC,CAAA;IACzD,uBAAuB,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,iBAAiB,GAAG,IAAI,CAAA;IAC/E,mBAAmB,EAAE,CACnB,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,EAAE,EAAE,EAClB,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAC;QAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;KAAE,KAC/D,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC7B,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,8BAA8B,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,6BAA6B,CAAC,EAAE,OAAO,KAAK,OAAO,CAAA;IAC7G,iBAAiB,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9E,kBAAkB,EAAE,CAClB,OAAO,CAAC,EAAE,UAAU,GAAG,cAAc,EACrC,OAAO,CAAC,EAAE,uBAAuB,KAC9B,OAAO,CAAC,OAAO,CAAC,CAAA;IACrB,gBAAgB,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7E,6BAA6B,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAA;IAClF,4BAA4B,EAAE,CAC5B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,+BAA+B,KAClC,OAAO,CAAA;CACb;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,EACrD,OAAO,EAAE,8BAA8B,CAAC,IAAI,EAAE,SAAS,CAAC,GACvD,6BAA6B,CAoW/B"}
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: () => undefined,
60
+ setLastAction: message => {
61
+ options.setLastAction?.(message);
62
+ },
47
63
  closeContextMenu: () => undefined,
48
64
  });
49
- const applyClipboardEdits = options.applyClipboardEdits ?? (async (range, matrix, applyOptions = {}) => {
65
+ const collectClipboardEdits = (range, matrix) => {
50
66
  const normalized = normalizeClipboardRange(range);
51
67
  if (!normalized) {
52
- return 0;
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
- if (editsByRowId.size === 0) {
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(editsByRowId.keys());
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 updates = Array.from(editsByRowId.entries(), ([rowId, data]) => ({
86
- rowId,
87
- data: data,
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
- const afterSnapshot = options.captureRowsSnapshotForRowIds
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 editsByRowId.size;
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
- void applyClipboardEdits(pendingSourceRange, [[""]], { recordHistory: false });
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: false });
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.syncViewport();
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,
@@ -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,CAkGzC"}
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.setData(snapshot.rows.map((entry, index) => ({
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":"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"}
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
- if (rowCount < 256) {
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 result = await dataSource.commitFillOperation({
482
- operationId,
483
- projection: {
484
- sortModel: snapshot.sortModel ?? [],
485
- filterModel: snapshot.filterModel ?? null,
486
- groupBy: snapshot.groupBy ?? null,
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
- options.reportFillPlumbingState?.("commitFillOperation_called", true);
512
- options.reportFillPlumbingState?.("server_fill_operationId", true);
513
- if (!result) {
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 ((result.affectedRowCount ?? 0) <= 0 || (result.warnings?.length ?? 0) > 0) {
518
- options.reportFillWarning?.(result.warnings?.[0] ?? "server fill invalid range");
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
- options.reportFillPlumbingDetail?.("server_fill_affected_range", formatServerFillAffectedRange(invalidationRange, previewRange));
523
- options.reportFillWarning?.("server fill committed");
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
- const rowsApi = options.runtime.api.rows;
526
- if (typeof rowsApi.invalidateRange === "function") {
527
- rowsApi.invalidateRange(invalidationRange);
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":"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"}
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);
@@ -589,6 +591,33 @@ export function useDataGridAppViewport(options) {
589
591
  }
590
592
  return nextRows;
591
593
  };
594
+ const updateRenderedViewportRange = (rows) => {
595
+ if (rows.length === 0) {
596
+ renderedViewportRange.value = null;
597
+ return;
598
+ }
599
+ const first = rows[0];
600
+ const last = rows[rows.length - 1];
601
+ const start = first && Number.isFinite(first.displayIndex)
602
+ ? Math.max(0, Math.trunc(first.displayIndex))
603
+ : null;
604
+ const end = last && Number.isFinite(last.displayIndex)
605
+ ? Math.max(0, Math.trunc(last.displayIndex))
606
+ : null;
607
+ if (start == null || end == null) {
608
+ renderedViewportRange.value = null;
609
+ return;
610
+ }
611
+ renderedViewportRange.value = {
612
+ start,
613
+ end: Math.max(start, end),
614
+ };
615
+ };
616
+ const commitDisplayRows = (rows) => {
617
+ displayRows.value = rows;
618
+ displayRowsRevision.value += 1;
619
+ updateRenderedViewportRange(rows);
620
+ };
592
621
  const syncVisibleRows = (range, force = false) => {
593
622
  if (!force
594
623
  && lastSyncedRange
@@ -637,12 +666,12 @@ export function useDataGridAppViewport(options) {
637
666
  setWindowRange(range);
638
667
  setViewportRangeMs = resolveDataGridPerfNow() - setViewportRangeStart;
639
668
  const displayRowsAssignStart = resolveDataGridPerfNow();
640
- displayRows.value = incrementalRows;
669
+ commitDisplayRows(incrementalRows);
641
670
  displayRowsAssignMs = resolveDataGridPerfNow() - displayRowsAssignStart;
642
671
  }
643
672
  else {
644
673
  setWindowRange(range);
645
- displayRows.value = incrementalRows;
674
+ commitDisplayRows(incrementalRows);
646
675
  }
647
676
  if (perfTraceEnabled) {
648
677
  viewportCommitMs = resolveDataGridPerfNow() - commitStart;
@@ -650,7 +679,7 @@ export function useDataGridAppViewport(options) {
650
679
  }
651
680
  else {
652
681
  const syncStart = perfTraceEnabled ? resolveDataGridPerfNow() : 0;
653
- displayRows.value = options.runtime.syncBodyRowsInRange(range);
682
+ commitDisplayRows(options.runtime.syncBodyRowsInRange(range));
654
683
  if (perfTraceEnabled) {
655
684
  runtimeSyncMs = resolveDataGridPerfNow() - syncStart;
656
685
  }
@@ -658,7 +687,7 @@ export function useDataGridAppViewport(options) {
658
687
  }
659
688
  else {
660
689
  const syncStart = perfTraceEnabled ? resolveDataGridPerfNow() : 0;
661
- displayRows.value = options.runtime.syncBodyRowsInRange(range);
690
+ commitDisplayRows(options.runtime.syncBodyRowsInRange(range));
662
691
  if (perfTraceEnabled) {
663
692
  runtimeSyncMs = resolveDataGridPerfNow() - syncStart;
664
693
  }
@@ -688,6 +717,9 @@ export function useDataGridAppViewport(options) {
688
717
  };
689
718
  }
690
719
  };
720
+ const syncRenderedRowsInRange = (range) => {
721
+ syncVisibleRows(range, true);
722
+ };
691
723
  const syncHeaderScrollLeftFromBody = (bodyScrollLeft) => {
692
724
  const headerViewport = headerViewportRef.value;
693
725
  if (!headerViewport) {
@@ -869,8 +901,10 @@ export function useDataGridAppViewport(options) {
869
901
  bodyViewportRef,
870
902
  viewportScrollTop,
871
903
  displayRows,
904
+ displayRowsRevision,
872
905
  pinnedBottomRows: computed(() => options.runtime.rowPartition.value.pinnedBottomRows),
873
906
  renderedColumns: computed(() => viewportColumnMetrics.value.renderedColumns),
907
+ renderedViewportRange,
874
908
  viewportRowStart,
875
909
  viewportRowEnd,
876
910
  viewportColumnStart: computed(() => viewportColumnMetrics.value.start),
@@ -884,6 +918,7 @@ export function useDataGridAppViewport(options) {
884
918
  mainTrackStyle,
885
919
  indexColumnStyle,
886
920
  columnStyle,
921
+ syncRenderedRowsInRange,
887
922
  handleViewportScroll,
888
923
  syncViewportFromDom,
889
924
  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
- return syncedRows.filter(row => !isPinnedBodyExcludedRow(row));
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.31",
3
+ "version": "0.3.32",
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.20",
78
+ "@affino/datagrid-core": "0.3.21",
79
+ "@affino/datagrid-orchestration": "0.3.13",
79
80
  "@affino/datagrid-pivot": "0.1.2",
80
- "@affino/datagrid-orchestration": "0.3.12",
81
81
  "@affino/datagrid-worker": "0.1.1"
82
82
  },
83
83
  "devDependencies": {