diff options
Diffstat (limited to 'lib/evaluation-criteria/table/reg-eval-criteria-table.tsx')
| -rw-r--r-- | lib/evaluation-criteria/table/reg-eval-criteria-table.tsx | 83 |
1 files changed, 56 insertions, 27 deletions
diff --git a/lib/evaluation-criteria/table/reg-eval-criteria-table.tsx b/lib/evaluation-criteria/table/reg-eval-criteria-table.tsx index d73eb5bd..e2d614e0 100644 --- a/lib/evaluation-criteria/table/reg-eval-criteria-table.tsx +++ b/lib/evaluation-criteria/table/reg-eval-criteria-table.tsx @@ -3,17 +3,18 @@ /* 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 getColumns from './reg-eval-criteria-columns'; // 새로운 컬럼 파일 사용 import { getRegEvalCriteria } from '../service'; import { REG_EVAL_CRITERIA_CATEGORY, REG_EVAL_CRITERIA_CATEGORY2, REG_EVAL_CRITERIA_ITEM, - type RegEvalCriteriaView + type RegEvalCriteria // RegEvalCriteriaView 대신 RegEvalCriteria 사용 } from '@/db/schema'; import RegEvalCriteriaCreateDialog from './reg-eval-criteria-create-dialog'; import RegEvalCriteriaDeleteDialog from './reg-eval-criteria-delete-dialog'; import RegEvalCriteriaUpdateSheet from './reg-eval-criteria-update-sheet'; +import RegEvalCriteriaDetailsSheet from './reg-eval-criteria-details-sheet'; // 새로 추가 import RegEvalCriteriaTableToolbarActions from './reg-eval-criteria-table-toolbar-actions'; import { type DataTableFilterField, @@ -38,7 +39,7 @@ interface RegEvalCriteriaTableProps { /* TABLE COMPONENT */ function RegEvalCriteriaTable({ promises }: RegEvalCriteriaTableProps) { const router = useRouter(); - const [rowAction, setRowAction] = useState<DataTableRowAction<RegEvalCriteriaView> | null>(null); + const [rowAction, setRowAction] = useState<DataTableRowAction<RegEvalCriteria> | null>(null); const [isCreateDialogOpen, setIsCreateDialogOpen] = useState<boolean>(false); const [promiseData] = use(promises); const tableData = promiseData; @@ -48,7 +49,7 @@ function RegEvalCriteriaTable({ promises }: RegEvalCriteriaTableProps) { [setRowAction], ); - const filterFields: DataTableFilterField<RegEvalCriteriaView>[] = [ + const filterFields: DataTableFilterField<RegEvalCriteria>[] = [ { id: 'category', label: '평가부문', @@ -65,7 +66,7 @@ function RegEvalCriteriaTable({ promises }: RegEvalCriteriaTableProps) { placeholder: '항목 선택...', }, ] - const advancedFilterFields: DataTableAdvancedFilterField<RegEvalCriteriaView>[] = [ + const advancedFilterFields: DataTableAdvancedFilterField<RegEvalCriteria>[] = [ { id: 'category', label: '평가부문', @@ -85,12 +86,13 @@ function RegEvalCriteriaTable({ promises }: RegEvalCriteriaTableProps) { 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: 'range', label: '평가명', type: 'text' }, + { id: 'scoreType', label: '점수유형', type: 'select', + options: [ + { label: '고정점수', value: 'fixed' }, + { label: '변동점수', value: 'variable' } + ] + }, { id: 'remarks', label: '비고', type: 'text' }, ]; @@ -104,14 +106,18 @@ function RegEvalCriteriaTable({ promises }: RegEvalCriteriaTableProps) { enableAdvancedFilter: true, initialState: { sorting: [ - { id: 'criteriaId', desc: false }, - { id: 'orderIndex', desc: false }, + { id: 'id', desc: false }, ], columnPinning: { left: ['select'], right: ['actions'] }, columnVisibility: { id: false, - criteriaId: false, - orderIndex: false, + createdAt: false, + updatedAt: false, + createdBy: false, + updatedBy: false, + variableScoreMin: false, + variableScoreMax: false, + variableScoreUnit: false, }, }, getRowId: (originalRow) => String(originalRow.id), @@ -119,42 +125,52 @@ function RegEvalCriteriaTable({ promises }: RegEvalCriteriaTableProps) { clearOnDefault: true, }); - const emptyCriteriaViewData: RegEvalCriteriaView = { - id: null, + const emptyCriteriaData: RegEvalCriteria = { + id: 0, category: '', category2: '', item: '', classification: '', range: null, remarks: null, - criteriaId: null, - detail: '', - orderIndex: null, - scoreEquipShip: null, - scoreEquipMarine: null, - scoreBulkShip: null, - scoreBulkMarine: null, + scoreType: 'fixed', + variableScoreMin: null, + variableScoreMax: null, + variableScoreUnit: null, + createdAt: new Date(), + updatedAt: new Date(), + createdBy: 0, + updatedBy: 0, }; const refreshData = useCallback(() => { router.refresh(); }, [router]); + const handleCreateCriteria = () => { setIsCreateDialogOpen(true); }; + const handleCreateSuccess = useCallback(() => { setIsCreateDialogOpen(false); refreshData(); }, [refreshData]); + const handleModifySuccess = useCallback(() => { setRowAction(null); refreshData(); }, [refreshData]); + const handleDeleteSuccess = useCallback(() => { setRowAction(null); refreshData(); }, [refreshData]); + // 상세보기 핸들러 추가 + const handleDetailsClose = useCallback(() => { + setRowAction(null); + }, []); + return ( <> <DataTable table={table}> @@ -170,21 +186,34 @@ function RegEvalCriteriaTable({ promises }: RegEvalCriteriaTableProps) { /> </DataTableAdvancedToolbar> </DataTable> + + {/* 생성 다이얼로그 */} <RegEvalCriteriaCreateDialog open={isCreateDialogOpen} onOpenChange={setIsCreateDialogOpen} onSuccess={handleCreateSuccess} /> + + {/* 상세보기 시트 - 새로 추가 */} + <RegEvalCriteriaDetailsSheet + open={rowAction?.type === 'view'} + onOpenChange={handleDetailsClose} + criteriaViewData={rowAction?.row.original ?? emptyCriteriaData} + /> + + {/* 수정 시트 */} <RegEvalCriteriaUpdateSheet open={rowAction?.type === 'update'} onOpenChange={() => setRowAction(null)} - criteriaViewData={rowAction?.row.original ?? emptyCriteriaViewData} + criteriaData={rowAction?.row.original ?? emptyCriteriaData} onSuccess={handleModifySuccess} /> + + {/* 삭제 다이얼로그 */} <RegEvalCriteriaDeleteDialog open={rowAction?.type === 'delete'} onOpenChange={() => setRowAction(null)} - criteriaViewData={rowAction?.row.original ?? emptyCriteriaViewData} + criteriaViewData={rowAction?.row.original ?? emptyCriteriaData} onSuccess={handleDeleteSuccess} /> </> @@ -194,4 +223,4 @@ function RegEvalCriteriaTable({ promises }: RegEvalCriteriaTableProps) { // ---------------------------------------------------------------------------------------------------- /* EXPORT */ -export default RegEvalCriteriaTable; +export default RegEvalCriteriaTable;
\ No newline at end of file |
