import { ArrowRightOutlined, DownOutlined, MoreOutlined, RightOutlined } from '@ant-design/icons'; import { Button, Dropdown, Space, message } from 'antd'; import type { ColumnsType, TableProps } from 'antd/es/table'; import { memo, useCallback, useMemo } from 'react'; import { useNavigate, useParams, useSearchParams } from 'react-router-dom'; import { ColumnSettings, DataTable, type TableConfig, isGroup, useFilteredRows, useVisibleColumns } from '../../components/GenericTable'; import { useTableFilters } from '../../components/GenericTable/useTableFilters'; import { useAppSelector } from '../../store/store'; import type { ConsRow } from '../../types/consolidations/consolidations'; import { consConfigBase } from './config'; import { flattenCons } from './flatten'; import { groupAdjacent } from './groupAdjacent'; import { useGrouping } from './useGrouping'; type ActionKey = 'copy' | 'disable_confirm' | 'history'; const ITEMS = [ { key: 'copy', label: 'Добавить версию' }, { key: 'disable_confirm', label: 'Отключить подвтерждение КФО' }, { key: 'history', label: 'История изменений' }, {}, ] as const; const RowActions = memo(function RowActions({ row, onAction, }: { row: ConsRow; onAction: (key: ActionKey, _row: ConsRow) => void; }) { return ( { domEvent.stopPropagation(); onAction(key as ActionKey, row); }, }}> {String(value)} ({row.groupSize}) ); } if (!row.isPrimary) { return ( ↳ {String(value)} ); } return {String(value)}; }, }, ), }), [expanded, toggle], ); const { visibleKeys, setVisibleKeys } = useVisibleColumns(config); const handleDropdownAction = useCallback( (key: ActionKey, _row: ConsRow) => { if (key === 'history') { navigate('/logging'); } else { message.info('Будет позже'); } }, [navigate], ); const extraColumns: ColumnsType = useMemo( () => [ { key: 'actions', title: '', width: 120, render: (_: unknown, row: ConsRow) => (
), }, ], [navigate, group_id, handleDropdownAction], ); const onRow: TableProps['onRow'] = (row) => ({ // выбранная версия живёт в URL (?version=): переживает уход на «К отчётности» и «Назад» onClick: () => setSearchParams({ version: row.id }, { replace: true }), // выбранная версия подсвечена, как в макете [34] style: row.id === searchParams.get('version') ? { background: '#f0f7ee' } : undefined, }); return (

Консолидации

{rawRows.length} шт.
{hasActiveFilters && ( )}
); }