From c9e2341a5b1e8dc03ba6e43c4e61ed2e5f4038c9 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 13 Mar 2026 14:20:59 +0100 Subject: Fix favourites button in stop header not toggling (#144) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: arielcostas <94913521+arielcostas@users.noreply.github.com> --- src/frontend/app/routes/stops-$id.tsx | 61 +++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 25 deletions(-) (limited to 'src/frontend/app/routes') diff --git a/src/frontend/app/routes/stops-$id.tsx b/src/frontend/app/routes/stops-$id.tsx index 4c2075c..a61e925 100644 --- a/src/frontend/app/routes/stops-$id.tsx +++ b/src/frontend/app/routes/stops-$id.tsx @@ -1,5 +1,5 @@ import { CircleHelp, Eye, EyeClosed, Star } from "lucide-react"; -import { useCallback, useEffect, useState } from "react"; +import { useCallback, useEffect, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { useParams } from "react-router"; import { fetchArrivals } from "~/api/arrivals"; @@ -22,6 +22,37 @@ import StopDataProvider from "../data/StopDataProvider"; import "../tailwind-full.css"; import "./stops-$id.css"; +function StopFavouriteButton({ stopId }: { stopId: string }) { + const { t } = useTranslation(); + const [favourited, setFavourited] = useState(() => + StopDataProvider.isFavourite(stopId) + ); + + const toggle = () => { + if (favourited) { + StopDataProvider.removeFavourite(stopId); + setFavourited(false); + } else { + StopDataProvider.addFavourite(stopId); + setFavourited(true); + } + }; + + return ( + + ); +} + export const getArrivalId = (a: Arrival): string => { return a.tripId; }; @@ -50,7 +81,6 @@ export default function Estimates() { const [dataLoading, setDataLoading] = useState(true); const [dataError, setDataError] = useState(null); - const [favourited, setFavourited] = useState(false); const [isManualRefreshing, setIsManualRefreshing] = useState(false); const [isMapModalOpen, setIsMapModalOpen] = useState(false); const [isHelpModalOpen, setIsHelpModalOpen] = useState(false); @@ -67,29 +97,11 @@ export default function Estimates() { usePageTitle(getStopDisplayName()); - const toggleFavourite = useCallback(() => { - if (favourited) { - StopDataProvider.removeFavourite(stopId); - setFavourited(false); - } else { - StopDataProvider.addFavourite(stopId); - setFavourited(true); - } - }, [favourited, stopId]); - - usePageRightNode( - + const rightNode = useMemo( + () => , + [stopId] ); + usePageRightNode(rightNode); const parseError = (error: any): ErrorInfo => { if (!navigator.onLine) { @@ -153,7 +165,6 @@ export default function Estimates() { loadData(); StopDataProvider.pushRecent(stopId); - setFavourited(StopDataProvider.isFavourite(stopId)); setDataLoading(false); }, [stopId, loadData]); -- cgit v1.3