import InteractiveInvestmentMap from './interactive-investment-map'; import { control } from '@/pages/management/shared'; import type { MultiPolygon } from 'geojson'; type Point = [number | null, number | null]; export default function OpportunityParcelGeometry({ value, onChange, }: { value: unknown; onChange: (v: unknown) => void; }) { const data = value && typeof value === 'object' ? (value as { coordinates?: Point[][][] }) : {}; const polygons = Array.isArray(data.coordinates) ? data.coordinates : []; function replace(p: number, r: number, points: Point[]) { onChange({ type: 'MultiPolygon', coordinates: polygons.map((poly, i) => i === p ? poly.map((ring, j) => (j === r ? points : ring)) : poly, ), }); } const valid = polygons.length > 0 && polygons.every( (poly) => poly.length > 0 && poly.every( (ring) => ring.length >= 4 && ring.every( (point) => point.length === 2 && point.every( (c) => typeof c === 'number' && Number.isFinite(c), ), ) && ring[0][0] === ring.at(-1)?.[0] && ring[0][1] === ring.at(-1)?.[1], ), ); return (

Indique longitude e latitude do perímetro declarado. O limite administrativo serve de contexto; não define a parcela.

{polygons.map((poly, p) => (
Polígono {p + 1} {poly.map((ring, r) => (

{r === 0 ? 'Anel exterior' : `Anel interior ${r}`}

{ring.map((point, i) => (
{[0, 1].map((axis) => ( ))}
))}
))}
))} {valid && ( )}
); }