'use client'; import { GenericCrudTable } from '@/components/admin/reference/generic-crud-table'; import { masterDataService } from '@/lib/services/master-data.service'; import { useContracts } from '@/hooks/use-master-data'; import { ColumnDef } from '@tanstack/react-table'; import { Discipline } from '@/types/master-data'; import { useState } from 'react'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; export default function DisciplinesPage() { const [selectedContractId, setSelectedContractId] = useState(null); const { data: contractsData = [] } = useContracts(); // Ensure we consistently use an array const contracts = Array.isArray(contractsData) ? contractsData : []; const columns: ColumnDef[] = [ { accessorKey: 'disciplineCode', header: 'Code', cell: ({ row }) => {row.getValue('disciplineCode')}, }, { accessorKey: 'contract', header: 'Contract', cell: ({ row }) => { const contract = row.original.contract; return contract ? ( {contract.contractName} ({contract.contractCode}) ) : ( - ); }, }, { 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: { id?: number; publicId?: string; contractCode: string; contractName: string }) => ({ label: `${c.contractName} (${c.contractCode})`, value: String(c.publicId ?? c.id ?? ''), })); return (
{ const items = await masterDataService.getDisciplines(selectedContractId ? selectedContractId : undefined); // ADR-019: Map contractId INT → contract UUID for edit mode select matching return items.map((item) => { const rec = item as Discipline & { contract?: { id?: number; uuid?: string }; contractId?: number | string }; return { ...item, contractId: rec.contract?.id || rec.contract?.uuid || String(rec.contractId), } as Discipline; }); }} createFn={(data) => masterDataService.createDiscipline( data as unknown as Parameters[0] ) } updateFn={(_id, _data) => Promise.reject('Not implemented yet')} deleteFn={(id) => masterDataService.deleteDiscipline(id)} columns={columns} filters={
} fields={[ { name: 'contractId', label: 'Contract', type: 'select', required: true, options: contractOptions, }, { name: 'discipline_code', label: 'Code', type: 'text', required: true, }, { name: 'code_name_th', label: 'Name (TH)', type: 'text', required: true, }, { name: 'code_name_en', label: 'Name (EN)', type: 'text' }, { name: 'is_active', label: 'Active', type: 'checkbox' }, ]} />
); }