import { DownloadOutlined } from '@ant-design/icons'; import { Button, Space, message } from 'antd'; import { useEffect, useMemo, useState } from 'react'; import { ApiError } from '../../api/client'; import { ColumnSettings, DataTable, useFilteredRows, useVisibleColumns } from '../../components/GenericTable'; import { useTableFilters } from '../../components/GenericTable/useTableFilters'; import { downloadChecklistCsv } from '../../services/api/consolidations'; import { getVersionCard } from '../../services/api/consolidations'; import { setSelectedLegalEntity, setSelectedVersion } from '../../store/slices/consolidations/consolidationsSlice'; import { useAppDispatch, useAppSelector } from '../../store/store'; import type { IVersionCard, MemberRow } from '../../types/consolidations/version_members'; import { saveBlob } from '../../utils/download'; import ChecklistModal from './ChecklistModal'; import { membersConfig } from './config'; import { normalizeData } from './normalize'; import { checklistFilename, responsibleName } from './panelInfo'; export function ConsoleLegalEntitiesTable({ onDrawerOpen, reloadKey }: { onDrawerOpen: () => void; reloadKey: number }) { const dispatch = useAppDispatch(); const [loading, setLoading] = useState(false); const consolidation_id = useAppSelector((s) => s.consolidations.current_version_id); const [checklistOpen, setChecklistOpen] = useState(false); const [consolidationData, setConsolidationData] = useState(null); useEffect(() => { async function getLegalEntities() { if (!consolidation_id) return; setLoading(true); try { setConsolidationData(await getVersionCard(consolidation_id)); } catch (e: unknown) { message.error(e instanceof ApiError ? e.message : 'Не удалось загрузить карточку версии'); } finally { setLoading(false); } } getLegalEntities(); }, [consolidation_id, reloadKey]); const rawRows = useMemo(() => normalizeData(consolidationData), [consolidationData]); const downloadChecklist = async () => { if (!consolidationData) return; try { const { blob, filename } = await downloadChecklistCsv(consolidationData.id); const card = consolidationData; saveBlob(blob, filename ?? checklistFilename(card.company_group.name, card.year, card.quarter)); } catch (e: unknown) { message.error(e instanceof ApiError ? e.message : 'Не удалось скачать чек-лист'); } }; const viewChecklist = () => { if (!consolidationData) return; setChecklistOpen(true); }; const { visibleKeys, setVisibleKeys } = useVisibleColumns(membersConfig); const { rawQuery, columnFilters, setColumnFilters, sort, setSort, resetAll, hasActiveFilters } = useTableFilters(); // single filtered array — title count and table share it const { rows: filtered } = useFilteredRows(rawRows, membersConfig, rawQuery, columnFilters, sort); const onRow = (row: MemberRow) => ({ onClick: () => { dispatch(setSelectedVersion(row.version_id)); dispatch(setSelectedLegalEntity(row.id)); onDrawerOpen(); }, }); return ( <>

Организации

{rawRows.length} шт. {consolidationData && ( // «Утверждён в РФ» / «Верифицирован в ГО» — маршрут согласования, Срез 7 Ответственный: {responsibleName(consolidationData)}   Утверждён в РФ: —   Верифицирован в ГО: — )}
{hasActiveFilters && ( )}
{consolidationData && ( { setChecklistOpen(false); }} onDownload={downloadChecklist} consolidationData={consolidationData} /> )} ); }