// routes/tenant/reminders/new/index.tsx import { define } from "../../../../utils.ts"; import { page } from "fresh"; import { getLeasesByTenant } from "../../../../services/leaseService.ts"; import { createReminder } from "../../../../services/reminderService.ts"; import { Lease } from "../../../../db/interfaces.ts"; import { FormField } from "../../maintenance/new/components/FormField.tsx"; import { TextAreaField } from "../../maintenance/new/components/TextAreaField.tsx"; import { AlertMessage } from "../../maintenance/new/components/AlertMessage.tsx"; import { SelectField } from "../../maintenance/new/components/SelectField.tsx"; interface NewReminderPageData { currentLease?: Lease; error?: string; } const REMINDER_TYPES = [ { value: "general", label: "General" }, { value: "payment", label: "Payment Due" }, { value: "lease_event", label: "Lease Event" }, ]; export const handler = define.handlers({ async GET(ctx) { const { user_id } = ctx.state.data; try { const leases = await getLeasesByTenant(user_id); const currentLease = leases?.[0]; // Get the current lease for context/lease_id return page({ currentLease, }); } catch (error) { console.error("Error loading new reminder form:", error); return page({ error: "Failed to load form", }); } }, async POST(ctx) { const { user_id } = ctx.state.data; try { const formData = await ctx.req.formData(); const title = formData.get("title") as string; const description = formData.get("description") as string || null; const due_date_str = formData.get("due_date") as string; const reminder_type = formData.get("reminder_type") as string; const lease_id = formData.get("lease_id") as string || null; if (!title || !due_date_str || !reminder_type) { return new Response( "Missing required fields: Title, Due Date, and Type.", { status: 400 }, ); } // Convert date string (YYYY-MM-DD) to Unix timestamp (milliseconds) const due_date = new Date(due_date_str).getTime(); if (isNaN(due_date)) { return new Response("Invalid due date format.", { status: 400 }); } await createReminder( user_id, lease_id, reminder_type, title, description, due_date, ); // Redirect to the reminders list return new Response("", { status: 302, headers: { Location: "/tenant/reminders?success=true" }, }); } catch (error) { console.error("Error submitting new reminder:", error); return page({ error: "Failed to create reminder. Please try again.", }); } }, }); export default define.page(function NewTenantReminderPage({ data }) { const { currentLease, error } = data as NewReminderPageData; return (
{/* Header */}

Create New Reminder

Set a custom reminder for important dates or tasks.

{/* Main Content */}
{/* Hidden Fields */} {currentLease && ( )}
{error && {error}} {/* Submit Button */}
Cancel
); });