From 120a3c6bddd0fb8d9fa05df4763596956554c025 Mon Sep 17 00:00:00 2001 From: Ariel Costas Guerrero Date: Sun, 28 Dec 2025 23:08:25 +0100 Subject: Improve planning widget --- src/frontend/app/components/PlannerOverlay.tsx | 108 +++++++++++++------------ 1 file changed, 57 insertions(+), 51 deletions(-) (limited to 'src/frontend/app/components/PlannerOverlay.tsx') diff --git a/src/frontend/app/components/PlannerOverlay.tsx b/src/frontend/app/components/PlannerOverlay.tsx index 0320d45..cbb4ac1 100644 --- a/src/frontend/app/components/PlannerOverlay.tsx +++ b/src/frontend/app/components/PlannerOverlay.tsx @@ -1,4 +1,4 @@ -import { MapPin } from "lucide-react"; +import { ChevronUp, Map, MapPin } from "lucide-react"; import React, { useCallback, useEffect, @@ -7,6 +7,7 @@ import React, { useState, } from "react"; import { useTranslation } from "react-i18next"; +import { useNavigate } from "react-router"; import PlaceListItem from "~/components/PlaceListItem"; import { reverseGeocode, @@ -45,9 +46,21 @@ export const PlannerOverlay: React.FC = ({ autoLoad = true, }) => { const { t } = useTranslation(); - const { origin, setOrigin, destination, setDestination, loading, error } = - usePlanner({ autoLoad }); - const [isExpanded, setIsExpanded] = useState(false); + const navigate = useNavigate(); + const { + origin, + setOrigin, + destination, + setDestination, + loading, + error, + setPickingMode, + isExpanded, + setIsExpanded, + recentPlaces, + addRecentPlace, + clearRecentPlaces, + } = usePlanner({ autoLoad }); const [originQuery, setOriginQuery] = useState(origin?.name || ""); const [destQuery, setDestQuery] = useState(""); @@ -61,14 +74,6 @@ export const PlannerOverlay: React.FC = ({ const [favouriteStops, setFavouriteStops] = useState( [] ); - const [recentPlaces, setRecentPlaces] = useState([]); - const RECENT_KEY = `recentPlaces`; - const clearRecentPlaces = useCallback(() => { - setRecentPlaces([]); - try { - localStorage.removeItem(RECENT_KEY); - } catch {} - }, []); const pickerInputRef = useRef(null); @@ -130,43 +135,6 @@ export const PlannerOverlay: React.FC = ({ .catch(() => setFavouriteStops([])); }, []); - // Load recent places from localStorage - useEffect(() => { - try { - const raw = localStorage.getItem(RECENT_KEY); - if (raw) { - const parsed = JSON.parse(raw) as PlannerSearchResult[]; - setRecentPlaces(parsed.slice(0, 20)); - } - } catch { - setRecentPlaces([]); - } - }, []); - - const addRecentPlace = useCallback( - (p: PlannerSearchResult) => { - const key = `${p.lat.toFixed(5)},${p.lon.toFixed(5)}`; - const existing = recentPlaces.filter( - (rp) => `${rp.lat.toFixed(5)},${rp.lon.toFixed(5)}` !== key - ); - const updated = [ - { - name: p.name, - label: p.label, - lat: p.lat, - lon: p.lon, - layer: p.layer, - }, - ...existing, - ].slice(0, 20); - setRecentPlaces(updated); - try { - localStorage.setItem(RECENT_KEY, JSON.stringify(updated)); - } catch {} - }, - [recentPlaces] - ); - const filteredFavouriteStops = useMemo(() => { const q = pickerQuery.trim().toLowerCase(); if (!q) return favouriteStops; @@ -350,7 +318,6 @@ export const PlannerOverlay: React.FC = ({ className="block w-full px-2 py-1 text-left hover:bg-slate-50 dark:hover:bg-slate-800 transition-colors duration-200" onClick={() => { setIsExpanded(true); - openPicker("destination"); }} >
@@ -364,7 +331,7 @@ export const PlannerOverlay: React.FC = ({
+ {!forceExpanded && ( + + )}
@@ -610,6 +587,35 @@ export const PlannerOverlay: React.FC = ({ )} +
  • + +
  • + {(remoteLoading || sortedRemoteResults.length > 0) && (
  • {remoteLoading -- cgit v1.3