diff --git a/packages/chat/src/screen.tsx b/packages/chat/src/screen.tsx index a8a4ec0..5a3bcdd 100644 --- a/packages/chat/src/screen.tsx +++ b/packages/chat/src/screen.tsx @@ -50,6 +50,59 @@ function getMessageRenderKey(message: RawMessage | LiveMessage) { return "localId" in message ? message.localId : String(message.SendTime); } +function isSameDay(first: number | Date, second: number | Date) { + const firstDate = new Date(first); + const secondDate = new Date(second); + + return ( + firstDate.getFullYear() === secondDate.getFullYear() && + firstDate.getMonth() === secondDate.getMonth() && + firstDate.getDate() === secondDate.getDate() + ); +} + +function formatMessageDate(sendTime: number) { + const date = new Date(sendTime); + const today = new Date(); + const yesterday = new Date(today); + yesterday.setDate(yesterday.getDate() - 1); + + if (isSameDay(date, today)) { + return "Today"; + } + + if (isSameDay(date, yesterday)) { + return "Yesterday"; + } + + const day = String(date.getDate()).padStart(2, "0"); + const month = date.toLocaleString([], { month: "long" }); + return `${day} ${month} ${date.getFullYear()}`; +} + +function DateSeparator({ label }: { label: string }) { + const [visible, setVisible] = useState(false); + + useEffect(() => { + const timeout = window.setTimeout(() => setVisible(true), 100); + return () => window.clearTimeout(timeout); + }, []); + + return ( +