summaryrefslogtreecommitdiff
path: root/lib/evaluation-criteria/table/reg-eval-criteria-table.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/evaluation-criteria/table/reg-eval-criteria-table.tsx')
-rw-r--r--lib/evaluation-criteria/table/reg-eval-criteria-table.tsx83
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