Skip to content

Commit 6a92df3

Browse files
committed
Refresh the RelativeDateTime each min
1 parent 0818772 commit 6a92df3

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

apps/webapp/app/components/primitives/DateTime.tsx

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { GlobeAltIcon, GlobeAmericasIcon } from "@heroicons/react/20/solid";
22
import { useRouteLoaderData } from "@remix-run/react";
33
import { formatDistanceToNow } from "date-fns";
44
import { Laptop } from "lucide-react";
5-
import { memo, type ReactNode, useMemo, useSyncExternalStore } from "react";
5+
import { memo, type ReactNode, useEffect, useMemo, useState, useSyncExternalStore } from "react";
66
import { CopyButton } from "./CopyButton";
77
import { useLocales } from "./LocaleProvider";
88
import { Paragraph } from "./Paragraph";
@@ -363,15 +363,30 @@ type RelativeDateTimeProps = {
363363
timeZone?: string;
364364
};
365365

366+
function getRelativeText(date: Date): string {
367+
const text = formatDistanceToNow(date, { addSuffix: true });
368+
return text.charAt(0).toUpperCase() + text.slice(1);
369+
}
370+
366371
export const RelativeDateTime = ({ date, timeZone }: RelativeDateTimeProps) => {
367372
const locales = useLocales();
368373
const userTimeZone = useUserTimeZone();
369374

370375
const realDate = useMemo(() => (typeof date === "string" ? new Date(date) : date), [date]);
371376

372-
const relativeText = useMemo(() => {
373-
const text = formatDistanceToNow(realDate, { addSuffix: true });
374-
return text.charAt(0).toUpperCase() + text.slice(1);
377+
const [relativeText, setRelativeText] = useState("");
378+
379+
// Every 60s refresh
380+
useEffect(() => {
381+
const interval = setInterval(() => {
382+
setRelativeText(getRelativeText(realDate));
383+
}, 60_000);
384+
return () => clearInterval(interval);
385+
}, [realDate]);
386+
387+
// On first render
388+
useEffect(() => {
389+
setRelativeText(getRelativeText(realDate));
375390
}, [realDate]);
376391

377392
return (

0 commit comments

Comments
 (0)