/** * Author: Simon-Pierre Boucher * Contact: contact@spboucher.ai * Project: Groupe Ka / Ka Maps * * KaDrawAreaMode — l'interface TEMPORAIRE du dessin de zone (v2). Plus de * grosse boîte permanente : pendant le tracé, un bandeau d'instructions * discret ; une fois la zone posée, un CTA contextuel « Voir N propriétés * dans cette zone » + retrait en un geste. Tout disparaît hors du mode. */ import { useEffect, useState, type ReactElement, } from "react"; import { useKaMap } from "./KaMapView.js"; export interface KaDrawAreaModeProps { /** « 184 propriétés » — libellé du compte (le compte vient de l'événement * data du moteur ; l'app peut le surcharger avec son total serveur). */ formatCount?: (n: number) => string; /** Total maîtrisé par l'app (prime sur le compte du moteur). */ count?: number | null; /** Clic sur le CTA (défaut : cadrer la zone). */ onSee?: () => void; /** Zone retirée. */ onClear?: () => void; } export function KaDrawAreaMode(props: KaDrawAreaModeProps): ReactElement | null { const map = useKaMap(); const [drawing, setDrawing] = useState(false); const [hasZone, setHasZone] = useState(false); const [engineCount, setEngineCount] = useState(null); useEffect(() => { if (!map) return; setDrawing(map.isDrawing()); setHasZone(map.getDrawnPolygon() !== null); const offs = [ map.events.on("draw", ({ polygon, drawing: d }) => { setDrawing(d); setHasZone(polygon !== null); }), map.events.on("data", ({ count }) => setEngineCount(count)), ]; return () => offs.forEach((off) => off()); }, [map]); if (!map) return null; if (drawing) { return (
Touchez la carte pour poser des points — refermez sur le premier
); } if (!hasZone) return null; const n = props.count ?? engineCount; const label = n == null ? "Zone dessinée" : props.formatCount ? props.formatCount(n) : `${n.toLocaleString("fr-CA")} résultat${n > 1 ? "s" : ""}`; return (
); }