// routes/landlord/maintenance/index.tsx import { define } from "../../../utils.ts"; import { getMaintenanceDataByLandlord, MaintenanceData, updateMaintenanceRequestStatus, } from "../../../services/maintenanceRequestService.ts"; import { page } from "fresh"; import { SessionCookie } from "../../auth/callback.ts"; import MaintenanceQuickActions from "../../../islands/MaintenanceQuickActions.tsx"; interface LandlordMaintenancePageData { stateData?: SessionCookie; maintenanceRequests?: MaintenanceData[]; error?: string; } interface LandlordMaintenanceProps { data: LandlordMaintenancePageData; } export const handler = define.handlers({ async GET(ctx) { const stateData: SessionCookie = ctx.state.data; const { user_id } = stateData; try { const maintenanceRequests: MaintenanceData[] = await getMaintenanceDataByLandlord(user_id); return page({ stateData, maintenanceRequests, }); } catch (error) { console.error("Error loading maintenance requests:", error); return page({ stateData, error: "Failed to load maintenance requests", }); } }, async POST(ctx) { const stateData: SessionCookie = ctx.state.data; try { const formData = await ctx.req.formData(); const request_id = formData.get("request_id") as string; const new_status = formData.get("new_status") as string; const new_priority = formData.get("new_priority") as string; const updateData: { status?: string; priority?: string } = {}; if (new_status) updateData.status = new_status; if (new_priority) updateData.priority = new_priority; if (Object.keys(updateData).length > 0) { await updateMaintenanceRequestStatus(request_id, updateData); } return new Response("", { status: 302, headers: { Location: "/landlord/maintenance" }, }); } catch (error) { console.error("Error updating maintenance request:", error); return page({ stateData, error: "Failed to update maintenance request", }); } }, }); export default define.page( function LandlordMaintenance({ data }: LandlordMaintenanceProps) { const { stateData: _stateData, maintenanceRequests, error } = data; return (
Manage maintenance requests from your tenants
{request.description}
{request.status?.replace("_", " ") || "open"}{request.tenant_name || "Tenant"}
{new Date(request.created_on) .toLocaleDateString()}
{request.request_type || "general"}
Property:{" "} {request.property_address || "Property Address"}
{request.description}
You don't have any maintenance requests from tenants yet.