"use client" import { useEffect } from "react" import { use } from "react" import { usePathname, useRouter, useSearchParams } from "next/navigation" import { ResourcePage } from "@/shared/data-view/resource-page" import { ColumnHeader } from "@/shared/data-view/table-view" import FormDialog from "@/shared/components/form-dialog" import { AppointmentForm } from "@/modules/appointments/appointment-form" import { APPOINTMENT_ROUTES } from "@garage/api" import type { AppointmentsClient } from "@garage/api" import { CalendarCheck2Icon, ClockIcon } from "lucide-react" import { Badge } from "@/shared/components/ui/badge" import { useJobCard } from "@/modules/job-cards/job-card-context" const STATUS_COLORS: Record = { requested: "bg-yellow-100 text-yellow-800", confirmed: "bg-blue-100 text-blue-800", in_progress: "bg-purple-100 text-purple-800", completed: "bg-green-100 text-green-800", cancelled: "bg-red-100 text-red-800", } export default function JobCardAppointmentsPage({ params, }: { params: Promise<{ id: string }> }) { const { id: jobCardId } = use(params) const router = useRouter() const pathname = usePathname() const searchParams = useSearchParams() const jobCard = useJobCard() useEffect(() => { if (searchParams.get("create") !== "1") return const params = new URLSearchParams(searchParams.toString()) params.delete("create") params.set("dialog", "true") router.replace(`${pathname}?${params.toString()}`) }, [pathname, router, searchParams]) const defaultJobCard = jobCard ? { value: String((jobCard as any).id), label: (jobCard as any).label || (jobCard as any).title || `Job Card` } : null return ( routeKey={APPOINTMENT_ROUTES.INDEX} getClient={(api) => api.appointments} extraParams={{ job_card_id: jobCardId }} header={null} onRowClick={(row) => router.push(`/calendar/appointment/${(row as any).id}`)} tableHeader={({ invalidateQuery, selectedItem, closeDialog }) => (
{(resourceId) => ( { closeDialog(); invalidateQuery() }} /> )}
)} columns={({ actionsColumn }) => [ { accessorKey: "title", header: ({ column }) => , cell: ({ row }) => (
{(row.original as any).title}
), }, { accessorKey: "date", header: ({ column }) => , }, { accessorKey: "from_time", header: ({ column }) => , cell: ({ row }) => { const r = row.original as any return (
{r.from_time} - {r.to_time}
) }, }, { accessorKey: "status", header: ({ column }) => , cell: ({ row }) => { const status = (row.original as any).status const colorClass = STATUS_COLORS[status] ?? "bg-gray-100 text-gray-800" return ( {status?.replace("_", " ") ?? "—"} ) }, }, actionsColumn(), ]} /> ) }