summaryrefslogtreecommitdiff
path: root/lib/bidding/pre-quote/table/bidding-pre-quote-vendor-table.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bidding/pre-quote/table/bidding-pre-quote-vendor-table.tsx')
-rw-r--r--lib/bidding/pre-quote/table/bidding-pre-quote-vendor-table.tsx257
1 files changed, 0 insertions, 257 deletions
diff --git a/lib/bidding/pre-quote/table/bidding-pre-quote-vendor-table.tsx b/lib/bidding/pre-quote/table/bidding-pre-quote-vendor-table.tsx
deleted file mode 100644
index 5f600882..00000000
--- a/lib/bidding/pre-quote/table/bidding-pre-quote-vendor-table.tsx
+++ /dev/null
@@ -1,257 +0,0 @@
-'use client'
-
-import * as React from 'react'
-import { type DataTableAdvancedFilterField, type DataTableFilterField } from '@/types/table'
-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 { BiddingPreQuoteVendorToolbarActions } from './bidding-pre-quote-vendor-toolbar-actions'
-import { BiddingPreQuoteVendorEditDialog } from './bidding-pre-quote-vendor-edit-dialog'
-import { getBiddingPreQuoteVendorColumns, BiddingCompany } from './bidding-pre-quote-vendor-columns'
-import { Bidding } from '@/db/schema'
-import {
- deleteBiddingCompany
-} from '../service'
-import { getPriceAdjustmentFormByBiddingCompanyId } from '@/lib/bidding/detail/service'
-import { useToast } from '@/hooks/use-toast'
-import { useTransition } from 'react'
-import { PriceAdjustmentDialog } from '@/components/bidding/price-adjustment-dialog'
-import { BiddingPreQuoteItemDetailsDialog } from './bidding-pre-quote-item-details-dialog'
-import { BiddingPreQuoteAttachmentsDialog } from './bidding-pre-quote-attachments-dialog'
-import { getPrItemsForBidding } from '../service'
-
-interface BiddingPreQuoteVendorTableContentProps {
- biddingId: number
- bidding: Bidding
- biddingCompanies: BiddingCompany[]
- onRefresh: () => void
- onOpenItemsDialog: () => void
- onOpenTargetPriceDialog: () => void
- onOpenSelectionReasonDialog: () => void
- onEdit?: (company: BiddingCompany) => void
- onDelete?: (company: BiddingCompany) => void
-}
-
-const filterFields: DataTableFilterField<BiddingCompany>[] = [
- {
- id: 'companyName',
- label: '업체명',
- placeholder: '업체명으로 검색...',
- },
- {
- id: 'companyCode',
- label: '업체코드',
- placeholder: '업체코드로 검색...',
- },
- {
- id: 'contactPerson',
- label: '담당자',
- placeholder: '담당자로 검색...',
- },
-]
-
-const advancedFilterFields: DataTableAdvancedFilterField<BiddingCompany>[] = [
- {
- id: 'companyName',
- label: '업체명',
- type: 'text',
- },
- {
- id: 'companyCode',
- label: '업체코드',
- type: 'text',
- },
- {
- id: 'contactPerson',
- label: '담당자',
- type: 'text',
- },
- {
- id: 'preQuoteAmount',
- label: '사전견적금액',
- type: 'number',
- },
- {
- id: 'invitationStatus',
- label: '초대 상태',
- type: 'multi-select',
- options: [
- { label: '수락', value: 'accepted' },
- { label: '거절', value: 'declined' },
- { label: '요청됨', value: 'sent' },
- { label: '대기중', value: 'pending' },
- ],
- },
-]
-
-export function BiddingPreQuoteVendorTableContent({
- biddingId,
- bidding,
- biddingCompanies,
- onRefresh,
- onOpenItemsDialog,
- onOpenTargetPriceDialog,
- onOpenSelectionReasonDialog,
- onEdit,
- onDelete
-}: BiddingPreQuoteVendorTableContentProps) {
- const { toast } = useToast()
- const [isPending, startTransition] = useTransition()
- const [selectedCompany, setSelectedCompany] = React.useState<BiddingCompany | null>(null)
- const [isEditDialogOpen, setIsEditDialogOpen] = React.useState(false)
- const [isPriceAdjustmentDialogOpen, setIsPriceAdjustmentDialogOpen] = React.useState(false)
- const [priceAdjustmentData, setPriceAdjustmentData] = React.useState<any>(null)
- const [isItemDetailsDialogOpen, setIsItemDetailsDialogOpen] = React.useState(false)
- const [selectedCompanyForDetails, setSelectedCompanyForDetails] = React.useState<BiddingCompany | null>(null)
- const [prItems, setPrItems] = React.useState<any[]>([])
- const [isAttachmentsDialogOpen, setIsAttachmentsDialogOpen] = React.useState(false)
- const [selectedCompanyForAttachments, setSelectedCompanyForAttachments] = React.useState<BiddingCompany | null>(null)
-
- const handleDelete = (company: BiddingCompany) => {
- startTransition(async () => {
- const response = await deleteBiddingCompany(company.id)
-
- if (response.success) {
- toast({
- title: '성공',
- description: response.message,
- })
- onRefresh()
- } else {
- toast({
- title: '오류',
- description: response.error,
- variant: 'destructive',
- })
- }
- })
- }
-
- const handleEdit = (company: BiddingCompany) => {
- setSelectedCompany(company)
- setIsEditDialogOpen(true)
- }
-
-
- const handleViewPriceAdjustment = async (company: BiddingCompany) => {
- startTransition(async () => {
- const priceAdjustmentForm = await getPriceAdjustmentFormByBiddingCompanyId(company.id)
- if (priceAdjustmentForm) {
- setPriceAdjustmentData(priceAdjustmentForm)
- setSelectedCompany(company)
- setIsPriceAdjustmentDialogOpen(true)
- } else {
- toast({
- title: '정보 없음',
- description: '연동제 정보가 없습니다.',
- variant: 'destructive',
- })
- }
- })
- }
-
- const handleViewItemDetails = async (company: BiddingCompany) => {
- startTransition(async () => {
- try {
- // PR 아이템 정보 로드
- const prItemsData = await getPrItemsForBidding(biddingId)
- setPrItems(prItemsData)
- setSelectedCompanyForDetails(company)
- setIsItemDetailsDialogOpen(true)
- } catch (error) {
- console.error('Failed to load PR items:', error)
- toast({
- title: '오류',
- description: '품목 정보를 불러오는데 실패했습니다.',
- variant: 'destructive',
- })
- }
- })
- }
-
- const handleViewAttachments = (company: BiddingCompany) => {
- setSelectedCompanyForAttachments(company)
- setIsAttachmentsDialogOpen(true)
- }
-
- const columns = React.useMemo(
- () => getBiddingPreQuoteVendorColumns({
- onEdit: onEdit || handleEdit,
- onDelete: onDelete || handleDelete,
- onViewPriceAdjustment: handleViewPriceAdjustment,
- onViewItemDetails: handleViewItemDetails,
- onViewAttachments: handleViewAttachments
- }),
- [onEdit, onDelete, handleEdit, handleDelete, handleViewPriceAdjustment, handleViewItemDetails, handleViewAttachments]
- )
-
- const { table } = useDataTable({
- data: biddingCompanies,
- columns,
- pageCount: 1,
- filterFields,
- enableAdvancedFilter: true,
- initialState: {
- sorting: [{ id: 'companyName', desc: false }],
- columnPinning: { right: ['actions'] },
- },
- getRowId: (originalRow) => originalRow.id.toString(),
- shallow: false,
- clearOnDefault: true,
- })
-
- return (
- <>
- <DataTable table={table}>
- <DataTableAdvancedToolbar
- table={table}
- filterFields={advancedFilterFields}
- shallow={false}
- >
- <BiddingPreQuoteVendorToolbarActions
- table={table}
- biddingId={biddingId}
- bidding={bidding}
- biddingCompanies={biddingCompanies}
- onOpenItemsDialog={onOpenItemsDialog}
- onOpenTargetPriceDialog={onOpenTargetPriceDialog}
- onOpenSelectionReasonDialog={onOpenSelectionReasonDialog}
- onSuccess={onRefresh}
- />
- </DataTableAdvancedToolbar>
- </DataTable>
-
- <BiddingPreQuoteVendorEditDialog
- company={selectedCompany}
- open={isEditDialogOpen}
- onOpenChange={setIsEditDialogOpen}
- onSuccess={onRefresh}
- />
-
- <PriceAdjustmentDialog
- open={isPriceAdjustmentDialogOpen}
- onOpenChange={setIsPriceAdjustmentDialogOpen}
- data={priceAdjustmentData}
- vendorName={selectedCompany?.companyName || ''}
- />
-
- <BiddingPreQuoteItemDetailsDialog
- open={isItemDetailsDialogOpen}
- onOpenChange={setIsItemDetailsDialogOpen}
- biddingId={biddingId}
- biddingCompanyId={selectedCompanyForDetails?.id || 0}
- companyName={selectedCompanyForDetails?.companyName || ''}
- prItems={prItems}
- currency={bidding.currency || 'KRW'}
- />
-
- <BiddingPreQuoteAttachmentsDialog
- open={isAttachmentsDialogOpen}
- onOpenChange={setIsAttachmentsDialogOpen}
- biddingId={biddingId}
- companyId={selectedCompanyForAttachments?.companyId || 0}
- companyName={selectedCompanyForAttachments?.companyName || ''}
- />
- </>
- )
-}