"use client"; import { useState } from "react"; import { GenericCrudTable } from "@/components/admin/reference/generic-crud-table"; import { ColumnDef } from "@tanstack/react-table"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Loader2 } from "lucide-react"; import { useProjects } from "@/hooks/use-master-data"; import { drawingMasterDataService } from "@/lib/services/drawing-master-data.service"; import { Badge } from "@/components/ui/badge"; interface Volume { id: number; volumeCode: string; volumeName: string; description?: string; sortOrder: number; } export default function ContractVolumesPage() { const [selectedProjectId, setSelectedProjectId] = useState(undefined); const { data: projects = [], isLoading: isLoadingProjects } = useProjects(); const columns: ColumnDef[] = [ { accessorKey: "volumeCode", header: "Code", cell: ({ row }) => ( {row.getValue("volumeCode")} ), }, { accessorKey: "volumeName", header: "Volume Name", }, { accessorKey: "description", header: "Description", cell: ({ row }) => ( {row.getValue("description") || "-"} ), }, { accessorKey: "sortOrder", header: "Order", cell: ({ row }) => ( {row.getValue("sortOrder")} ), }, ]; const projectFilter = (
Project:
); if (!selectedProjectId) { return (

Contract Drawing Volumes

Manage drawing volumes (เล่ม) for contract drawings

{projectFilter}
Please select a project to manage volumes.
); } return (
drawingMasterDataService.getContractVolumes(selectedProjectId)} createFn={(data) => drawingMasterDataService.createContractVolume({ ...data, projectId: selectedProjectId })} updateFn={(id, data) => drawingMasterDataService.updateContractVolume(id, data)} deleteFn={(id) => drawingMasterDataService.deleteContractVolume(id)} columns={columns} fields={[ { name: "volumeCode", label: "Volume Code", type: "text", required: true }, { name: "volumeName", label: "Volume Name", type: "text", required: true }, { name: "description", label: "Description", type: "textarea" }, { name: "sortOrder", label: "Sort Order", type: "text", required: true }, ]} filters={projectFilter} />
); }