summaryrefslogtreecommitdiff
path: root/lib/bidding/list/biddings-table-toolbar-actions.tsx
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-09-16 09:20:58 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-09-16 09:20:58 +0000
commit6c11fccc84f4c84fa72ee01f9caad9f76f35cea2 (patch)
treefa88d10ea7d21fe6b59ed0c1569856a73d56547a /lib/bidding/list/biddings-table-toolbar-actions.tsx
parent14e3990aba7e1ad1cdd0965cbd167c50230cbfbf (diff)
(대표님, 최겸) 계약, 업로드 관련, 메뉴처리, 입찰, 프리쿼트, rfqLast관련, tbeLast관련
Diffstat (limited to 'lib/bidding/list/biddings-table-toolbar-actions.tsx')
-rw-r--r--lib/bidding/list/biddings-table-toolbar-actions.tsx100
1 files changed, 65 insertions, 35 deletions
diff --git a/lib/bidding/list/biddings-table-toolbar-actions.tsx b/lib/bidding/list/biddings-table-toolbar-actions.tsx
index 2b7a9d7d..ed5538c6 100644
--- a/lib/bidding/list/biddings-table-toolbar-actions.tsx
+++ b/lib/bidding/list/biddings-table-toolbar-actions.tsx
@@ -2,12 +2,12 @@
import * as React from "react"
import { type Table } from "@tanstack/react-table"
-import {
- Plus, Send, Gavel, Download, FileSpreadsheet,
- Eye, Clock, CheckCircle
+import {
+ Plus, Send, Download, FileSpreadsheet
} from "lucide-react"
import { toast } from "sonner"
import { useRouter } from "next/navigation"
+import { useSession } from "next-auth/react"
import { exportTableToExcel } from "@/lib/export"
import { Button } from "@/components/ui/button"
import {
@@ -19,6 +19,7 @@ import {
} from "@/components/ui/dropdown-menu"
import { BiddingListItem } from "@/db/schema"
import { CreateBiddingDialog } from "./create-bidding-dialog"
+import { TransmissionDialog } from "./biddings-transmission-dialog"
interface BiddingsTableToolbarActionsProps {
table: Table<BiddingListItem>
@@ -28,7 +29,11 @@ interface BiddingsTableToolbarActionsProps {
export function BiddingsTableToolbarActions({ table, paymentTermsOptions, incotermsOptions }: BiddingsTableToolbarActionsProps) {
const router = useRouter()
+ const { data: session } = useSession()
const [isExporting, setIsExporting] = React.useState(false)
+ const [isTransmissionDialogOpen, setIsTransmissionDialogOpen] = React.useState(false)
+
+ const userId = session?.user?.id ? Number(session.user.id) : 1
// 선택된 입찰들
const selectedBiddings = React.useMemo(() => {
@@ -38,6 +43,9 @@ export function BiddingsTableToolbarActions({ table, paymentTermsOptions, incote
.map(row => row.original)
}, [table.getFilteredSelectedRowModel().rows])
+ // 업체선정이 완료된 입찰만 전송 가능
+ const canTransmit = selectedBiddings.length === 1 && selectedBiddings[0].status === 'vendor_selected'
+
const handleExport = async () => {
try {
setIsExporting(true)
@@ -54,47 +62,69 @@ export function BiddingsTableToolbarActions({ table, paymentTermsOptions, incote
}
return (
- <div className="flex items-center gap-2">
- {/* 신규 생성 */}
- <CreateBiddingDialog
- paymentTermsOptions={paymentTermsOptions}
- incotermsOptions={incotermsOptions}
- />
+ <>
+ <div className="flex items-center gap-2">
+ {/* 신규 생성 */}
+ <CreateBiddingDialog
+ paymentTermsOptions={paymentTermsOptions}
+ incotermsOptions={incotermsOptions}
+ />
- {/* 개찰 (입찰 오픈) */}
- {/* {openEligibleBiddings.length > 0 && (
- <Button
- variant="outline"
+ {/* 전송하기 (업체선정 완료된 입찰만) */}
+ <Button
+ variant="default"
size="sm"
- onClick={handleBiddingOpen}
+ onClick={() => setIsTransmissionDialogOpen(true)}
+ disabled={!canTransmit}
+ className="gap-2"
>
- <Gavel className="mr-2 h-4 w-4" />
- 개찰 ({openEligibleBiddings.length})
+ <Send className="size-4" aria-hidden="true" />
+ <span className="hidden sm:inline">전송하기</span>
</Button>
- )} */}
- {/* Export */}
- <DropdownMenu>
- <DropdownMenuTrigger asChild>
+ {/* 개찰 (입찰 오픈) */}
+ {/* {openEligibleBiddings.length > 0 && (
<Button
variant="outline"
size="sm"
- className="gap-2"
- disabled={isExporting}
+ onClick={handleBiddingOpen}
>
- <Download className="size-4" aria-hidden="true" />
- <span className="hidden sm:inline">
- {isExporting ? "내보내는 중..." : "Export"}
- </span>
+ <Gavel className="mr-2 h-4 w-4" />
+ 개찰 ({openEligibleBiddings.length})
</Button>
- </DropdownMenuTrigger>
- <DropdownMenuContent align="end">
- <DropdownMenuItem onClick={handleExport} disabled={isExporting}>
- <FileSpreadsheet className="mr-2 size-4" />
- <span>입찰 목록 내보내기</span>
- </DropdownMenuItem>
- </DropdownMenuContent>
- </DropdownMenu>
- </div>
+ )} */}
+
+ {/* Export */}
+ <DropdownMenu>
+ <DropdownMenuTrigger asChild>
+ <Button
+ variant="outline"
+ size="sm"
+ className="gap-2"
+ disabled={isExporting}
+ >
+ <Download className="size-4" aria-hidden="true" />
+ <span className="hidden sm:inline">
+ {isExporting ? "내보내는 중..." : "Export"}
+ </span>
+ </Button>
+ </DropdownMenuTrigger>
+ <DropdownMenuContent align="end">
+ <DropdownMenuItem onClick={handleExport} disabled={isExporting}>
+ <FileSpreadsheet className="mr-2 size-4" />
+ <span>입찰 목록 내보내기</span>
+ </DropdownMenuItem>
+ </DropdownMenuContent>
+ </DropdownMenu>
+ </div>
+
+ {/* 전송 다이얼로그 */}
+ <TransmissionDialog
+ open={isTransmissionDialogOpen}
+ onOpenChange={setIsTransmissionDialogOpen}
+ bidding={selectedBiddings[0]}
+ userId={userId}
+ />
+ </>
)
} \ No newline at end of file