/** @jsxImportSource @nym.sh/jrx */ import type { FeedItemRenderer } from "@freya/core" import { FeedCard, SansSerifText, SerifText } from "@freya/components" import type { ReminderOccurrenceData } from "./types.ts" import { ReminderPriority, ReminderRecurrenceFrequency } from "./types.ts" export const renderReminderFeedItem: FeedItemRenderer<"reminder", ReminderOccurrenceData> = ( item, ) => { const { data } = item const status = data.completedAt ? "Completed" : formatDueStatus(data.dueAt) const recurrence = formatRecurrence(data.recurrence) return ( {data.notes ? : null} {recurrence ? ( ) : null} {data.priority !== ReminderPriority.Normal ? ( ) : null} ) } function formatDueAt(date: Date, timeZone: string): string { return new Intl.DateTimeFormat("en-US", { timeZone, dateStyle: "medium", timeStyle: "short", }).format(date) } function formatDueStatus(date: Date): string { const now = new Date() if (date.getTime() < now.getTime()) return "Due" return "Upcoming" } function formatRecurrence(recurrence: ReminderOccurrenceData["recurrence"]): string | null { if (!recurrence) return null const interval = recurrence.interval === 1 ? "" : `${recurrence.interval} ` switch (recurrence.frequency) { case ReminderRecurrenceFrequency.Daily: return recurrence.interval === 1 ? "Daily" : `Every ${interval}days` case ReminderRecurrenceFrequency.Weekly: return recurrence.interval === 1 ? "Weekly" : `Every ${interval}weeks` case ReminderRecurrenceFrequency.Monthly: return recurrence.interval === 1 ? "Monthly" : `Every ${interval}months` case ReminderRecurrenceFrequency.Yearly: return recurrence.interval === 1 ? "Yearly" : `Every ${interval}years` } }