diff --git a/web/src/components/RealtimeTable/RealtimeTable.jsx b/web/src/components/RealtimeTable/RealtimeTable.jsx index 8a0e1c3..7816407 100644 --- a/web/src/components/RealtimeTable/RealtimeTable.jsx +++ b/web/src/components/RealtimeTable/RealtimeTable.jsx @@ -19,6 +19,7 @@ import { BASE_TABLE_CONFIG, getTableHeadCellStyles, getTablePaperStyles, + TABLE_ROW_HEIGHT, } from './constants/tableConfig'; import { useRealtime } from './contexts/RealtimeContext'; import { toast } from 'react-toastify'; @@ -66,10 +67,15 @@ const RealtimeTable = ({ formType, formId, sheetName, direction }) => { } = useColumnSettings(`${formId}_${formType}_${sheetName}_${direction}`); const { headerPortalRef, containerRef } = useHeaderPortal(); + const rowVirtualizerRef = useRef(null); const { sizeMult, setSizeMult, tableScaleStyle, tableWrapperStyle } = useTableScale(); + useEffect(() => { + rowVirtualizerRef.current?.measure?.(); + }, [sizeMult]); + const [columnsConfig, setColumnsConfig] = useState(null); useEffect(() => { @@ -129,10 +135,13 @@ const RealtimeTable = ({ formType, formId, sheetName, direction }) => { data: data, enableRowVirtualization: true, enableColumnVirtualization: true, + rowVirtualizerInstanceRef: rowVirtualizerRef, rowVirtualizerOptions: { overscan: 30, scrollPaddingStart: 0, scrollPaddingEnd: 0, + estimateSize: () => TABLE_ROW_HEIGHT, + measureElement: (el) => el?.offsetHeight || TABLE_ROW_HEIGHT, }, onEditingCellChange: (cell) => { if (cell) { diff --git a/web/src/components/RealtimeTable/constants/tableConfig.js b/web/src/components/RealtimeTable/constants/tableConfig.js index a237ae0..2ac68e7 100644 --- a/web/src/components/RealtimeTable/constants/tableConfig.js +++ b/web/src/components/RealtimeTable/constants/tableConfig.js @@ -1,3 +1,5 @@ +export const TABLE_ROW_HEIGHT = 80; + export const BASE_TABLE_CONFIG = { muiTableRowProps: { sx: { height: "5rem" },