fix(grid): preserve scroll position across transpose toggle
This commit is contained in:
3 files changed
+50
-4
No files matched your search
@@ -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,
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user