// routes/tenant/documents/index.tsx import { define } from "../../../utils.ts"; import { page } from "fresh"; import { getLeasesByTenant } from "../../../services/leaseService.ts"; import { createLeaseDocument, getDocumentsByLease, signDocumentAsTenant, } from "../../../services/leaseDocumentService.ts"; import { isE2EEnabled } from "../../../services/e2eFixtures.ts"; import { Lease, LeaseDocument } from "../../../db/interfaces.ts"; function formatDate(value?: number | null): string { if (!value) return "-"; return new Date(value).toLocaleDateString(); } export const handler = define.handlers({ async GET(ctx) { const { user_id } = ctx.state.data; if (!user_id) { return new Response("", { status: 302, headers: { Location: "/auth/login" }, }); } try { const leases = await getLeasesByTenant(user_id); const documents: Record = {}; for (const lease of leases || []) { if (!lease.id) continue; documents[lease.id] = await getDocumentsByLease(lease.id); } return page({ leases, documents, isE2E: isE2EEnabled(), }); } catch (error) { console.error("Error loading tenant documents:", error); return page({ error: "Failed to load documents", }); } }, async POST(ctx) { const { user_id } = ctx.state.data; if (!user_id) { return new Response("", { status: 302, headers: { Location: "/auth/login" }, }); } const formData = await ctx.req.formData(); const action = (formData.get("action") || "").toString(); const documentId = (formData.get("document_id") || "").toString(); const leaseId = (formData.get("lease_id") || "").toString(); if (action === "sign" && documentId) { await signDocumentAsTenant(documentId); } if (action === "add_sample" && leaseId) { await createLeaseDocument( leaseId, "receipt", "/static/sample-receipt.pdf", "sample-receipt.pdf", ); } return new Response("", { status: 302, headers: { Location: "/tenant/documents" }, }); }, }); export default define.page(function TenantDocuments({ data }) { const { leases, documents, error, isE2E } = data as { leases: Lease[]; documents: Record; error?: string; isE2E?: boolean; }; return (

Documents

Access your lease agreements, receipts, and notices

{error && (
{error}
)} {(leases || []).map((lease) => { const leaseDocs = documents?.[lease.id] || []; return (

{lease.property_address || "Lease Documents"}

Lease ID: {lease.id}

{isE2E && (
)}
{leaseDocs.length > 0 ? ( leaseDocs.map((doc) => ( )) ) : ( )}
Type File Tenant Status Landlord Status Signed
{doc.document_type || "document"} {doc.file_name || "View"} {doc.signed_by_tenant ? "Signed" : "Pending"} {doc.signed_by_landlord ? "Signed" : "Pending"} {formatDate(doc.signature_date)} {!doc.signed_by_tenant && (
)}
No documents available yet
); })}
); });