summaryrefslogtreecommitdiff
path: root/lib/bidding/pre-quote/table/bidding-pre-quote-vendor-toolbar-actions.tsx
blob: 34e53fb2fa8ee6b32ca98067cb234e9b02283681 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
"use client"

import * as React from "react"
import { type Table } from "@tanstack/react-table"
import { useTransition } from "react"
import { Button } from "@/components/ui/button"
import { Plus, Send, Mail, CheckSquare } from "lucide-react"
import { BiddingCompany } from "./bidding-pre-quote-vendor-columns"
import { BiddingPreQuoteVendorCreateDialog } from "./bidding-pre-quote-vendor-create-dialog"
import { BiddingPreQuoteInvitationDialog } from "./bidding-pre-quote-invitation-dialog"
import { BiddingPreQuoteSelectionDialog } from "./bidding-pre-quote-selection-dialog"
import { Bidding } from "@/db/schema" 
import { useToast } from "@/hooks/use-toast"

interface BiddingPreQuoteVendorToolbarActionsProps {
  table: Table<BiddingCompany>
  biddingId: number
  bidding: Bidding
  biddingCompanies: BiddingCompany[]
  onOpenItemsDialog: () => void
  onOpenTargetPriceDialog: () => void
  onOpenSelectionReasonDialog: () => void
  onSuccess: () => void
}

export function BiddingPreQuoteVendorToolbarActions({
  table,
  biddingId,
  bidding,
  biddingCompanies,
  onOpenItemsDialog,
  onOpenTargetPriceDialog,
  onOpenSelectionReasonDialog,
  onSuccess
}: BiddingPreQuoteVendorToolbarActionsProps) {
  const { toast } = useToast()
  const [isPending, startTransition] = useTransition()
  const [isCreateDialogOpen, setIsCreateDialogOpen] = React.useState(false)
  const [isInvitationDialogOpen, setIsInvitationDialogOpen] = React.useState(false)
  const [isSelectionDialogOpen, setIsSelectionDialogOpen] = React.useState(false)

  const handleCreateCompany = () => {
    setIsCreateDialogOpen(true)
  }

  const handleSendInvitations = () => {
    setIsInvitationDialogOpen(true)
  }

  const handleManageSelection = () => {
    const selectedRows = table.getFilteredSelectedRowModel().rows
    if (selectedRows.length === 0) {
      toast({
        title: '선택 필요',
        description: '본입찰 선정 상태를 변경할 업체를 선택해주세요.',
        variant: 'destructive',
      })
      return
    }
    setIsSelectionDialogOpen(true)
  }



  return (
    <>
      <div className="flex items-center gap-2">
        <Button
          variant="outline"
          size="sm"
          onClick={handleCreateCompany}
          disabled={isPending}
        >
          <Plus className="mr-2 h-4 w-4" />
          업체 추가
        </Button>
        
        <Button
          variant="default"
          size="sm"
          onClick={handleSendInvitations}
          disabled={isPending}
        >
          <Mail className="mr-2 h-4 w-4" />
          초대 발송
        </Button>
        
        <Button
          variant="secondary"
          size="sm"
          onClick={handleManageSelection}
          disabled={isPending}
        >
          <CheckSquare className="mr-2 h-4 w-4" />
          본입찰 선정
        </Button>
      </div>

      <BiddingPreQuoteVendorCreateDialog
        biddingId={biddingId}
        open={isCreateDialogOpen}
        onOpenChange={setIsCreateDialogOpen}
        onSuccess={() => {
          onSuccess()
          setIsCreateDialogOpen(false)
        }}
      />

      <BiddingPreQuoteInvitationDialog
        open={isInvitationDialogOpen}
        onOpenChange={setIsInvitationDialogOpen}
        companies={biddingCompanies}
        biddingId={biddingId}
        biddingTitle={bidding.title}
        projectName={bidding.projectName}
        onSuccess={onSuccess}
      />

      <BiddingPreQuoteSelectionDialog
        open={isSelectionDialogOpen}
        onOpenChange={setIsSelectionDialogOpen}
        selectedCompanies={table.getFilteredSelectedRowModel().rows.map(row => row.original)}
        onSuccess={() => {
          onSuccess()
          table.resetRowSelection()
        }}
      />
    </>
  )
}