// routes/tenant/reminders/index.tsx import { define } from "../../../utils.ts"; import { page } from "fresh"; import { deleteReminder, getRemindersByUserId, markReminderCompleted, } from "../../../services/reminderService.ts"; import { Reminder } from "../../../db/interfaces.ts"; interface RemindersPageData { reminders: Reminder[]; error?: string; } export const handler = define.handlers({ async GET(ctx) { const { user_id } = ctx.state.data; try { const reminders = await getRemindersByUserId(user_id); return page({ reminders, }); } catch (error) { console.error("Error loading reminders:", error); return page({ reminders: [], error: "Failed to load reminders.", }); } }, async POST(ctx) { try { const formData = await ctx.req.formData(); const action = formData.get("action") as string; const reminderId = formData.get("reminder_id") as string; if (!reminderId) { return new Response("Missing reminder ID", { status: 400 }); } if (action === "mark_completed") { await markReminderCompleted(reminderId, true); } else if (action === "delete") { await deleteReminder(reminderId); } // Redirect back to the list return new Response("", { status: 302, headers: { Location: "/tenant/reminders" }, }); } catch (error) { console.error("Error processing reminder action:", error); return new Response("Failed to process action", { status: 500 }); } }, }); function ReminderStatusPill({ isCompleted }: { isCompleted: boolean }) { const colorClass = isCompleted ? "bg-green-100 text-green-800" : "bg-yellow-100 text-yellow-800"; const text = isCompleted ? "Completed" : "Pending"; return ( {text} ); } export default define.page(function TenantReminders({ data }) { const { reminders, error } = data as RemindersPageData; const pendingReminders = reminders.filter((r) => !r.is_completed); const completedReminders = reminders.filter((r) => r.is_completed); return (
{/* Header */}

My Reminders

+ New Reminder
{/* Main Content */}
{error && (
)}

Pending Reminders ({pendingReminders.length})

    {pendingReminders.length > 0 ? ( pendingReminders.map((reminder) => (
  • {reminder.title}

    Due: {new Date(reminder.due_date).toLocaleDateString()}

    {reminder.description && (

    {reminder.description}

    )}
  • )) ) : (
  • You have no pending reminders.
  • )}
{/* Completed Reminders */}

Completed Reminders ({completedReminders.length})

    {completedReminders.length > 0 ? ( completedReminders.map((reminder) => (
  • {reminder.title}

    Due: {new Date(reminder.due_date).toLocaleDateString()}

  • )) ) : (
  • No completed reminders.
  • )}
); });