"use client"; import { useMemo } from "react"; import useEntries from "@/hooks/use-entries"; import { useGroupsContext } from "@/hooks/groups-context"; function monthlyMultiplier(frequency: string, intervalCount: number) { const count = intervalCount || 1; switch (frequency) { case "DAILY": return (30 / count); case "WEEKLY": return (52 / 12) / count; case "BIWEEKLY": return (26 / 12) / count; case "MONTHLY": return (1 / count); case "QUARTERLY": return (1 / 3) / count; case "YEARLY": return (1 / 12) / count; default: return 0; } } export default function RecurringEntriesPanel() { const { activeGroupId } = useGroupsContext(); const { entries, loading } = useEntries(activeGroupId); const recurring = useMemo(() => entries.filter(entry => entry.isRecurring), [entries]); return (

Recurring entries

{!activeGroupId ? (
Select a group to view recurring entries.
) : loading ? (
{[0, 1].map(row => (
))}
) : recurring.length ? ( recurring.map(entry => { const monthly = entry.frequency ? monthlyMultiplier(entry.frequency, entry.intervalCount) * entry.amountDollars : 0; return (
${entry.amountDollars.toFixed(2)} · {entry.tags.join(", ") || "No tags"}
{entry.entryType}
Next run: {entry.nextRunAt || entry.occurredAt} · Monthly est: ${monthly.toFixed(2)}
); }) ) : (
No recurring entries yet.
)}
); }