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