From 30c5b3d144b22685b6a20ead78954fa111a2f763 Mon Sep 17 00:00:00 2001 From: Scout Knight-Pheng Date: Sat, 7 Mar 2026 18:40:57 -0800 Subject: [PATCH 1/3] feat: routing search bar focuses on open --- .../features/search/SearchPanel.tsx | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/frontend/calpoly-map/src/components/features/search/SearchPanel.tsx b/frontend/calpoly-map/src/components/features/search/SearchPanel.tsx index 0022ad7..228738d 100644 --- a/frontend/calpoly-map/src/components/features/search/SearchPanel.tsx +++ b/frontend/calpoly-map/src/components/features/search/SearchPanel.tsx @@ -61,6 +61,7 @@ export function SearchPanel({ cameraMove, cameraFitRoute, bottomSheetPosition, o const routingSearchSheetRef = useRef(null); const routeStartInputRef = useRef(null); const routeEndInputRef = useRef(null); + const routingSearchInputRef = useRef(null); const routingSearchSnapPoints = useMemo(() => ["85%"], []); @@ -151,6 +152,11 @@ export function SearchPanel({ cameraMove, cameraFitRoute, bottomSheetPosition, o [setSearchQuery], ); + const blurRoutingInputs = useCallback(() => { + routeStartInputRef.current?.blur(); + routeEndInputRef.current?.blur(); + }, []); + // Opens the routing search based on which field is selected const openRoutingSearchSheet = useCallback( (field: "start" | "end") => { @@ -158,19 +164,15 @@ export function SearchPanel({ cameraMove, cameraFitRoute, bottomSheetPosition, o setSearchQuery(""); setFocused(true); setRoutingSearchSheetOpen(true); + blurRoutingInputs(); requestAnimationFrame(() => { routingSearchSheetRef.current?.snapToIndex(0); }); }, - [setSearchQuery], + [blurRoutingInputs, setSearchQuery], ); - const blurRoutingInputs = useCallback(() => { - routeStartInputRef.current?.blur(); - routeEndInputRef.current?.blur(); - }, []); - const closeRoutingSearchSheet = useCallback(() => { setRoutingSearchSheetOpen(false); setFocused(false); @@ -807,6 +809,7 @@ export function SearchPanel({ cameraMove, cameraFitRoute, bottomSheetPosition, o @@ -828,11 +830,24 @@ export function SearchPanel({ cameraMove, cameraFitRoute, bottomSheetPosition, o closeRoutingSearchSheet, endValue, handleRoutingSearchChange, - routingSearchSheetOpen, startValue, ], ); + useEffect(() => { + if (!routingSearchSheetOpen) { + return; + } + + const focusTimer = setTimeout(() => { + routingSearchInputRef.current?.focus(); + }, 140); + + return () => { + clearTimeout(focusTimer); + }; + }, [activeField, routingSearchSheetOpen]); + // Auto-fill start as "My location" when routing becomes active useEffect(() => { if (!routingActive || hasAutoFilledStart || !userLocation) return; From 2e73d80903d116b13fe910a58e22054ac34cc333 Mon Sep 17 00:00:00 2001 From: Scout Knight-Pheng Date: Sat, 7 Mar 2026 19:14:16 -0800 Subject: [PATCH 2/3] feat: keyboard and bottomsheet dismisses correctly and routing search bool exported --- .../src/components/features/search/SearchPanel.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/frontend/calpoly-map/src/components/features/search/SearchPanel.tsx b/frontend/calpoly-map/src/components/features/search/SearchPanel.tsx index 228738d..c20ec21 100644 --- a/frontend/calpoly-map/src/components/features/search/SearchPanel.tsx +++ b/frontend/calpoly-map/src/components/features/search/SearchPanel.tsx @@ -29,6 +29,7 @@ interface Props { cameraMove: (coordinates: number[]) => void; cameraFitRoute: (start: number[], end: number[]) => void; bottomSheetPosition: SharedValue; + routingSearchSheetChange: (change : boolean) => void; onNavigate: (feature: Feature) => void; } @@ -55,7 +56,7 @@ type SearchRow = item: SavedPlace; }; -export function SearchPanel({ cameraMove, cameraFitRoute, bottomSheetPosition, onNavigate }: Props) { +export function SearchPanel({ cameraMove, cameraFitRoute, bottomSheetPosition, routingSearchSheetChange, onNavigate }: Props) { // Bottom sheet controls const sheetRef = useRef(null); const routingSearchSheetRef = useRef(null); @@ -106,7 +107,7 @@ export function SearchPanel({ cameraMove, cameraFitRoute, bottomSheetPosition, o } = useMapContext(); const snapPoints = useMemo( - () => routingActive ? ["28%", "50%", "65%", "85%"] : ["14%", "35%", "55%", "75%"], + () => routingActive ? ["34%", "50%", "65%", "85%"] : ["14%", "35%", "55%", "75%"], [routingActive], ); @@ -155,6 +156,7 @@ export function SearchPanel({ cameraMove, cameraFitRoute, bottomSheetPosition, o const blurRoutingInputs = useCallback(() => { routeStartInputRef.current?.blur(); routeEndInputRef.current?.blur(); + Keyboard.dismiss(); }, []); // Opens the routing search based on which field is selected @@ -173,6 +175,11 @@ export function SearchPanel({ cameraMove, cameraFitRoute, bottomSheetPosition, o [blurRoutingInputs, setSearchQuery], ); + useEffect(() => { + routingSearchSheetChange?.(routingSearchSheetOpen); +}, [routingSearchSheetOpen, routingSearchSheetChange]); + + const closeRoutingSearchSheet = useCallback(() => { setRoutingSearchSheetOpen(false); setFocused(false); From 9b01457b8cc94d8074400f6039d8e1cf5ef00156 Mon Sep 17 00:00:00 2001 From: Scout Knight-Pheng Date: Sat, 7 Mar 2026 19:20:18 -0800 Subject: [PATCH 3/3] fix: user location button no longer visible when routing sheet search is open --- .../calpoly-map/src/components/map/MapContainer.tsx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/frontend/calpoly-map/src/components/map/MapContainer.tsx b/frontend/calpoly-map/src/components/map/MapContainer.tsx index fa171c8..2ecf0d6 100644 --- a/frontend/calpoly-map/src/components/map/MapContainer.tsx +++ b/frontend/calpoly-map/src/components/map/MapContainer.tsx @@ -223,6 +223,8 @@ export function MapContainer({ const searchPanelHeight = useSharedValue(0); const windowHeight = Dimensions.get("window").height; + const [routingSearchSheetOpen, setRoutingSearchSheetOpen] = useState(false); + // Hide the recenter button when the bottom sheet extends past it const locationButtonStyle = useAnimatedStyle(() => { @@ -598,13 +600,15 @@ export function MapContainer({ cameraMove={handleCameraMove} cameraFitRoute={handleCameraFitRoute} bottomSheetPosition={searchPanelHeight} + routingSearchSheetChange={setRoutingSearchSheetOpen} onNavigate={handleNavigate} /> )} - - - - + {!routingSearchSheetOpen &&( + + + + )}