import { useEffect, useState } from 'react'; import InteractiveInvestmentMap, { type InvestmentMapArea, } from './interactive-investment-map'; const noPoints: [] = []; type Context = { selected_geometry_available: boolean; context_geometry_count: number; areas: InvestmentMapArea[]; truncated: boolean; }; export default function TerritoryGeometryPreview({ territoryId, management = false, endpoint: suppliedEndpoint, label = 'Cobertura cartográfica da seleção', }: { territoryId?: string; management?: boolean; endpoint?: string; label?: string; }) { const [context, setContext] = useState(null); const [error, setError] = useState(''); useEffect(() => { setContext(null); setError(''); if (!territoryId) return; const controller = new AbortController(); const endpoint = suppliedEndpoint ?? (management ? '/management/territory-geometries' : '/api/v1/investment/territory-geometries'); void fetch( `${endpoint}?${new URLSearchParams({ territory_id: territoryId })}`, { signal: controller.signal, headers: { Accept: 'application/json' }, }, ) .then(async (response) => { if (!response.ok) throw new Error( 'Não foi possível consultar os limites administrativos.', ); return response.json() as Promise; }) .then((data) => { if (!controller.signal.aborted) setContext(data); }) .catch((e: unknown) => { if (!controller.signal.aborted) setError( e instanceof Error ? e.message : 'Erro de ligação.', ); }); return () => controller.abort(); }, [territoryId, management, suppliedEndpoint]); if (!territoryId) return null; return (

Território selecionado no cadastro.

{error &&

{error}

} {!context && !error &&

A consultar geometria…

} {context && ( <>

{context.selected_geometry_available ? 'Limite administrativo disponível para este território.' : 'Sem limite administrativo acessível para este território neste perfil.'}

{!context.selected_geometry_available && context.areas.length > 0 && (

O mapa mostra apenas limites dos níveis superiores como contexto. Estes limites não representam o território seleccionado.

)}

{context.context_geometry_count} limites disponíveis na hierarquia selecionada. São contexto administrativo, não perímetro nem disponibilidade de investimento. A edição e a atualidade jurídica são informações distintas.

{context.truncated && (

Exibidos os primeiros 100 limites; cobertura incompleta.

)} {context.areas.length > 0 && ( )}
    {context.areas.map((area, index) => (
  • {area.title} · {area.selected_territory ? 'Território seleccionado' : 'Contexto de nível superior'} · Fonte:{' '} {area.source_reference ?? 'Não indicada'} · Edição: {area.source_date ?? 'Não indicada'}
  • ))}
)}
); }