@affino/datagrid-vue 0.3.35 → 0.3.36
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/useDataGridAppRowSelection.d.ts.map +1 -1
- package/dist/app/useDataGridAppRowSelection.js +3 -3
- package/dist/app/useDataGridAppSelection.d.ts.map +1 -1
- package/dist/app/useDataGridAppSelection.js +13 -6
- package/dist/app/useDataGridAppViewport.d.ts.map +1 -1
- package/dist/app/useDataGridAppViewport.js +70 -7
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataGridAppRowSelection.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppRowSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"useDataGridAppRowSelection.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppRowSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AAYxF,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAE5G,MAAM,WAAW,iCAAiC,CAAC,IAAI;IACrD,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAA;CAC1E;AAED,MAAM,WAAW,gCAAgC,CAAC,IAAI;IACpD,oBAAoB,EAAE,GAAG,CAAC,4BAA4B,GAAG,IAAI,CAAC,CAAA;IAC9D,UAAU,EAAE,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IACrC,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAA;IACrC,gBAAgB,EAAE,WAAW,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;IACpG,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;IAC5F,mCAAmC,EAAE,MAAM,IAAI,CAAA;IAC/C,gCAAgC,EAAE,MAAM,IAAI,CAAA;CAC7C;AAQD,wBAAgB,0BAA0B,CAAC,IAAI,EAC7C,OAAO,EAAE,iCAAiC,CAAC,IAAI,CAAC,GAC/C,gCAAgC,CAAC,IAAI,CAAC,CAqFxC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ref } from "vue";
|
|
2
|
-
import { clearDataGridSelectedRows, dataGridRowSelectionSnapshotsEqual, deselectDataGridRows, normalizeDataGridRowSelectionSnapshot, reconcileDataGridRowSelectionSnapshot, selectDataGridRows, setDataGridRowFocused, setDataGridRowSelected, } from "@affino/datagrid-core";
|
|
2
|
+
import { clearDataGridSelectedRows, dataGridRowSelectionSnapshotsEqual, deselectDataGridRows, isDataGridRowSelected, normalizeDataGridRowSelectionSnapshot, reconcileDataGridRowSelectionSnapshot, selectDataGridRows, setDataGridRowFocused, setDataGridRowSelected, } from "@affino/datagrid-core";
|
|
3
3
|
function toNullableSnapshot(snapshot) {
|
|
4
|
-
return snapshot.focusedRow == null && snapshot.selectedRows.length === 0
|
|
4
|
+
return (snapshot.mode ?? "explicit") !== "all" && snapshot.focusedRow == null && snapshot.selectedRows.length === 0
|
|
5
5
|
? null
|
|
6
6
|
: snapshot;
|
|
7
7
|
}
|
|
@@ -33,7 +33,7 @@ export function useDataGridAppRowSelection(options) {
|
|
|
33
33
|
syncSnapshot(toNullableSnapshot(setDataGridRowFocused(rowSelectionSnapshot.value, rowId)));
|
|
34
34
|
},
|
|
35
35
|
getSelectedRows: () => [...selectedRows.value],
|
|
36
|
-
isRowSelected: rowId =>
|
|
36
|
+
isRowSelected: rowId => isDataGridRowSelected(rowSelectionSnapshot.value, rowId),
|
|
37
37
|
setRowSelected: (rowId, selected) => {
|
|
38
38
|
syncSnapshot(toNullableSnapshot(setDataGridRowSelected(rowSelectionSnapshot.value, rowId, selected)));
|
|
39
39
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataGridAppSelection.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAMpD,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EAEb,eAAe,EACf,yBAAyB,EAC1B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AAC5E,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAC5G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;AAS7B,MAAM,WAAW,8BAA8B,CAAC,IAAI;IAClD,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAA;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IACvI,cAAc,CAAC,EAAE,GAAG,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAAA;IACvD,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACvB,gBAAgB,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IACpC,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAA;IAC9E,0BAA0B,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAChF;AAED,MAAM,WAAW,6BAA6B,CAAC,IAAI;IACjD,iBAAiB,EAAE,GAAG,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAA;IACxD,eAAe,EAAE,GAAG,CAAC,sBAAsB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAA;IAClE,gBAAgB,EAAE,WAAW,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;IACpG,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;IAC5F,wBAAwB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACrC,gCAAgC,EAAE,MAAM,IAAI,CAAA;CAC7C;AAuED,wBAAgB,uBAAuB,CAAC,IAAI,EAC1C,OAAO,EAAE,8BAA8B,CAAC,IAAI,CAAC,GAC5C,6BAA6B,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"useDataGridAppSelection.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAMpD,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EAEb,eAAe,EACf,yBAAyB,EAC1B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AAC5E,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAC5G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;AAS7B,MAAM,WAAW,8BAA8B,CAAC,IAAI;IAClD,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAA;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IACvI,cAAc,CAAC,EAAE,GAAG,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAAA;IACvD,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACvB,gBAAgB,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IACpC,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAA;IAC9E,0BAA0B,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAChF;AAED,MAAM,WAAW,6BAA6B,CAAC,IAAI;IACjD,iBAAiB,EAAE,GAAG,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAA;IACxD,eAAe,EAAE,GAAG,CAAC,sBAAsB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAA;IAClE,gBAAgB,EAAE,WAAW,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;IACpG,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;IAC5F,wBAAwB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACrC,gCAAgC,EAAE,MAAM,IAAI,CAAA;CAC7C;AAuED,wBAAgB,uBAAuB,CAAC,IAAI,EAC1C,OAAO,EAAE,8BAA8B,CAAC,IAAI,CAAC,GAC5C,6BAA6B,CAAC,IAAI,CAAC,CA4MrC"}
|
|
@@ -152,6 +152,7 @@ export function useDataGridAppSelection(options) {
|
|
|
152
152
|
return null;
|
|
153
153
|
}
|
|
154
154
|
let selectedCellCount = 0;
|
|
155
|
+
let loadedSelectedCellCount = 0;
|
|
155
156
|
let numericCount = 0;
|
|
156
157
|
let numericSum = 0;
|
|
157
158
|
let numericMin = Number.POSITIVE_INFINITY;
|
|
@@ -164,20 +165,21 @@ export function useDataGridAppSelection(options) {
|
|
|
164
165
|
const endColumn = Math.max(0, Math.min(columnCount - 1, Math.max(range.startCol, range.endCol)));
|
|
165
166
|
for (let rowIndex = startRow; rowIndex <= endRow; rowIndex += 1) {
|
|
166
167
|
const rowNode = options.resolveSelectionRowAtIndex?.(rowIndex) ?? runtime.api.rows.get(rowIndex);
|
|
167
|
-
if (!rowNode || rowNode.kind === "group") {
|
|
168
|
-
continue;
|
|
169
|
-
}
|
|
170
168
|
for (let columnIndex = startColumn; columnIndex <= endColumn; columnIndex += 1) {
|
|
171
169
|
const cellKey = `${rowIndex}:${columnIndex}`;
|
|
172
170
|
if (seenCells.has(cellKey)) {
|
|
173
171
|
continue;
|
|
174
172
|
}
|
|
175
|
-
seenCells.add(cellKey);
|
|
176
|
-
selectedCellCount += 1;
|
|
177
173
|
const column = resolveSelectionColumnAtIndex(options.visibleColumns.value, columnIndex, hasRowSelectionColumn);
|
|
178
174
|
if (!column?.key) {
|
|
179
175
|
continue;
|
|
180
176
|
}
|
|
177
|
+
seenCells.add(cellKey);
|
|
178
|
+
selectedCellCount += 1;
|
|
179
|
+
if (!rowNode || rowNode.kind === "group") {
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
loadedSelectedCellCount += 1;
|
|
181
183
|
const rawValue = readSelectionCellValue(rowNode, column, options.readSelectionCell);
|
|
182
184
|
const numericValue = typeof rawValue === "number" ? rawValue : Number(rawValue);
|
|
183
185
|
if (!Number.isFinite(numericValue)) {
|
|
@@ -195,10 +197,12 @@ export function useDataGridAppSelection(options) {
|
|
|
195
197
|
}
|
|
196
198
|
return {
|
|
197
199
|
count: selectedCellCount,
|
|
200
|
+
loadedCount: loadedSelectedCellCount,
|
|
198
201
|
sum: numericCount > 0 ? numericSum : null,
|
|
199
202
|
min: numericCount > 0 ? numericMin : null,
|
|
200
203
|
max: numericCount > 0 ? numericMax : null,
|
|
201
204
|
average: numericCount > 0 ? numericSum / numericCount : null,
|
|
205
|
+
isPartial: loadedSelectedCellCount < selectedCellCount,
|
|
202
206
|
};
|
|
203
207
|
});
|
|
204
208
|
const selectionAggregatesLabel = computed(() => {
|
|
@@ -206,7 +210,10 @@ export function useDataGridAppSelection(options) {
|
|
|
206
210
|
if (!summary) {
|
|
207
211
|
return "";
|
|
208
212
|
}
|
|
209
|
-
|
|
213
|
+
const loadedLabel = summary.isPartial
|
|
214
|
+
? ` · loaded ${aggregateNumberFormatter.format(summary.loadedCount)}`
|
|
215
|
+
: "";
|
|
216
|
+
return `Selection: count ${aggregateNumberFormatter.format(summary.count)}${loadedLabel} · sum ${formatAggregateNumber(summary.sum)} · min ${formatAggregateNumber(summary.min)} · max ${formatAggregateNumber(summary.max)} · avg ${formatAggregateNumber(summary.average)}`;
|
|
210
217
|
});
|
|
211
218
|
return {
|
|
212
219
|
selectionSnapshot,
|
|
@@ -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,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAE3G,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAEzF,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"useDataGridAppViewport.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppViewport.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,8 @@ const DATA_GRID_PERF_TRACE_QUERY_PARAM = "dgPerfTrace";
|
|
|
4
4
|
const DATA_GRID_PERF_TRACE_STORAGE_KEY = "affino-datagrid-perf-trace";
|
|
5
5
|
const DATA_GRID_PERF_STORE_KEY = "__AFFINO_DATAGRID_PERF__";
|
|
6
6
|
const DATA_GRID_PERF_SAMPLE_LIMIT = 400;
|
|
7
|
+
const DATA_GRID_HORIZONTAL_SCROLL_IDLE_MS = 120;
|
|
8
|
+
const DATA_GRID_ACTIVE_HORIZONTAL_OVERSCAN_MULTIPLIER = 3;
|
|
7
9
|
function parseDataGridBooleanToken(value) {
|
|
8
10
|
if (!value) {
|
|
9
11
|
return null;
|
|
@@ -219,6 +221,10 @@ export function useDataGridAppViewport(options) {
|
|
|
219
221
|
let lastVisibleRowSyncPerf = null;
|
|
220
222
|
let pendingViewportScrollTop = 0;
|
|
221
223
|
let pendingViewportScrollLeft = 0;
|
|
224
|
+
let horizontalScrollIdleTimer = null;
|
|
225
|
+
let horizontalScrollActive = false;
|
|
226
|
+
let forceNextColumnWindowSync = false;
|
|
227
|
+
const horizontalScrollIdleRevision = ref(0);
|
|
222
228
|
let cachedViewportElement = null;
|
|
223
229
|
let cachedViewportDimensions = null;
|
|
224
230
|
let lastSyncedColumnRange = null;
|
|
@@ -246,6 +252,31 @@ export function useDataGridAppViewport(options) {
|
|
|
246
252
|
}
|
|
247
253
|
globalThis.clearTimeout(handle);
|
|
248
254
|
};
|
|
255
|
+
const clearHorizontalScrollIdleTimer = () => {
|
|
256
|
+
if (horizontalScrollIdleTimer == null) {
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
globalThis.clearTimeout(horizontalScrollIdleTimer);
|
|
260
|
+
horizontalScrollIdleTimer = null;
|
|
261
|
+
};
|
|
262
|
+
const forcePreciseHorizontalColumnWindow = () => {
|
|
263
|
+
clearHorizontalScrollIdleTimer();
|
|
264
|
+
horizontalScrollActive = false;
|
|
265
|
+
forceNextColumnWindowSync = true;
|
|
266
|
+
horizontalScrollIdleRevision.value += 1;
|
|
267
|
+
};
|
|
268
|
+
const scheduleHorizontalScrollIdleSync = () => {
|
|
269
|
+
clearHorizontalScrollIdleTimer();
|
|
270
|
+
horizontalScrollActive = true;
|
|
271
|
+
horizontalScrollIdleTimer = globalThis.setTimeout(() => {
|
|
272
|
+
horizontalScrollIdleTimer = null;
|
|
273
|
+
horizontalScrollActive = false;
|
|
274
|
+
forceNextColumnWindowSync = true;
|
|
275
|
+
horizontalScrollIdleRevision.value += 1;
|
|
276
|
+
}, DATA_GRID_HORIZONTAL_SCROLL_IDLE_MS);
|
|
277
|
+
const maybeNodeTimer = horizontalScrollIdleTimer;
|
|
278
|
+
maybeNodeTimer.unref?.();
|
|
279
|
+
};
|
|
249
280
|
const captureViewportDimensions = (element) => ({
|
|
250
281
|
clientWidth: element.clientWidth,
|
|
251
282
|
clientHeight: element.clientHeight,
|
|
@@ -381,37 +412,54 @@ export function useDataGridAppViewport(options) {
|
|
|
381
412
|
};
|
|
382
413
|
return value;
|
|
383
414
|
};
|
|
384
|
-
const resolveBufferedViewportColumnMetrics = (columns, visibleStart, visibleEnd, prefix, totalWidth) => {
|
|
415
|
+
const resolveBufferedViewportColumnMetrics = (columns, visibleStart, visibleEnd, prefix, totalWidth, retainMode, forcePrecise) => {
|
|
416
|
+
const overscan = columnOverscan.value;
|
|
385
417
|
const previousRange = lastSyncedColumnRange?.columns === columns
|
|
418
|
+
&& lastSyncedColumnRange.prefix === prefix
|
|
419
|
+
&& lastSyncedColumnRange.totalWidth === totalWidth
|
|
420
|
+
&& lastSyncedColumnRange.overscan === overscan
|
|
386
421
|
? lastSyncedColumnRange
|
|
387
422
|
: null;
|
|
388
|
-
const hysteresis = Math.max(1, Math.floor(
|
|
389
|
-
const retainPreviousRange =
|
|
423
|
+
const hysteresis = retainMode === "active" ? 0 : Math.max(1, Math.floor(overscan / 2));
|
|
424
|
+
const retainPreviousRange = !forcePrecise
|
|
425
|
+
&& previousRange != null
|
|
390
426
|
&& visibleStart >= previousRange.start + hysteresis
|
|
391
427
|
&& visibleEnd <= previousRange.end - hysteresis;
|
|
428
|
+
const activeOverscan = retainMode === "active"
|
|
429
|
+
? Math.max(overscan, Math.ceil(overscan * DATA_GRID_ACTIVE_HORIZONTAL_OVERSCAN_MULTIPLIER))
|
|
430
|
+
: overscan;
|
|
392
431
|
const start = retainPreviousRange
|
|
393
432
|
? previousRange.start
|
|
394
|
-
: Math.max(0, visibleStart -
|
|
433
|
+
: Math.max(0, visibleStart - activeOverscan);
|
|
395
434
|
const end = retainPreviousRange
|
|
396
435
|
? previousRange.end
|
|
397
|
-
: Math.min(columns.length - 1, visibleEnd +
|
|
436
|
+
: Math.min(columns.length - 1, visibleEnd + activeOverscan);
|
|
398
437
|
const leftSpacerWidth = prefix[start] ?? 0;
|
|
399
438
|
const renderedWidth = (prefix[end + 1] ?? totalWidth) - leftSpacerWidth;
|
|
400
439
|
const rightSpacerWidth = Math.max(0, totalWidth - leftSpacerWidth - renderedWidth);
|
|
401
440
|
lastSyncedColumnRange = {
|
|
402
441
|
columns,
|
|
442
|
+
prefix,
|
|
443
|
+
totalWidth,
|
|
444
|
+
overscan,
|
|
403
445
|
start,
|
|
404
446
|
end,
|
|
405
447
|
};
|
|
406
448
|
return resolveViewportColumnMetricsResult(columns, start, end, leftSpacerWidth, rightSpacerWidth);
|
|
407
449
|
};
|
|
408
450
|
const viewportColumnMetrics = computed(() => {
|
|
451
|
+
horizontalScrollIdleRevision.value;
|
|
452
|
+
const forcePrecise = forceNextColumnWindowSync;
|
|
453
|
+
forceNextColumnWindowSync = false;
|
|
409
454
|
const columns = options.visibleColumns.value;
|
|
410
455
|
const totalWidth = mainTrackWidth.value;
|
|
411
456
|
if (!resolveMaybeRef(options.columnVirtualizationEnabled) || columns.length <= 0) {
|
|
412
457
|
lastSyncedColumnRange = columns.length > 0
|
|
413
458
|
? {
|
|
414
459
|
columns,
|
|
460
|
+
prefix: columnPrefixWidths.value,
|
|
461
|
+
totalWidth,
|
|
462
|
+
overscan: columnOverscan.value,
|
|
415
463
|
start: 0,
|
|
416
464
|
end: Math.max(0, columns.length - 1),
|
|
417
465
|
}
|
|
@@ -422,6 +470,9 @@ export function useDataGridAppViewport(options) {
|
|
|
422
470
|
if (availableWidth <= 0) {
|
|
423
471
|
lastSyncedColumnRange = {
|
|
424
472
|
columns,
|
|
473
|
+
prefix: columnPrefixWidths.value,
|
|
474
|
+
totalWidth,
|
|
475
|
+
overscan: columnOverscan.value,
|
|
425
476
|
start: 0,
|
|
426
477
|
end: Math.max(0, columns.length - 1),
|
|
427
478
|
};
|
|
@@ -445,7 +496,7 @@ export function useDataGridAppViewport(options) {
|
|
|
445
496
|
const visibleStart = lo;
|
|
446
497
|
if (visibleStart >= columns.length) {
|
|
447
498
|
const lastIndex = columns.length - 1;
|
|
448
|
-
return resolveBufferedViewportColumnMetrics(columns, lastIndex, lastIndex, prefix, totalWidth);
|
|
499
|
+
return resolveBufferedViewportColumnMetrics(columns, lastIndex, lastIndex, prefix, totalWidth, horizontalScrollActive ? "active" : "precise", forcePrecise);
|
|
449
500
|
}
|
|
450
501
|
// Binary search: last column whose left edge (prefix[i]) < viewportEndPx.
|
|
451
502
|
lo = visibleStart;
|
|
@@ -459,7 +510,7 @@ export function useDataGridAppViewport(options) {
|
|
|
459
510
|
hi = mid - 1;
|
|
460
511
|
}
|
|
461
512
|
const visibleEnd = lo;
|
|
462
|
-
return resolveBufferedViewportColumnMetrics(columns, visibleStart, visibleEnd, prefix, totalWidth);
|
|
513
|
+
return resolveBufferedViewportColumnMetrics(columns, visibleStart, visibleEnd, prefix, totalWidth, horizontalScrollActive ? "active" : "precise", forcePrecise);
|
|
463
514
|
});
|
|
464
515
|
const gridContentStyle = computed(() => {
|
|
465
516
|
const width = indexColumnWidth + mainTrackWidth.value;
|
|
@@ -740,6 +791,14 @@ export function useDataGridAppViewport(options) {
|
|
|
740
791
|
}
|
|
741
792
|
};
|
|
742
793
|
const commitViewportSnapshot = (snapshot, commitOptions) => {
|
|
794
|
+
const previousScrollLeft = viewportScrollLeft.value;
|
|
795
|
+
const shouldForceColumnWindow = commitOptions.forceVisibleRows || commitOptions.measureVisibleRowHeights;
|
|
796
|
+
if (shouldForceColumnWindow) {
|
|
797
|
+
forcePreciseHorizontalColumnWindow();
|
|
798
|
+
}
|
|
799
|
+
else if (snapshot.scrollLeft !== previousScrollLeft) {
|
|
800
|
+
scheduleHorizontalScrollIdleSync();
|
|
801
|
+
}
|
|
743
802
|
viewportScrollLeft.value = snapshot.scrollLeft;
|
|
744
803
|
viewportScrollTop.value = snapshot.scrollTop;
|
|
745
804
|
viewportClientWidth.value = snapshot.clientWidth;
|
|
@@ -886,6 +945,8 @@ export function useDataGridAppViewport(options) {
|
|
|
886
945
|
const cancelScheduledViewportSync = () => {
|
|
887
946
|
pendingViewportSyncForce = false;
|
|
888
947
|
pendingViewportSyncMeasureVisibleRowHeights = false;
|
|
948
|
+
clearHorizontalScrollIdleTimer();
|
|
949
|
+
horizontalScrollActive = false;
|
|
889
950
|
if (viewportSyncRafHandle == null) {
|
|
890
951
|
return;
|
|
891
952
|
}
|
|
@@ -903,6 +964,8 @@ export function useDataGridAppViewport(options) {
|
|
|
903
964
|
}
|
|
904
965
|
cachedViewportElement = null;
|
|
905
966
|
cachedViewportDimensions = null;
|
|
967
|
+
clearHorizontalScrollIdleTimer();
|
|
968
|
+
horizontalScrollActive = false;
|
|
906
969
|
});
|
|
907
970
|
}
|
|
908
971
|
return {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@affino/datagrid-vue",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.36",
|
|
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,10 +75,10 @@
|
|
|
75
75
|
}
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
|
-
"@affino/datagrid-core": "0.3.23",
|
|
79
78
|
"@affino/datagrid-orchestration": "0.3.15",
|
|
80
79
|
"@affino/datagrid-pivot": "0.1.2",
|
|
81
|
-
"@affino/datagrid-worker": "0.1.1"
|
|
80
|
+
"@affino/datagrid-worker": "0.1.1",
|
|
81
|
+
"@affino/datagrid-core": "0.3.24"
|
|
82
82
|
},
|
|
83
83
|
"devDependencies": {
|
|
84
84
|
"@affino/datagrid-theme": "^0.2.2"
|