From 97908d274ee12eb2301fadd5fc445d0f79479a56 Mon Sep 17 00:00:00 2001 From: Ariel Costas Guerrero Date: Sat, 4 Apr 2026 15:44:41 +0200 Subject: Enhance arrival and transit functionality with new vehicle operation logic and transit kind classification --- .../app/components/arrivals/ReducedArrivalCard.tsx | 46 ++++++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) (limited to 'src/frontend/app/components/arrivals/ReducedArrivalCard.tsx') diff --git a/src/frontend/app/components/arrivals/ReducedArrivalCard.tsx b/src/frontend/app/components/arrivals/ReducedArrivalCard.tsx index 19cc8d9..6046ffc 100644 --- a/src/frontend/app/components/arrivals/ReducedArrivalCard.tsx +++ b/src/frontend/app/components/arrivals/ReducedArrivalCard.tsx @@ -1,4 +1,10 @@ -import { AlertTriangle, BusFront, LocateIcon } from "lucide-react"; +import { + AlertTriangle, + ArrowDownRightSquare, + ArrowUpRightSquare, + BusFront, + LocateIcon, +} from "lucide-react"; import React, { useMemo } from "react"; import { useTranslation } from "react-i18next"; import RouteIcon from "~/components/RouteIcon"; @@ -23,10 +29,10 @@ export const ReducedArrivalCard: React.FC = ({ shift, vehicleInformation, operator, + operation, } = arrival; const etaValue = estimate.minutes.toString(); - const etaUnit = t("estimates.minutes", "min"); const timeClass = useMemo(() => { switch (estimate.precision) { @@ -45,9 +51,27 @@ export const ReducedArrivalCard: React.FC = ({ const chips: Array<{ label: string; tone?: string; - kind?: "regular" | "gps" | "delay" | "warning" | "vehicle"; + kind?: + | "regular" + | "gps" + | "delay" + | "warning" + | "vehicle" + | "pickup" + | "dropoff"; }> = []; + if (operation !== "pickup_dropoff") { + chips.push({ + label: + operation === "pickup_only" + ? t("journey.pickup_only", "Solo subida") + : t("journey.dropoff_only", "Solo bajada"), + tone: operation === "pickup_only" ? "pickup" : "dropoff", + kind: operation === "pickup_only" ? "pickup" : "dropoff", + }); + } + if (operator) { chips.push({ label: operator, @@ -151,6 +175,7 @@ export const ReducedArrivalCard: React.FC = ({ headsign.badge, vehicleInformation, operator, + operation, ]); const isClickable = !!onClick && estimate.precision !== "past"; @@ -184,6 +209,14 @@ export const ReducedArrivalCard: React.FC = ({ {metaChips.map((chip, idx) => { let chipColourClasses = ""; switch (chip.tone) { + case "pickup": + chipColourClasses = + "bg-green-600/10 dark:bg-green-600/20 text-green-700 dark:text-green-300"; + break; + case "dropoff": + chipColourClasses = + "bg-orange-400/10 dark:bg-orange-600/20 text-orange-700 dark:text-orange-300"; + break; case "delay-ok": chipColourClasses = "bg-green-600/10 dark:bg-green-600/20 text-green-700 dark:text-green-300"; @@ -223,6 +256,13 @@ export const ReducedArrivalCard: React.FC = ({ {chip.kind === "vehicle" && ( )} + {/** I tried imitating the tachograph symbols for loading/unloading, but "bottom right" was better distinguished compared to "bottom left" */} + {chip.kind === "pickup" && ( + + )} + {chip.kind === "dropoff" && ( + + )} {chip.label} ); -- cgit v1.3