"use client" import { ResourcePage } from '@/shared/data-view/resource-page' import { ColumnHeader } from '@/shared/data-view/table-view' import FormDialog from '@/shared/components/form-dialog' import { JobCardForm } from '@/modules/job-cards/job-card-form' import { JOB_CARD_ROUTES, JobCardStatus } from '@garage/api' import type { JobCardsClient } from '@garage/api' import { Tabs, TabsList, TabsTrigger } from '@/shared/components/ui/tabs' import { ClipboardListIcon, SearchIcon } from 'lucide-react' import { Badge } from '@/shared/components/ui/badge' import { Input } from '@/shared/components/ui/input' import { useRouter } from 'next/navigation' import { useState, useEffect } from 'react' import { formatDate, formatEnum, formatNumber } from '@/shared/utils/formatters' type JobCardItem = { id: number title?: string status?: string check_in_date?: string km_in?: number created_at?: string } const statusColorMap: Record = { draft: "secondary", check_in: "default", in_progress: "default", completed: "default", invoiced: "outline", cancelled: "destructive", } export default function JobCardsPage() { const router = useRouter() const [searchInput, setSearchInput] = useState("") const [search, setSearch] = useState("") const [statusFilter, setStatusFilter] = useState("check_in") useEffect(() => { const timer = setTimeout(() => setSearch(searchInput), 400) return () => clearTimeout(timer) }, [searchInput]) const extraParams: Record = {} if (search) extraParams.search = search if (statusFilter !== "all") extraParams.status = statusFilter return ( routeKey={JOB_CARD_ROUTES.INDEX} getClient={(api) => api.jobCards} extraParams={extraParams} onRowClick={(row) => router.push(`/sales/job-cards/${row.id}`)} headerProps={({ selectedItem, invalidateQuery }) => ({ title: "Job Cards", actions: ( {(resourceId) => ( )} ), })} columns={({ actionsColumn }) => [ { accessorKey: "title", header: ({ column }) => , cell: ({ row }) => { const item = row.original as unknown as JobCardItem return (
{item.title}
) }, }, { accessorKey: "order_number", header: ({ column }) => , }, { accessorKey: "check_in_date", header: ({ column }) => , cell: ({ getValue }) => { const val = getValue() return formatDate(val) } }, { accessorKey: "vehicle_id", header: ({ column }) => , cell: ({ row }) => { const item = row.original as unknown as JobCardItem return item.km_in ? formatNumber(item.km_in) : "—" }, }, { accessorKey: "created_at", header: ({ column }) => , cell: ({ row }) => { const item = row.original as unknown as JobCardItem return formatDate(item.created_at) }, }, { accessorKey: "status", header: ({ column }) => , cell: ({ row }) => { const item = row.original as unknown as JobCardItem return ( {formatEnum(item.status)} ) }, }, actionsColumn(), ]} tableHeader={
All {JobCardStatus.map((status) => ( {formatEnum(status)} ))}
setSearchInput(e.target.value)} className="pl-8" />
} /> ) }