/* This file is part of GNU Taler (C) 2022 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 { AbsoluteTime, Duration } from "@gnu-taler/taler-util"; import { useTranslationContext } from "@gnu-taler/web-util/browser"; import { formatISO, format, formatDuration, intervalToDuration } from "date-fns"; import { Fragment, h, VNode } from "preact"; /** * * @param timestamp time to be formatted * @param relative duration threshold, if the difference is lower * the timestamp will be formatted as relative time from "now" * * @returns */ export function Time({ timestamp, relative, format: formatString, }: { timestamp: AbsoluteTime | undefined; relative?: Duration, format: string; }): VNode { const { i18n, dateLocale } = useTranslationContext() if (!timestamp) return if (timestamp.t_ms === "never") { return } const now = AbsoluteTime.now(); const diff = AbsoluteTime.difference(now, timestamp) if (relative && now.t_ms !== "never" && Duration.cmp(diff, relative) === -1) { const d = intervalToDuration({ start: now.t_ms, end: timestamp.t_ms }) d.seconds = 0 const duration = formatDuration(d, { locale: dateLocale }) const isFuture = AbsoluteTime.cmp(now, timestamp) < 0 if (isFuture) { return } else { return } } return ( ); }