From 9e553002a2cf83e22897a812daad4823dfb9064b Mon Sep 17 00:00:00 2001 From: VIBVEL47 <161462689+VIBVEL47@users.noreply.github.com> Date: Wed, 8 Jul 2026 08:47:06 +0530 Subject: [PATCH] fix: skip row virtualization for small data grids --- .../js/SchemaView/DataGridView/grid.jsx | 68 +++++++++++++------ .../js/components/PgReactTableStyled.jsx | 3 + 2 files changed, 52 insertions(+), 19 deletions(-) diff --git a/web/pgadmin/static/js/SchemaView/DataGridView/grid.jsx b/web/pgadmin/static/js/SchemaView/DataGridView/grid.jsx index 8366cd44ccd..cea19110d8a 100644 --- a/web/pgadmin/static/js/SchemaView/DataGridView/grid.jsx +++ b/web/pgadmin/static/js/SchemaView/DataGridView/grid.jsx @@ -122,6 +122,17 @@ export default function DataGridView({ ) ).includes(true); + const VIRTUALISE_CELL_BUDGET = 700; // Number of cells to render + const DEFAULT_VIRTUALISE_THRESHOLD = 100; // Number of rows to render + const visibleColCount = table.getVisibleLeafColumns().length; + const virtualiseThreshold = + field.virtualiseThreshold ?? + (visibleColCount > 0 + ? Math.min(400, Math.max(25, + Math.round(VIRTUALISE_CELL_BUDGET / visibleColCount))) + : DEFAULT_VIRTUALISE_THRESHOLD); + const virtualise = rows.length > virtualiseThreshold; + const virtualizer = useVirtualizer({ count: rows.length, getScrollElement: () => tableEleRef.current, @@ -152,32 +163,51 @@ export default function DataGridView({ ref={tableEleRef} table={table} data-test="data-grid-view" tableClassName='DataGridView-table'> - - { - virtualizer.getVirtualItems().map((virtualRow) => { - const row = rows[virtualRow.index]; - return ( + {virtualise ? + + { + virtualizer.getVirtualItems().map((virtualRow) => { + const row = rows[virtualRow.index]; + return ( + virtualizer.measureElement(node)} + style={{ + // This should always be a `style` as it changes on + // scroll. + transform: `translateY(${virtualRow.start}px)`, + }} + > + + + ); + }) + } + + : + + { + rows.map((row, index) => ( virtualizer.measureElement(node)} - style={{ - // This should always be a `style` as it changes on - // scroll. - transform: `translateY(${virtualRow.start}px)`, - }} + data-index={index} + className='pgrt-row--static' > - ); - }) - } - + )) + } + + } diff --git a/web/pgadmin/static/js/components/PgReactTableStyled.jsx b/web/pgadmin/static/js/components/PgReactTableStyled.jsx index 6e18e1b3357..3690a824214 100644 --- a/web/pgadmin/static/js/components/PgReactTableStyled.jsx +++ b/web/pgadmin/static/js/components/PgReactTableStyled.jsx @@ -91,6 +91,9 @@ const StyledDiv = styled('div')(({theme})=>({ flexDirection: 'column', position: 'absolute', width: '100%', + '&.pgrt-row--static': { + position: 'relative', + }, '& .pgrt-row-content': { display: 'flex',