From 8c654e124a097438c5ae4dc3e382cacd3b3fc9e2 Mon Sep 17 00:00:00 2001 From: Sumit Nalavade Date: Fri, 19 Jan 2024 10:09:20 -0600 Subject: [PATCH] Highlight buses on route --- app/components/map/markers/BusMarker.tsx | 9 ++++++++- app/components/sheets/RouteDetails.tsx | 10 ++++++++++ app/stores/useAppStore.ts | 6 ++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/components/map/markers/BusMarker.tsx b/app/components/map/markers/BusMarker.tsx index d9d9f5a..bfebb63 100644 --- a/app/components/map/markers/BusMarker.tsx +++ b/app/components/map/markers/BusMarker.tsx @@ -5,6 +5,8 @@ import BusCallout from '../BusCallout'; import { getLighterColor } from '../../../utils'; import { IVehicle } from 'utils/interfaces'; +import useAppStore from '../../../stores/useAppStore'; + interface Props { bus: IVehicle, tintColor: string, @@ -13,6 +15,11 @@ interface Props { // Bus Marker with icon and callout const BusMarker: React.FC = ({ bus, tintColor, routeName }) => { + const selectedRouteDestination = useAppStore(state => state.selectedRouteDestination); + + const busColor = selectedRouteDestination === bus.directionName ? tintColor : '#808080'; + const borderColor = getLighterColor(busColor); + return ( = ({ bus, tintColor, routeName }) => { pointerEvents="auto" > {/* Bus Icon on Map*/} - + ); diff --git a/app/components/sheets/RouteDetails.tsx b/app/components/sheets/RouteDetails.tsx index 55ff85d..6971e17 100644 --- a/app/components/sheets/RouteDetails.tsx +++ b/app/components/sheets/RouteDetails.tsx @@ -23,6 +23,8 @@ const RouteDetails: React.FC = ({ sheetRef }) => { const currentSelectedRoute = useAppStore((state) => state.selectedRoute); const clearSelectedRoute = useAppStore((state) => state.clearSelectedRoute); + const setSelectedRouteDestination = useAppStore(state => state.setSelectedRouteDestination); + const stopEstimates = useAppStore((state) => state.stopEstimates); const setStopEstimates = useAppStore(state => state.setStopEstimates); @@ -71,9 +73,15 @@ const RouteDetails: React.FC = ({ sheetRef }) => { if (!currentSelectedRoute) return; setSelectedRoute(currentSelectedRoute); + setSelectedRouteDestination(currentSelectedRoute.directionList[0]?.destination ?? null); + loadStopEstimates(); }, [currentSelectedRoute]) + useEffect(() => { + return () => setSelectedRouteDestination(null); + }, []); + async function loadStopEstimates() { if (!currentSelectedRoute || !authToken) return; let allStops: IStop[] = []; @@ -115,6 +123,8 @@ const RouteDetails: React.FC = ({ sheetRef }) => { const handleSetSelectedDirection = (evt: NativeSyntheticEvent) => { setSelectedDirectionIndex(evt.nativeEvent.selectedSegmentIndex); + + setSelectedRouteDestination(selectedRoute?.directionList[evt.nativeEvent.selectedSegmentIndex]?.destination ?? null); } const snapPoints = ['25%', '45%', '85%']; diff --git a/app/stores/useAppStore.ts b/app/stores/useAppStore.ts index 6771efd..d9bb6ef 100644 --- a/app/stores/useAppStore.ts +++ b/app/stores/useAppStore.ts @@ -25,6 +25,9 @@ interface AppState { setSelectedRoute: (selectedRoute: IMapRoute) => void, clearSelectedRoute: () => void, + selectedRouteDestination: string | null, + setSelectedRouteDestination: (selectedRouteDirection: string | null) => void, + selectedRouteCategory: "favorites" | "all", setSelectedRouteCategory: (selectedRouteCategory: "favorites" | "all") => void @@ -82,6 +85,9 @@ const useAppStore = create()((set) => ({ return { selectedRoute: null }; }), + selectedRouteDestination: null, + setSelectedRouteDestination: (selectedRouteDirection) => set(() => ({ selectedRouteDestination: selectedRouteDirection })), + selectedRouteCategory: 'all', setSelectedRouteCategory: (selectedRouteCategory) => set(() => ({ selectedRouteCategory })),