fix(grid): preserve scroll position across transpose toggle

This commit is contained in:
zipg authored and GitHub committed 2026-08-02 10:08:36 +08:00
1 parent fdba3301b4
commit 42d0eedfc7
3 files changed
+50 -4

No files matched your search

+12 -1
View File
@@ -1927,6 +1927,8 @@ const gridStyle = computed(() => ({
const gridHorizontalScrollLeft = ref(0);
const gridViewportWidth = ref(0);
let gridScrollLeftBeforeTranspose = 0;
let gridScrollTopBeforeKeyboardTranspose: number | null = null;
let restoreGridScrollTopAfterTranspose = false;
const {
renderedColumnOffsets,
horizontalColumnWindow,
@@ -6093,13 +6095,18 @@ function toggleKeyboardTranspose(): boolean {
selectedRowIds: selectedRowIds.value,
selectedRange: selectedRange.value,
});
if (next.showTranspose) {
gridScrollTopBeforeKeyboardTranspose = gridScrollerElement()?.scrollTop ?? null;
} else if (gridScrollTopBeforeKeyboardTranspose !== null) {
restoreGridScrollTopAfterTranspose = true;
}
showTranspose.value = next.showTranspose;
transposeRowIndex.value = next.transposeRowIndex;
if (next.showTranspose) {
closeCellDetails();
nextTick(updateTransposeViewport);
if (next.transposeRowIndex !== null) scrollTransposeRecordIntoView(next.transposeRowIndex);
} else {
} else if (!restoreGridScrollTopAfterTranspose) {
scrollGridRowIntoView(requestedRowIndex);
}
return true;
@@ -6825,10 +6832,14 @@ watch(isTransposeMode, (active) => {
return;
}
const scrollTopBeforeTranspose = restoreGridScrollTopAfterTranspose ? (gridScrollTopBeforeKeyboardTranspose ?? undefined) : undefined;
restoreGridScrollTopAfterTranspose = false;
gridScrollTopBeforeKeyboardTranspose = null;
nextTick(() => {
restoreDataGridAfterTranspose({
scroller: gridScrollerElement(),
scrollLeftBeforeTranspose: gridScrollLeftBeforeTranspose,
scrollTopBeforeTranspose,
attachCanvasResizeObserver,
refreshGridScrollerMetrics,
});