summaryrefslogtreecommitdiff
path: root/lib/b-rfq/initial/initial-rfq-detail-table.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/b-rfq/initial/initial-rfq-detail-table.tsx')
-rw-r--r--lib/b-rfq/initial/initial-rfq-detail-table.tsx74
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