This commit is contained in:
Martti Malmi
2024-01-04 19:41:08 +02:00
parent c8215b1408
commit 2e5295a0f7

View File

@ -1,5 +1,5 @@
import React, {useEffect, useState, useCallback, useMemo, ReactNode} from 'react'; import React, { ReactNode,useCallback, useEffect, useMemo, useState } from "react";
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from "react-intl";
export interface NoteTimeProps { export interface NoteTimeProps {
from: number; from: number;
@ -25,14 +25,14 @@ const NoteTime: React.FC<NoteTimeProps> = ({ from, fallback }) => {
const fromDate = new Date(fromTime); const fromDate = new Date(fromTime);
if (fromDate.getFullYear() === currentTime.getFullYear()) { if (fromDate.getFullYear() === currentTime.getFullYear()) {
return fromDate.toLocaleDateString(undefined, { return fromDate.toLocaleDateString(undefined, {
month: 'short', month: "short",
day: 'numeric', day: "numeric",
}); });
} else { } else {
return fromDate.toLocaleDateString(undefined, { return fromDate.toLocaleDateString(undefined, {
year: 'numeric', year: "numeric",
month: 'short', month: "short",
day: 'numeric', day: "numeric",
}); });
} }
} }
@ -41,11 +41,12 @@ const NoteTime: React.FC<NoteTimeProps> = ({ from, fallback }) => {
const [time, setTime] = useState<string | ReactNode>(calcTime(from)); const [time, setTime] = useState<string | ReactNode>(calcTime(from));
const absoluteTime = useMemo( const absoluteTime = useMemo(
() => new Intl.DateTimeFormat(undefined, { () =>
dateStyle: 'medium', new Intl.DateTimeFormat(undefined, {
timeStyle: 'long', dateStyle: "medium",
timeStyle: "long",
}).format(from), }).format(from),
[from] [from],
); );
const isoDate = useMemo(() => new Date(from).toISOString(), [from]); const isoDate = useMemo(() => new Date(from).toISOString(), [from]);
@ -53,17 +54,17 @@ const NoteTime: React.FC<NoteTimeProps> = ({ from, fallback }) => {
useEffect(() => { useEffect(() => {
const t = setInterval(() => { const t = setInterval(() => {
const newTime = calcTime(from); const newTime = calcTime(from);
setTime(s => s !== newTime ? newTime : s); setTime(s => (s !== newTime ? newTime : s));
}, 60_000); // update every minute }, 60_000); // update every minute
return () => clearInterval(t); return () => clearInterval(t);
}, [calcTime, from]); }, [from]);
return ( return (
<time dateTime={isoDate} title={absoluteTime}> <time dateTime={isoDate} title={absoluteTime}>
{time || fallback} {time || fallback}
</time> </time>
); );
} };
export default NoteTime; export default NoteTime;