// routes/landlord/maintenance/index.tsx import { define } from "../../../utils.ts"; import { getMaintenanceDataByLandlord, MaintenanceData, updateMaintenanceRequestStatus, } from "../../../services/maintenanceRequestService.ts"; import { page } from "fresh"; import { useRef } from "preact/hooks"; import { SessionCookie } from "../../auth/callback.ts"; 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; if (!user_id) { return new Response("", { status: 302, headers: { Location: "/auth/login" }, }); } 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; const { user_id } = stateData; if (!user_id) { return new Response("", { status: 302, headers: { Location: "/auth/login" }, }); } 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: any = {}; 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, maintenanceRequests, error } = data; const statusFormRef = useRef(null); const priorityFormRef = useRef(null); return (
{/* Header */}

Maintenance Requests

Manage maintenance requests from your tenants

{error && (
{error}
)} {/* Status Filter */} {maintenanceRequests && maintenanceRequests.length > 0 ? (
    {maintenanceRequests.map((request) => (
  • {request.priority?.charAt(0).toUpperCase() || "L"}

    {request.description}

    {request.status?.replace("_", " ") || "open"}

    {request.tenant_name || "Tenant"}

    {new Date(request.created_on) .toLocaleDateString()}

    {request.request_type || "general"}

    {request.status !== "completed" && ( <>
    )} View Details

    Property:{" "} {request.property_address || "Property Address"}

    {request.priority} priority
    {request.description && (

    {request.description}

    )}
  • ))}
) : (

No maintenance requests

You don't have any maintenance requests from tenants yet.

)}
); }, );