diff --git a/src/ui/Age/Age.tsx b/src/ui/Age/Age.tsx
index 9d15554640..459fe24962 100644
--- a/src/ui/Age/Age.tsx
+++ b/src/ui/Age/Age.tsx
@@ -2,7 +2,12 @@ import clsx from "clsx";
import dayjs from "dayjs";
import LocalizedFormat from "dayjs/plugin/localizedFormat";
import TimezonePlugin from "dayjs/plugin/timezone";
-import { Tooltip } from "react-tooltip";
+import {
+ Tooltip,
+ TooltipContent,
+ TooltipProvider,
+ TooltipTrigger
+} from "@flanksource-ui/components/ui/tooltip";
import { isEmpty } from "../../utils/date";
import {
datetimePreferenceAtom,
@@ -48,22 +53,22 @@ export default function Age({
datetimePreference,
suffix
);
- return (
- <>
-
- {formattedDate}
-
- {datetimePreference !== "timestamp" && (
-
- )}
- >
+ if (datetimePreference === "timestamp") {
+ return {formattedDate};
+ }
+
+ return (
+
+
+
+ {formattedDate}
+
+
+
+
+
+
);
}
@@ -73,34 +78,45 @@ export default function Age({
if (duration.asMilliseconds() < 1000) {
return (
- <>
-
- {duration.asMilliseconds()}ms
-
-
- >
+
+
+
+ {duration.asMilliseconds()}ms
+
+
+
+
+
+
);
}
return (
- <>
-
- {_from.local().to(_to, !suffix)}
-
-
- >
+
+
+
+
+ {_from.local().to(_to, !suffix)}
+
+
+
+
+
+
+
);
}
@@ -111,6 +127,61 @@ export function formatDateForTooltip(
return formatDayjs(datetime, displayTimezone, "timestamp", false);
}
+function FullTimestampTooltip({ datetime }: { datetime: dayjs.Dayjs }) {
+ return (
+
+
+
+ );
+}
+
+function FullTimestampRows({ datetime }: { datetime: dayjs.Dayjs }) {
+ const browserTimezoneOffset = datetime.local().format("Z");
+ const browserTimestamp = datetime.local().format("YYYY-MM-DD HH:mm:ss");
+ const utcTimestamp = datetime.tz("UTC").format("YYYY-MM-DD HH:mm:ss");
+
+ return (
+
+
{formatRelativeLong(datetime)}
+
+
+ {browserTimezoneOffset}
+
+ {browserTimestamp}
+
+
+ UTC
+ {utcTimestamp}
+
+
+ );
+}
+
+function formatRelativeLong(datetime: dayjs.Dayjs) {
+ const now = dayjs();
+ const diffSeconds = datetime.diff(now, "second");
+ const absSeconds = Math.abs(diffSeconds);
+
+ const units: Array<{ unit: Intl.RelativeTimeFormatUnit; seconds: number }> = [
+ { unit: "year", seconds: 365 * 24 * 60 * 60 },
+ { unit: "month", seconds: 30 * 24 * 60 * 60 },
+ { unit: "day", seconds: 24 * 60 * 60 },
+ { unit: "hour", seconds: 60 * 60 },
+ { unit: "minute", seconds: 60 },
+ { unit: "second", seconds: 1 }
+ ];
+
+ const selected =
+ units.find(({ seconds }) => absSeconds >= seconds) ??
+ units[units.length - 1];
+ const value = Math.round(diffSeconds / selected.seconds);
+
+ return new Intl.RelativeTimeFormat("en", {
+ numeric: "always",
+ style: "long"
+ }).format(value, selected.unit);
+}
+
export function formatDayjs(
datetime: dayjs.Dayjs,
displayTimezone: string,