summaryrefslogtreecommitdiff
path: root/lib/bidding/detail/table/bidding-detail-content.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bidding/detail/table/bidding-detail-content.tsx')
-rw-r--r--lib/bidding/detail/table/bidding-detail-content.tsx93
1 files changed, 93 insertions, 0 deletions
diff --git a/lib/bidding/detail/table/bidding-detail-content.tsx b/lib/bidding/detail/table/bidding-detail-content.tsx
new file mode 100644
index 00000000..090e7218
--- /dev/null
+++ b/lib/bidding/detail/table/bidding-detail-content.tsx
@@ -0,0 +1,93 @@
+'use client'
+
+import * as React from 'react'
+import { Bidding } from '@/db/schema'
+import { QuotationDetails, QuotationVendor } from '@/lib/bidding/detail/service'
+import { BiddingDetailHeader } from './bidding-detail-header'
+import { BiddingDetailVendorTableContent } from './bidding-detail-vendor-table'
+import { BiddingDetailItemsDialog } from './bidding-detail-items-dialog'
+import { BiddingDetailTargetPriceDialog } from './bidding-detail-target-price-dialog'
+import { BiddingDetailSelectionReasonDialog } from './bidding-detail-selection-reason-dialog'
+
+interface BiddingDetailContentProps {
+ bidding: Bidding
+ quotationDetails: QuotationDetails | null
+ quotationVendors: QuotationVendor[]
+ biddingCompanies: any[]
+ prItems: any[]
+}
+
+export function BiddingDetailContent({
+ bidding,
+ quotationDetails,
+ quotationVendors,
+ biddingCompanies,
+ prItems
+}: BiddingDetailContentProps) {
+ const [dialogStates, setDialogStates] = React.useState({
+ items: false,
+ targetPrice: false,
+ selectionReason: false
+ })
+
+ const [refreshTrigger, setRefreshTrigger] = React.useState(0)
+
+ const handleRefresh = React.useCallback(() => {
+ setRefreshTrigger(prev => prev + 1)
+ }, [])
+
+ const openDialog = React.useCallback((type: keyof typeof dialogStates) => {
+ setDialogStates(prev => ({ ...prev, [type]: true }))
+ }, [])
+
+ const closeDialog = React.useCallback((type: keyof typeof dialogStates) => {
+ setDialogStates(prev => ({ ...prev, [type]: false }))
+ }, [])
+
+ return (
+ <div className="container py-6">
+ <section className="overflow-hidden rounded-[0.5rem] border bg-background shadow">
+ <div className="p-6">
+ <BiddingDetailHeader bidding={bidding} />
+
+ <div className="mt-6">
+ <BiddingDetailVendorTableContent
+ biddingId={bidding.id}
+ vendors={quotationVendors}
+ biddingCompanies={biddingCompanies}
+ onRefresh={handleRefresh}
+ onOpenItemsDialog={() => openDialog('items')}
+ onOpenTargetPriceDialog={() => openDialog('targetPrice')}
+ onOpenSelectionReasonDialog={() => openDialog('selectionReason')}
+ onEdit={undefined}
+ onDelete={undefined}
+ onSelectWinner={undefined}
+ />
+ </div>
+ </div>
+ </section>
+
+ <BiddingDetailItemsDialog
+ open={dialogStates.items}
+ onOpenChange={(open) => closeDialog('items')}
+ prItems={prItems}
+ bidding={bidding}
+ />
+
+ <BiddingDetailTargetPriceDialog
+ open={dialogStates.targetPrice}
+ onOpenChange={(open) => closeDialog('targetPrice')}
+ quotationDetails={quotationDetails}
+ bidding={bidding}
+ onSuccess={handleRefresh}
+ />
+
+ <BiddingDetailSelectionReasonDialog
+ open={dialogStates.selectionReason}
+ onOpenChange={(open) => closeDialog('selectionReason')}
+ bidding={bidding}
+ onSuccess={handleRefresh}
+ />
+ </div>
+ )
+}