/* This file is part of GNU Taler (C) 2021-2023 Taler Systems S.A. GNU Taler is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Taler; see the file COPYING. If not, see */ import { format } from "date-fns"; import { h } from "preact"; import { useEffect, useState } from "preact/hooks"; import { datetimeFormatForSettings, useSettings } from "../../../../hooks/useSettings.js"; interface Props { events: Event[]; } export function Timeline({ events: e }: Props) { const events = [...e]; events.push({ when: new Date(), description: "now", type: "now", }); events.sort((a, b) => a.when.getTime() - b.when.getTime()); const [settings] = useSettings(); const [state, setState] = useState(events); useEffect(() => { const handle = setTimeout(() => { const eventsWithoutNow = state.filter((e) => e.type !== "now"); eventsWithoutNow.push({ when: new Date(), description: "now", type: "now", }); setState(eventsWithoutNow); }, 1000); return () => { clearTimeout(handle); }; }); return (
{events.map((e, i) => { return (
{(() => { switch (e.type) { case "deadline": return (
); case "delivery": return (
); case "start": return (
); case "wired": return (
); case "wired-range": return (
); case "refund": return (
); case "refund-taken": return (
); case "now": return (
); } })()}
{e.description !== "now" &&

{format(e.when, datetimeFormatForSettings(settings))}

}

{e.description}

); })}
); } export interface Event { when: Date; description: string; type: | "start" | "refund" | "refund-taken" | "wired" | "wired-range" | "deadline" | "delivery" | "now"; }