"use client"; import { GenericCrudTable } from "@/components/admin/reference/generic-crud-table"; import { masterDataService } from "@/lib/services/master-data.service"; import { contractService } from "@/lib/services/contract.service"; import { ColumnDef } from "@tanstack/react-table"; import { useState, useEffect } from "react"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; export default function DisciplinesPage() { const [contracts, setContracts] = useState([]); const [selectedContractId, setSelectedContractId] = useState( null ); useEffect(() => { // Fetch contracts for filter and form options contractService.getAll().then((data) => { setContracts(Array.isArray(data) ? data : []); }).catch(err => { console.error("Failed to load contracts:", err); setContracts([]); }); }, []); const columns: ColumnDef[] = [ { accessorKey: "disciplineCode", header: "Code", cell: ({ row }) => ( {row.getValue("disciplineCode")} ), }, { accessorKey: "codeNameTh", header: "Name (TH)", }, { accessorKey: "codeNameEn", header: "Name (EN)", }, { accessorKey: "isActive", header: "Status", cell: ({ row }) => ( {row.getValue("isActive") ? "Active" : "Inactive"} ), }, ]; const contractOptions = contracts.map((c) => ({ label: `${c.contractName} (${c.contractNo})`, value: c.id, })); return (
masterDataService.getDisciplines( selectedContractId ? parseInt(selectedContractId) : undefined ) } createFn={(data) => masterDataService.createDiscipline(data)} updateFn={(id, data) => Promise.reject("Not implemented yet")} // Update endpoint needs to be verified/added if missing deleteFn={(id) => masterDataService.deleteDiscipline(id)} columns={columns} filters={
} fields={[ { name: "contractId", label: "Contract", type: "select", required: true, options: contractOptions, }, { name: "disciplineCode", label: "Code", type: "text", required: true, }, { name: "codeNameTh", label: "Name (TH)", type: "text", required: true, }, { name: "codeNameEn", label: "Name (EN)", type: "text" }, { name: "isActive", label: "Active", type: "checkbox" }, ]} />
); }