diff options
Diffstat (limited to 'lib/b-rfq/initial/initial-rfq-detail-table.tsx')
| -rw-r--r-- | lib/b-rfq/initial/initial-rfq-detail-table.tsx | 74 |
1 files changed, 39 insertions, 35 deletions
diff --git a/lib/b-rfq/initial/initial-rfq-detail-table.tsx b/lib/b-rfq/initial/initial-rfq-detail-table.tsx index fc8a5bc2..5ea6b0bf 100644 --- a/lib/b-rfq/initial/initial-rfq-detail-table.tsx +++ b/lib/b-rfq/initial/initial-rfq-detail-table.tsx @@ -6,8 +6,14 @@ 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 { getInitialRfqDetail } from "../service" // 앞서 만든 서버 액션 -import { getInitialRfqDetailColumns } from "./initial-rfq-detail-columns" +import { + getInitialRfqDetailColumns, + type DataTableRowAction +} from "./initial-rfq-detail-columns" import { InitialRfqDetailTableToolbarActions } from "./initial-rfq-detail-toolbar-actions" +import { DeleteInitialRfqDialog } from "./delete-initial-rfq-dialog" +import { UpdateInitialRfqSheet } from "./update-initial-rfq-sheet" +import { InitialRfqDetailView } from "@/db/schema" interface InitialRfqDetailTableProps { promises: Promise<Awaited<ReturnType<typeof getInitialRfqDetail>>> @@ -19,10 +25,14 @@ export function InitialRfqDetailTable({ promises, rfqId }: InitialRfqDetailTable // 선택된 상세 정보 const [selectedDetail, setSelectedDetail] = React.useState<any>(null) + + // Row action 상태 (update/delete) + const [rowAction, setRowAction] = React.useState<DataTableRowAction<InitialRfqDetailView> | null>(null) const columns = React.useMemo( () => getInitialRfqDetailColumns({ - onSelectDetail: setSelectedDetail + onSelectDetail: setSelectedDetail, + setRowAction: setRowAction }), [] ) @@ -62,11 +72,10 @@ export function InitialRfqDetailTable({ promises, rfqId }: InitialRfqDetailTable id: "initialRfqStatus", label: "초기 RFQ 상태", options: [ - { label: "대기", value: "PENDING", count: 0 }, - { label: "발송", value: "SENT", count: 0 }, - { label: "응답", value: "RESPONDED", count: 0 }, - { label: "만료", value: "EXPIRED", count: 0 }, - { label: "취소", value: "CANCELLED", count: 0 }, + { label: "초안", value: "DRAFT", count: 0 }, + { label: "발송", value: "Init. RFQ Sent", count: 0 }, + { label: "응답", value: "Init. RFQ Answered", count: 0 }, + { label: "거절", value: "S/L Decline", count: 0 }, ], }, { @@ -136,11 +145,10 @@ export function InitialRfqDetailTable({ promises, rfqId }: InitialRfqDetailTable label: "초기 RFQ 상태", type: "multi-select", options: [ - { label: "대기", value: "PENDING" }, - { label: "발송", value: "SENT" }, - { label: "응답", value: "RESPONDED" }, - { label: "만료", value: "EXPIRED" }, - { label: "취소", value: "CANCELLED" }, + { label: "초안", value: "DRAFT" }, + { label: "발송", value: "Init. RFQ Sent" }, + { label: "응답", value: "Init. RFQ Answered" }, + { label: "거절", value: "S/L Decline" }, ], }, { @@ -216,7 +224,7 @@ export function InitialRfqDetailTable({ promises, rfqId }: InitialRfqDetailTable sorting: [{ id: "createdAt", desc: true }], columnPinning: { right: ["actions"] }, }, - getRowId: (originalRow) => originalRow.initialRfqId.toString(), + getRowId: (originalRow) => originalRow.initialRfqId ? originalRow.initialRfqId.toString():"1", shallow: false, clearOnDefault: true, }) @@ -236,28 +244,24 @@ export function InitialRfqDetailTable({ promises, rfqId }: InitialRfqDetailTable </DataTable> </div> - {/* 선택된 상세 정보 패널 (필요시 추가) */} - {selectedDetail && ( - <div className="border rounded-lg p-4"> - <h3 className="text-lg font-semibold mb-2"> - 상세 정보: {selectedDetail.rfqCode} - </h3> - <div className="grid grid-cols-2 gap-4 text-sm"> - <div> - <strong>벤더:</strong> {selectedDetail.vendorName} - </div> - <div> - <strong>국가:</strong> {selectedDetail.vendorCountry} - </div> - <div> - <strong>마감일:</strong> {formatDate(selectedDetail.dueDate)} - </div> - <div> - <strong>유효일:</strong> {formatDate(selectedDetail.validDate)} - </div> - </div> - </div> - )} + {/* Update Sheet */} + <UpdateInitialRfqSheet + open={rowAction?.type === "update"} + onOpenChange={() => setRowAction(null)} + initialRfq={rowAction?.type === "update" ? rowAction.row.original : null} + /> + + {/* Delete Dialog */} + <DeleteInitialRfqDialog + open={rowAction?.type === "delete"} + onOpenChange={() => setRowAction(null)} + initialRfqs={rowAction?.type === "delete" ? [rowAction.row.original] : []} + showTrigger={false} + onSuccess={() => { + setRowAction(null) + // 테이블 리프레시는 revalidatePath로 자동 처리됨 + }} + /> </div> ) }
\ No newline at end of file |
