Merge pull request '[AURORA-1060] - Вирутальный рендеринг' (#34) from AURORA-1060 into test

Reviewed-on: #34
This commit is contained in:
Veronika 2026-06-05 12:01:35 +03:00
commit d6a8f5ae58

View File

@ -22,9 +22,10 @@ import {
} from './constants/tableConfig'; } from './constants/tableConfig';
import { useRealtime } from './contexts/RealtimeContext'; import { useRealtime } from './contexts/RealtimeContext';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
import { CircularProgress } from '@mui/material';
const RealtimeTable = ({ formType, formId, sheetName, direction }) => { const RealtimeTable = ({ formType, formId, sheetName, direction }) => {
const { data, setData } = useRealtimeData(formId, sheetName, direction); const { data, setData, isLoading: isTableLoading } = useRealtimeData(formId, sheetName, direction);
const [globalFilter, setGlobalFilter] = useState(''); const [globalFilter, setGlobalFilter] = useState('');
const [showColumnFilters, setShowColumnFilters] = useState(false); const [showColumnFilters, setShowColumnFilters] = useState(false);
const [selectedColumn, setSelectedColumn] = useState(); const [selectedColumn, setSelectedColumn] = useState();
@ -65,7 +66,7 @@ const RealtimeTable = ({ formType, formId, sheetName, direction }) => {
const { headerPortalRef, containerRef } = useHeaderPortal(); const { headerPortalRef, containerRef } = useHeaderPortal();
const { sizeMult, setSizeMult, tableScaleStyle, tableWrapperStyle } = const { sizeMult, setSizeMult, tableScaleStyle, tableWrapperStyle } =
useTableScale(containerRef); useTableScale();
const [columnsConfig, setColumnsConfig] = useState(null); const [columnsConfig, setColumnsConfig] = useState(null);
@ -125,11 +126,19 @@ const RealtimeTable = ({ formType, formId, sheetName, direction }) => {
columns, columns,
data: data, data: data,
enableRowVirtualization: true, enableRowVirtualization: true,
enableColumnVirtualization: true,
rowVirtualizerOptions: { rowVirtualizerOptions: {
overscan: 50, overscan: 30,
scrollPaddingStart: 0, scrollPaddingStart: 0,
scrollPaddingEnd: 0, scrollPaddingEnd: 0,
}, },
columnVirtualizerOptions: ({ table }) => ({
overscan: 5,
measureElement: (el) => {
const index = Number(el?.getAttribute?.('data-index'));
return table.getVisibleLeafColumns()[index]?.getSize() ?? 0;
},
}),
enableRowSelection: true, enableRowSelection: true,
onRowSelectionChange: setRowSelection, onRowSelectionChange: setRowSelection,
onColumnSizingChange: setColumnSizing, onColumnSizingChange: setColumnSizing,
@ -141,20 +150,15 @@ const RealtimeTable = ({ formType, formId, sheetName, direction }) => {
columnVisibility, columnVisibility,
globalFilter, globalFilter,
showColumnFilters, showColumnFilters,
rowSelection rowSelection,
}, },
initialState: { initialState: {
expanded: true expanded: true
}, },
meta: tableMeta, meta: tableMeta,
muiTableHeadCellProps: ({ column }) => ({ muiTableHeadCellProps: {
sx: { sx: { boxSizing: 'border-box' },
width: column.getSize(), },
minWidth: column.getSize(),
maxWidth: column.getSize(),
boxSizing: 'border-box',
},
}),
muiTableBodyCellProps: getTableHeadCellStyles, muiTableBodyCellProps: getTableHeadCellStyles,
muiTableHeadProps: { muiTableHeadProps: {
sx: { sx: {
@ -231,10 +235,6 @@ const RealtimeTable = ({ formType, formId, sheetName, direction }) => {
setRowSelection({}); setRowSelection({});
}, [rowSelection, table]) }, [rowSelection, table])
if (!data) {
return <div>Загрузка...</div>;
}
return ( return (
<> <>
<SettingsPanel <SettingsPanel
@ -266,6 +266,22 @@ const RealtimeTable = ({ formType, formId, sheetName, direction }) => {
> >
<MaterialReactTable table={table} /> <MaterialReactTable table={table} />
{isTableLoading && (
<div
style={{
position: 'absolute',
inset: 0,
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
background: 'rgba(255, 255, 255, 0.6)',
zIndex: 2,
}}
>
<CircularProgress />
</div>
)}
{headerPortalRef.current && {headerPortalRef.current &&
createPortal( createPortal(
<TableHead <TableHead