import { message } from 'antd'; import { useEffect, useState } from 'react'; import { useParams, useSearchParams } from 'react-router-dom'; import { ApiError } from '../api/client'; import PageTitle from '../components/PageTitle'; import { fetchOneCompanyGroup } from '../services/api/directories/company_groups'; import { setSelectedVersion } from '../store/slices/consolidations/consolidationsSlice'; import { getConsolidationsListThunk } from '../store/slices/consolidations/thunks'; import { useAppDispatch } from '../store/store'; import { ConsoleLegalEntitiesTable } from '../widgets/ConsoleLegalEntities/ConsoleLegalEntities'; import { ConsoleTableWidget } from '../widgets/ConsoleTable/ConsoleTable'; import { DocumentsDrawer } from '../widgets/FilesDrawer/FilesDrawer'; // unwrap() бросает rejectValue (строку), fetch группы — ApiError function errorText(e: unknown): string { if (e instanceof ApiError) return e.message; if (typeof e === 'string') return e; return 'Не удалось загрузить группу компаний'; } export function ConsolidationPage() { const [drawerOpen, setDrawerOpen] = useState(false); const [reloadKey, setReloadKey] = useState(0); const { group_id } = useParams(); const [searchParams] = useSearchParams(); const versionParam = searchParams.get('version'); const dispatch = useAppDispatch(); const [comGroupName, setComGroupName] = useState(''); const [locationPath, setLocationPath] = useState('Отчётность>'); const [desc, setDesc] = useState(''); useEffect(() => { if (!group_id) return; async function getAllInfo(id: string) { try { const data = await fetchOneCompanyGroup(id); setComGroupName(data.name); setLocationPath(`Отчётность>${data.name}>Консолидации`); setDesc(`${data.legal_entities_count} организаций`); await dispatch(getConsolidationsListThunk(id)).unwrap(); } catch (e: unknown) { message.error(errorText(e)); } } getAllInfo(group_id); }, [dispatch, group_id]); // выбор версии следует за ?version= и не перезагружает список useEffect(() => { dispatch(setSelectedVersion(versionParam)); }, [dispatch, versionParam]); // уход со страницы сбрасывает выбор (при смене группы ?version= пропадает из URL — выбор сбросит эффект выше) useEffect(() => { return () => { dispatch(setSelectedVersion(null)); }; }, [dispatch]); return (