"use client"; import * as React from 'react'; import { useDataTable } from '@/hooks/use-data-table'; import { DataTable } from '@/components/data-table/data-table'; import { DataTableAdvancedToolbar } from '@/components/data-table/data-table-advanced-toolbar'; import type { DataTableAdvancedFilterField, DataTableFilterField, DataTableRowAction, } from '@/types/table'; import { getColumns } from './approval-line-table-columns'; import { getApprovalLineList } from '../service'; import { type ApprovalLine } from '../service'; import { ApprovalLineTableToolbarActions } from './approval-line-table-toolbar-actions'; import { CreateApprovalLineSheet } from './create-approval-line-sheet'; import { UpdateApprovalLineSheet } from './update-approval-line-sheet'; import { DuplicateApprovalLineSheet } from './duplicate-approval-line-sheet'; import { DeleteApprovalLineDialog } from './delete-approval-line-dialog'; interface ApprovalLineTableProps { promises: Promise<[ Awaited>, ]>; } export function ApprovalLineTable({ promises }: ApprovalLineTableProps) { const [{ data, pageCount }] = React.use(promises); const [rowAction, setRowAction] = React.useState | null>(null); const [showCreateSheet, setShowCreateSheet] = React.useState(false); const columns = React.useMemo( () => getColumns({ setRowAction }), [setRowAction] ); // 기본 & 고급 필터 필드 const filterFields: DataTableFilterField[] = []; const advancedFilterFields: DataTableAdvancedFilterField[] = [ { id: 'name', label: '결재선 이름', type: 'text', }, { id: 'category', label: '카테고리', type: 'text', }, { id: 'description', label: '설명', type: 'text', }, { id: 'createdAt', label: '생성일', type: 'date', }, { id: 'updatedAt', label: '수정일', type: 'date', }, ]; const { table } = useDataTable({ data, columns, pageCount, filterFields, enablePinning: true, enableAdvancedFilter: true, initialState: { sorting: [{ id: 'updatedAt', desc: true }], columnPinning: { right: ['actions'] }, }, getRowId: (row) => String(row.id), shallow: false, clearOnDefault: true, }); return ( <> setShowCreateSheet(true)} /> {/* 새 결재선 생성 Sheet */} {/* 결재선 수정 Sheet */} setRowAction(null)} line={rowAction?.type === "update" ? rowAction.row.original : null} /> {/* 결재선 복제 Sheet */} setRowAction(null)} line={rowAction?.type === "duplicate" ? rowAction.row.original : null} /> {/* 결재선 삭제 Dialog */} setRowAction(null)} lines={rowAction?.type === "delete" ? [rowAction.row.original] : []} showTrigger={false} onSuccess={() => { setRowAction(null) // 테이블 새로고침은 server action에서 자동으로 처리됨 }} /> ); }