'use client'; /* IMPORT */ import { DataTable } from '@/components/data-table/data-table'; import { DataTableAdvancedToolbar } from '@/components/data-table/data-table-advanced-toolbar'; import getColumns from './reg-eval-criteria-columns'; import { getRegEvalCriteria } from '../service'; import { REG_EVAL_CRITERIA_CATEGORY, REG_EVAL_CRITERIA_ITEM, REG_EVAL_CRITERIA_CATEGORY2, type RegEvalCriteriaView } from '@/db/schema'; import RegEvalCriteriaDeleteDialog from './reg-eval-criteria-delete-dialog'; import RegEvalCriteriaFormSheet from './reg-eval-criteria-form-sheet'; import RegEvalCriteriaTableToolbarActions from './reg-eval-criteria-table-toolbar-actions'; import { type DataTableFilterField, type DataTableRowAction, type DataTableAdvancedFilterField, } from '@/types/table'; import { useDataTable } from '@/hooks/use-data-table'; import { use, useCallback, useMemo, useState } from 'react'; import { useRouter } from 'next/navigation'; // ---------------------------------------------------------------------------------------------------- /* TYPES */ interface RegEvalCriteriaTableProps { promises: Promise<[ Awaited>, ]>, } // ---------------------------------------------------------------------------------------------------- /* TABLE COMPONENT */ function RegEvalCriteriaTable({ promises }: RegEvalCriteriaTableProps) { const router = useRouter(); const [rowAction, setRowAction] = useState | null>(null); const [isCreateFormOpen, setIsCreateFormOpen] = useState(false); const [promiseData] = use(promises); const tableData = promiseData; const columns = useMemo( () => getColumns({ setRowAction }), [setRowAction], ); const filterFields: DataTableFilterField[] = [ { id: 'category', label: '평가부문', placeholder: '평가부문 선택...', }, { id: 'scoreCategory', label: '점수구분', placeholder: '점수구분 선택...', }, { id: 'item', label: '항목', placeholder: '항목 선택...', }, ] const advancedFilterFields: DataTableAdvancedFilterField[] = [ { id: 'category', label: '평가부문', type: 'select', options: REG_EVAL_CRITERIA_CATEGORY, }, { id: 'scoreCategory', label: '점수구분', type: 'select', options: REG_EVAL_CRITERIA_CATEGORY2, }, { id: 'item', label: '항목', type: 'select', options: REG_EVAL_CRITERIA_ITEM, }, { id: 'classification', label: '구분', type: 'text' }, { id: 'range', label: '범위', type: 'text' }, { id: 'detail', label: '평가내용', type: 'text' }, { id: 'scoreEquipShip', label: '조선', type: 'number' }, { id: 'scoreEquipMarine', label: '해양', type: 'number' }, { id: 'scoreBulkShip', label: '조선', type: 'number' }, { id: 'scoreBulkMarine', label: '해양', type: 'number' }, { id: 'remarks', label: '비고', type: 'text' }, ]; // Data Table Setting const { table } = useDataTable({ data: tableData.data, columns, pageCount: tableData.pageCount, filterFields, enablePinning: true, enableAdvancedFilter: true, initialState: { sorting: [{ id: 'id', desc: false }], columnPinning: { left: ['select'], right: ['actions'] }, }, getRowId: (originalRow) => String(originalRow.id), shallow: false, clearOnDefault: true, }); const emptyCriteriaViewData: RegEvalCriteriaView = { id: 0, category: '', scoreCategory: '', item: '', classification: '', range: null, remarks: null, criteriaId: 0, detail: '', orderIndex: null, scoreEquipShip: null, scoreEquipMarine: null, scoreBulkShip: null, scoreBulkMarine: null, }; const refreshData = useCallback(() => { router.refresh(); }, [router]); const handleCreateCriteria = () => { setIsCreateFormOpen(true); }; const handleCreateSuccess = useCallback(() => { setIsCreateFormOpen(false); refreshData(); }, [refreshData]); const handleModifySuccess = useCallback(() => { setRowAction(null); refreshData(); }, [refreshData]); const handleDeleteSuccess = useCallback(() => { setRowAction(null); refreshData(); }, [refreshData]); return ( <> setRowAction(null)} criteriaViewData={rowAction?.row.original ?? null} onSuccess={handleModifySuccess} /> setRowAction(null)} criteriaViewData={rowAction?.row.original ?? emptyCriteriaViewData} onSuccess={handleDeleteSuccess} /> ) } // ---------------------------------------------------------------------------------------------------- /* EXPORT */ export default RegEvalCriteriaTable;