import { Badge, Center, Group, Stack, Text } from "@mantine/core"; import dayjs from "dayjs"; import { clientApi } from "@homarr/api/client"; import { useScopedI18n } from "@homarr/translation/client"; import type { DynamicSelectOption } from "../_inputs/widget-dynamic-select-input"; import type { WidgetComponentProps } from "../definition"; export default function TimetableWidget({ options, integrationIds }: WidgetComponentProps<"timetable">) { // It will always have at least one integration as otherwise the NoIntegrationSelectedError would be thrown in item-content.tsx // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const integrationId = integrationIds[0]!; const t = useScopedI18n("widget.timetable"); if (!options.station) { return
{t("noStation")}
; } return ; } interface TimetableWidgetInnerProps { station: DynamicSelectOption; integrationId: string; } const TimetableWidgetInner = ({ station, integrationId }: TimetableWidgetInnerProps) => { const { data: timetable } = clientApi.widget.timetable.getTimetable.useQuery( { integrationId, stationId: station.value, limit: 10, }, { staleTime: 60 * 1000, }, ); const t = useScopedI18n("widget.timetable"); return ( {t("title", { station: station.label })} {(timetable?.entries ?? []).map((entry) => ( {entry.line && ( {entry.line.name} )} {dayjs(entry.timestamp).format("HH:mm")}{" "} {entry.delay >= 1 && ( +{entry.delay}' )} {entry.location} {entry.platform && ( {entry.platform.name} )} ))} ); };