import { useEffect, useState } from 'react'; import { api } from '@/pages/investment/shared'; export default function InvestmentCoordinates({ id }: { id: number | string }) { const [data, setData] = useState({ version: 0, latitude: '', longitude: '', source_reference: '', }); const [ready, setReady] = useState(false); const [confirmed, setConfirmed] = useState(false); const [busy, setBusy] = useState(false); const [message, setMessage] = useState(''); useEffect(() => { let active = true; api(`/management/opportunities/${id}/coordinates`) .then((result) => { if (active) { setData({ ...result, latitude: String(result.latitude ?? ''), longitude: String(result.longitude ?? ''), }); setReady(true); } }) .catch((e) => { if (active) setMessage(e.message); }); return () => { active = false; }; }, [id]); return (
{ event.preventDefault(); setBusy(true); try { const result = await api( `/management/opportunities/${id}/coordinates`, { ...data, confirmed_site: confirmed, }, ); setData((previous) => ({ ...previous, version: result.version, })); setMessage( 'Coordenadas guardadas. O marcador acompanha a publicação da oportunidade.', ); } catch (e) { setMessage( e instanceof Error ? e.message : 'Falha ao guardar.', ); } finally { setBusy(false); } }} >

Posição do investimento no mapa

Registe a posição do local em WGS84 e a referência que a confirma.

{(['latitude', 'longitude'] as const).map((field) => ( ))}
{message &&

{message}

}
); }