import { useEffect } from "react" import { ArrowUpDown, Plus, X, Footprints, Bike, Car, Shield, AlertTriangle, Zap } from "lucide-react" import { useStore } from "../store" import LocationInput from "./LocationInput" import ManeuverList from "./ManeuverList" const TRAVEL_MODES = [ { id: "auto", label: "Drive", Icon: Car }, { id: "foot", label: "Foot", Icon: Footprints }, { id: "mtb", label: "MTB", Icon: Bike }, { id: "atv", label: "ATV", Icon: Car }, { id: "vehicle", label: "4x4", Icon: Car }, ] const BOUNDARY_MODES = [ { id: "strict", label: "Strict", Icon: Shield, title: "Avoid barriers" }, { id: "pragmatic", label: "Cross", Icon: AlertTriangle, title: "Cross with penalty" }, { id: "emergency", label: "Ignore", Icon: Zap, title: "Ignore barriers" }, ] export default function DirectionsPanel({ onClose }) { const routeStart = useStore((s) => s.routeStart) const routeEnd = useStore((s) => s.routeEnd) const routeMode = useStore((s) => s.routeMode) const boundaryMode = useStore((s) => s.boundaryMode) const routeResult = useStore((s) => s.routeResult) const routeLoading = useStore((s) => s.routeLoading) const routeError = useStore((s) => s.routeError) const stops = useStore((s) => s.stops) const userLocation = useStore((s) => s.userLocation) const geoPermission = useStore((s) => s.geoPermission) const setRouteStart = useStore((s) => s.setRouteStart) const setRouteEnd = useStore((s) => s.setRouteEnd) const setRouteMode = useStore((s) => s.setRouteMode) const setBoundaryMode = useStore((s) => s.setBoundaryMode) const computeRoute = useStore((s) => s.computeRoute) const clearRoute = useStore((s) => s.clearRoute) const setDirectionsMode = useStore((s) => s.setDirectionsMode) const addStop = useStore((s) => s.addStop) const removeStop = useStore((s) => s.removeStop) const reorderStops = useStore((s) => s.reorderStops) // Auto-fill origin with GPS if available and origin is empty useEffect(() => { if (!routeStart && geoPermission === "granted" && userLocation) { setRouteStart({ lat: userLocation.lat, lon: userLocation.lon, name: "Your location", source: "gps", }) } }, [routeStart, geoPermission, userLocation, setRouteStart]) // Auto-compute route when both endpoints are set useEffect(() => { if (routeStart && routeEnd) { computeRoute() } }, [routeStart?.lat, routeStart?.lon, routeEnd?.lat, routeEnd?.lon]) const handleSwap = () => { const tempStart = routeStart const tempEnd = routeEnd setRouteStart(tempEnd) setRouteEnd(tempStart) } const handleClose = () => { clearRoute() setDirectionsMode(false) onClose?.() } const handleAddStop = () => { // Insert a stop between origin and destination // For now, this adds to the stops array // The UI will show intermediate stops } // Multi-stop support: show intermediate stops from the stops array const intermediateStops = stops.slice(1, -1) // Everything except first and last return (
Enter addresses, paste coordinates, or click the map