import { useParams } from 'react-router-dom'; import { useData, useDataPage } from '../API/common'; import { Institution, Profession, Specialty } from '../types/survey'; import ReactMarkdown from 'react-markdown'; import { LoadingData } from '../components/LoadingData'; import { useEffect, useMemo, useState } from 'react'; import { LoadingList } from '../components/LoadingList'; export function ProfessionPage() { const { professionId } = useParams<{ professionId: string }>(); const profession = useData('surveys', 'professions', professionId || 0); const specialties = useDataPage('surveys', 'specialties', { profession: professionId || 0 }, !!profession); const [institutionCache, setInstitutionCache] = useState>(new Map()); // Кеширование учебных заведений const institutionsToLoad = useMemo(() => { if (!specialties.items) return []; return specialties.items .map(specialty => specialty.institution) .filter(id => !institutionCache.has(id)); }, [specialties.items, institutionCache]); useEffect(() => { if (institutionsToLoad.length > 0) { Promise.all( institutionsToLoad.map(id => useData('surveys', 'institutions', id, true) ) ).then(newInstitutions => { setInstitutionCache(prev => { const newCache = new Map(prev); newInstitutions.forEach(institution => institution && newCache.set(institution.id, institution)); return newCache; }); }); } }, [institutionsToLoad]); return (

{profession?.name}

{profession?.description || ''}

Где можно обучиться

( )} />
); } function SpecialtyBlock({ specialty, institution, }: { specialty: Specialty; institution: Institution | undefined; }) { return (

{specialty.name}

Учебное заведение: {institution?.name || 'Загрузка...'}

); }