summaryrefslogtreecommitdiff
path: root/lib/vendors/table/vendors-table-toolbar-actions.tsx
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-04-02 09:54:08 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-04-02 09:54:08 +0000
commitdfdfae3018f8499240f48d28ce634f4a5c56e006 (patch)
tree4493b172c061fa5bf4e94c083788110eb1507f6d /lib/vendors/table/vendors-table-toolbar-actions.tsx
parent21a72eeddc74cf775e2a76e2c569de970bd62a7f (diff)
벤더 코멘트 처리
Diffstat (limited to 'lib/vendors/table/vendors-table-toolbar-actions.tsx')
-rw-r--r--lib/vendors/table/vendors-table-toolbar-actions.tsx86
1 files changed, 69 insertions, 17 deletions
diff --git a/lib/vendors/table/vendors-table-toolbar-actions.tsx b/lib/vendors/table/vendors-table-toolbar-actions.tsx
index c0605191..3cb2c552 100644
--- a/lib/vendors/table/vendors-table-toolbar-actions.tsx
+++ b/lib/vendors/table/vendors-table-toolbar-actions.tsx
@@ -2,15 +2,24 @@
import * as React from "react"
import { type Table } from "@tanstack/react-table"
-import { Download, Upload, Check } from "lucide-react"
+import { Download, Upload, Check, BuildingIcon } from "lucide-react"
import { toast } from "sonner"
import { exportTableToExcel } from "@/lib/export"
import { Button } from "@/components/ui/button"
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuTrigger,
+} from "@/components/ui/dropdown-menu"
import { Vendor } from "@/db/schema/vendors"
import { ApproveVendorsDialog } from "./approve-vendor-dialog"
import { RequestPQVendorsDialog } from "./request-vendor-pg-dialog"
+import { RequestProjectPQDialog } from "./request-project-pq-dialog"
import { SendVendorsDialog } from "./send-vendor-dialog"
+import { RequestVendorsInvestigateDialog } from "./request-vendor-investigate-dialog"
+import { RequestInfoDialog } from "./request-additional-Info-dialog"
interface VendorsTableToolbarActionsProps {
table: Table<Vendor>
@@ -19,7 +28,7 @@ interface VendorsTableToolbarActionsProps {
export function VendorsTableToolbarActions({ table }: VendorsTableToolbarActionsProps) {
// 파일 input을 숨기고, 버튼 클릭 시 참조해 클릭하는 방식
const fileInputRef = React.useRef<HTMLInputElement>(null)
-
+
// 선택된 벤더 중 PENDING_REVIEW 상태인 벤더만 필터링
const pendingReviewVendors = React.useMemo(() => {
return table
@@ -28,9 +37,8 @@ export function VendorsTableToolbarActions({ table }: VendorsTableToolbarActions
.map(row => row.original)
.filter(vendor => vendor.status === "PENDING_REVIEW");
}, [table.getFilteredSelectedRowModel().rows]);
-
-
- // 선택된 벤더 중 PENDING_REVIEW 상태인 벤더만 필터링
+
+ // 선택된 벤더 중 IN_REVIEW 상태인 벤더만 필터링
const inReviewVendors = React.useMemo(() => {
return table
.getFilteredSelectedRowModel()
@@ -38,7 +46,7 @@ export function VendorsTableToolbarActions({ table }: VendorsTableToolbarActions
.map(row => row.original)
.filter(vendor => vendor.status === "IN_REVIEW");
}, [table.getFilteredSelectedRowModel().rows]);
-
+
const approvedVendors = React.useMemo(() => {
return table
.getFilteredSelectedRowModel()
@@ -46,14 +54,36 @@ export function VendorsTableToolbarActions({ table }: VendorsTableToolbarActions
.map(row => row.original)
.filter(vendor => vendor.status === "APPROVED");
}, [table.getFilteredSelectedRowModel().rows]);
-
-
-
+
+ const sendVendors = React.useMemo(() => {
+ return table
+ .getFilteredSelectedRowModel()
+ .rows
+ .map(row => row.original)
+ .filter(vendor => vendor.status === "READY_TO_SEND");
+ }, [table.getFilteredSelectedRowModel().rows]);
+
+ const pqApprovedVendors = React.useMemo(() => {
+ return table
+ .getFilteredSelectedRowModel()
+ .rows
+ .map(row => row.original)
+ .filter(vendor => vendor.status === "PQ_APPROVED");
+ }, [table.getFilteredSelectedRowModel().rows]);
+
+ // 프로젝트 PQ를 보낼 수 있는 벤더 상태 필터링
+ const projectPQEligibleVendors = React.useMemo(() => {
+ return table
+ .getFilteredSelectedRowModel()
+ .rows
+ .map(row => row.original)
+ .filter(vendor =>
+ ["PENDING_REVIEW", "IN_REVIEW", "IN_PQ", "PQ_APPROVED", "APPROVED", "READY_TO_SEND", "ACTIVE"].includes(vendor.status)
+ );
+ }, [table.getFilteredSelectedRowModel().rows]);
+
return (
<div className="flex items-center gap-2">
-
-
-
{/* 승인 다이얼로그: PENDING_REVIEW 상태인 벤더가 있을 때만 표시 */}
{pendingReviewVendors.length > 0 && (
<ApproveVendorsDialog
@@ -61,22 +91,44 @@ export function VendorsTableToolbarActions({ table }: VendorsTableToolbarActions
onSuccess={() => table.toggleAllRowsSelected(false)}
/>
)}
-
+
+ {/* 일반 PQ 요청: IN_REVIEW 상태인 벤더가 있을 때만 표시 */}
{inReviewVendors.length > 0 && (
<RequestPQVendorsDialog
vendors={inReviewVendors}
onSuccess={() => table.toggleAllRowsSelected(false)}
/>
)}
-
+
+ {/* 프로젝트 PQ 요청: 적격 상태의 벤더가 있을 때만 표시 */}
+ {projectPQEligibleVendors.length > 0 && (
+ <RequestProjectPQDialog
+ vendors={projectPQEligibleVendors}
+ onSuccess={() => table.toggleAllRowsSelected(false)}
+ />
+ )}
+
{approvedVendors.length > 0 && (
- <SendVendorsDialog
+ <RequestInfoDialog
vendors={approvedVendors}
onSuccess={() => table.toggleAllRowsSelected(false)}
/>
)}
-
-
+
+ {sendVendors.length > 0 && (
+ <RequestInfoDialog
+ vendors={sendVendors}
+ onSuccess={() => table.toggleAllRowsSelected(false)}
+ />
+ )}
+
+ {pqApprovedVendors.length > 0 && (
+ <RequestVendorsInvestigateDialog
+ vendors={pqApprovedVendors}
+ onSuccess={() => table.toggleAllRowsSelected(false)}
+ />
+ )}
+
{/** 4) Export 버튼 */}
<Button
variant="outline"