import { MessageItem } from "@components/PageComponents/Messages/MessageItem.tsx"; import { Separator } from "@components/UI/Separator"; import type { Message } from "@core/stores/messageStore/types.ts"; import type { TFunction } from "i18next"; import { InboxIcon } from "lucide-react"; import { Fragment, useMemo } from "react"; import { useTranslation } from "react-i18next"; export interface ChannelChatProps { messages?: Message[]; } function toTs(d: Message["date"]): number { return typeof d === "number" ? d : Date.parse(String(d)); } function startOfLocalDay(ts: number): number { const d = new Date(ts); d.setHours(0, 0, 0, 0); return d.getTime(); } function formatDateLabelFromDayKey( dayKey: number, t: TFunction<"common", undefined>, fmt: Intl.DateTimeFormat, ): string { const todayKey = startOfLocalDay(Date.now()); const yestKey = todayKey - 24 * 60 * 60 * 1000; if (dayKey === todayKey) { return t("unit.day.today"); // "Today" from common.json } if (dayKey === yestKey) { return t("unit.day.yesterday"); // "Yesterday" from common.json } return fmt.format(new Date(dayKey)); } type DayGroup = { dayKey: number; label: string; items: Message[] }; function groupMessagesByDay( messages: Message[], t: TFunction<"common", undefined>, fmt: Intl.DateTimeFormat, ): DayGroup[] { const out: DayGroup[] = []; for (const msg of messages) { const ts = toTs(msg.date); const dayKey = startOfLocalDay(ts); const last = out[out.length - 1]; if (last && last.dayKey === dayKey) { last.items.push(msg); } else { out.push({ dayKey, label: formatDateLabelFromDayKey(dayKey, t, fmt), items: [msg], }); } } return out; } const DateDelimiter = ({ label }: { label: string }) => (