fix(svod2): grid-no-grow и enableColumnPinning для виртуализации колонок
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
399234a827
commit
b834f1008d
@ -12,7 +12,7 @@ import DenominationSelect from '../../components/common/DenominationSelect';
|
||||
import useDenomination from '../../components/common/useDenomination';
|
||||
import { useSvod } from '../SvodPage/SvodContext';
|
||||
import { SvodFilters } from '../SvodPage/SvodFilters';
|
||||
import { SVOD2_TABLE_CONTAINER_SX, createColumnClassMap, getEstimateTypeClassName } from './svod2Styles';
|
||||
import { SVOD2_LAYOUT_OPTIONS, SVOD2_TABLE_CONTAINER_SX, createColumnClassMap, getEstimateTypeClassName } from './svod2Styles';
|
||||
|
||||
const SHEETS = [
|
||||
{ value: 'GO', label: 'ССП' },
|
||||
@ -273,12 +273,13 @@ const getColumnConfig = (sheet) => {
|
||||
return COLUMN_CONFIG_CACHE.get(sheet);
|
||||
};
|
||||
|
||||
const scaleNumericColumns = (columns, divisor) => columns.map((column) => {
|
||||
const isText = ['name', 'org_name', 'smeta_type', 'smeta_direction', 'section_code', 'contract_number'].includes(column.id);
|
||||
const children = column.columns ? scaleNumericColumns(column.columns, divisor) : undefined;
|
||||
if (isText || children) return { ...column, ...(children ? { columns: children } : {}) };
|
||||
return { ...column, Cell: ({ cell }) => formatValue(cell.getValue(), divisor) };
|
||||
});
|
||||
const scaleNumericColumns = (columns, divisor) =>
|
||||
columns.map((column) => {
|
||||
const isText = ['name', 'org_name', 'smeta_type', 'smeta_direction', 'section_code', 'contract_number'].includes(column.id);
|
||||
const children = column.columns ? scaleNumericColumns(column.columns, divisor) : undefined;
|
||||
if (isText || children) return { ...column, ...(children ? { columns: children } : {}) };
|
||||
return { ...column, Cell: ({ cell }) => formatValue(cell.getValue(), divisor) };
|
||||
});
|
||||
|
||||
const matchesSearch = (row, query) => {
|
||||
const searchableData = {
|
||||
@ -405,6 +406,7 @@ export default function Svod2Page() {
|
||||
enablePagination: false,
|
||||
enableRowVirtualization: true,
|
||||
enableColumnVirtualization: true,
|
||||
...SVOD2_LAYOUT_OPTIONS,
|
||||
columnVirtualizerOptions: getSvod2ColumnVirtualizerOptions,
|
||||
enableTopToolbar: false,
|
||||
enableBottomToolbar: false,
|
||||
@ -487,7 +489,12 @@ export default function Svod2Page() {
|
||||
onChange={(_event, value) => setSheet(value)}
|
||||
sx={{ px: '1rem', minHeight: '3rem', borderBottom: '0.0625rem solid #edf0f2' }}>
|
||||
{SHEETS.map((item) => (
|
||||
<Tab key={item.value} value={item.value} label={item.label} sx={{ textTransform: 'none', alignItems: 'flex-start', textAlign: 'left', minHeight: '3rem' }} />
|
||||
<Tab
|
||||
key={item.value}
|
||||
value={item.value}
|
||||
label={item.label}
|
||||
sx={{ textTransform: 'none', alignItems: 'flex-start', textAlign: 'left', minHeight: '3rem' }}
|
||||
/>
|
||||
))}
|
||||
</Tabs>
|
||||
<SvodFilters
|
||||
|
||||
@ -115,3 +115,10 @@ export const SVOD2_TABLE_CONTAINER_SX = {
|
||||
whiteSpace: 'nowrap',
|
||||
},
|
||||
};
|
||||
|
||||
// Виртуализация колонок требует grid-no-grow (без растяжения ячеек) и enableColumnPinning
|
||||
// (иначе MRT не учитывает закреплённые колонки в левом отступе виртуализатора).
|
||||
export const SVOD2_LAYOUT_OPTIONS = {
|
||||
layoutMode: 'grid-no-grow',
|
||||
enableColumnPinning: true,
|
||||
};
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import test from 'node:test';
|
||||
import {
|
||||
SVOD2_LAYOUT_OPTIONS,
|
||||
SVOD2_TABLE_CONTAINER_SX,
|
||||
createColumnBandMap,
|
||||
createColumnClassMap,
|
||||
@ -65,3 +66,8 @@ test('container styles define cell, band, group-end and pinned rules', () => {
|
||||
assert.ok(SVOD2_TABLE_CONTAINER_SX[key], key);
|
||||
}
|
||||
});
|
||||
|
||||
test('column virtualization layout uses grid-no-grow and column pinning', () => {
|
||||
assert.equal(SVOD2_LAYOUT_OPTIONS.layoutMode, 'grid-no-grow');
|
||||
assert.equal(SVOD2_LAYOUT_OPTIONS.enableColumnPinning, true);
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user