diff options
Diffstat (limited to 'lib/vendor-rfq-response/vendor-tbe-table/tbe-table.tsx')
| -rw-r--r-- | lib/vendor-rfq-response/vendor-tbe-table/tbe-table.tsx | 72 |
1 files changed, 49 insertions, 23 deletions
diff --git a/lib/vendor-rfq-response/vendor-tbe-table/tbe-table.tsx b/lib/vendor-rfq-response/vendor-tbe-table/tbe-table.tsx index 3450a643..13d5dc64 100644 --- a/lib/vendor-rfq-response/vendor-tbe-table/tbe-table.tsx +++ b/lib/vendor-rfq-response/vendor-tbe-table/tbe-table.tsx @@ -7,19 +7,17 @@ import type { DataTableFilterField, DataTableRowAction, } from "@/types/table" - -import { toSentenceCase } from "@/lib/utils" +import { toast } from "sonner" 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 { useFeatureFlags } from "./feature-flags-provider" import { getColumns } from "./tbe-table-columns" -import { Vendor, vendors } from "@/db/schema/vendors" import { fetchRfqAttachmentsbyCommentId, getTBEforVendor } from "../../rfqs/service" import { CommentSheet, TbeComment } from "./comments-sheet" import { TbeVendorFields } from "@/config/vendorTbeColumnsConfig" import { useTbeFileHandlers } from "./tbeFileHandler" import { useSession } from "next-auth/react" +import { RfqDeailDialog } from "./rfq-detail-dialog" interface VendorsTableProps { promises: Promise< @@ -30,7 +28,6 @@ interface VendorsTableProps { } export function TbeVendorTable({ promises }: VendorsTableProps) { - const { featureFlags } = useFeatureFlags() const { data: session } = useSession() const userVendorId = session?.user?.companyId const userId = Number(session?.user?.id) @@ -43,8 +40,20 @@ export function TbeVendorTable({ promises }: VendorsTableProps) { const router = useRouter() const [initialComments, setInitialComments] = React.useState<TbeComment[]>([]) + const [isLoadingComments, setIsLoadingComments] = React.useState(false) + const [commentSheetOpen, setCommentSheetOpen] = React.useState(false) const [selectedRfqIdForComments, setSelectedRfqIdForComments] = React.useState<number | null>(null) + const [isRfqDetailDialogOpen, setIsRfqDetailDialogOpen] = React.useState(false) + + const [selectedRfqId, setSelectedRfqId] = React.useState<number | null>(null) + const [selectedRfq, setSelectedRfq] = React.useState<TbeVendorFields | null>(null) + + const openVendorContactsDialog = (rfqId: number, rfq: TbeVendorFields) => { + setSelectedRfqId(rfqId) + setSelectedRfq(rfq) + setIsRfqDetailDialogOpen(true) + } // TBE 파일 핸들러 훅 사용 const { @@ -62,9 +71,11 @@ export function TbeVendorTable({ promises }: VendorsTableProps) { async function openCommentSheet(vendorId: number) { setInitialComments([]) + setIsLoadingComments(true) const comments = rowAction?.row.original.comments + try { if (comments && comments.length > 0) { const commentWithAttachments: TbeComment[] = await Promise.all( comments.map(async (c) => { @@ -73,18 +84,26 @@ export function TbeVendorTable({ promises }: VendorsTableProps) { return { ...c, - commentedBy: 1, // DB나 API 응답에 있다고 가정 + commentedBy: userId, // DB나 API 응답에 있다고 가정 attachments, } }) ) - + setInitialComments(commentWithAttachments) } setSelectedRfqIdForComments(vendorId) setCommentSheetOpen(true) + + } catch (error) { + console.error("Error loading comments:", error) + toast.error("Failed to load comments") + } finally { + // End loading regardless of success/failure + setIsLoadingComments(false) } +} // getColumns() 호출 시, 필요한 모든 핸들러 함수 주입 const columns = React.useMemo( @@ -94,27 +113,25 @@ export function TbeVendorTable({ promises }: VendorsTableProps) { openCommentSheet, handleDownloadTbeTemplate, handleUploadTbeResponse, + openVendorContactsDialog }), - [setRowAction, router, openCommentSheet, handleDownloadTbeTemplate, handleUploadTbeResponse] + [setRowAction, router, openCommentSheet, handleDownloadTbeTemplate, handleUploadTbeResponse, openVendorContactsDialog] ) const filterFields: DataTableFilterField<TbeVendorFields>[] = [] const advancedFilterFields: DataTableAdvancedFilterField<TbeVendorFields>[] = [ - { id: "vendorName", label: "Vendor Name", type: "text" }, - { id: "vendorCode", label: "Vendor Code", type: "text" }, - { id: "email", label: "Email", type: "text" }, - { id: "country", label: "Country", type: "text" }, - { - id: "vendorStatus", - label: "Vendor Status", - type: "multi-select", - options: vendors.status.enumValues.map((status) => ({ - label: toSentenceCase(status), - value: status, - })), - }, + { id: "rfqCode", label: "RFQ Code", type: "text" }, + { id: "projectCode", label: "Project Code", type: "text" }, + { id: "projectName", label: "Project Name", type: "text" }, + { id: "rfqCode", label: "RFQ Code", type: "text" }, + { id: "tbeResult", label: "TBE Result", type: "text" }, + { id: "tbeNote", label: "TBE Note", type: "text" }, + { id: "rfqCode", label: "RFQ Code", type: "text" }, + { id: "hasResponse", label: "Response?", type: "boolean" }, { id: "rfqVendorUpdated", label: "Updated at", type: "date" }, + { id: "dueDate", label: "Project Name", type: "date" }, + ] const { table } = useDataTable({ @@ -150,11 +167,20 @@ export function TbeVendorTable({ promises }: VendorsTableProps) { onOpenChange={setCommentSheetOpen} rfqId={selectedRfqIdForComments} initialComments={initialComments} - vendorId={userVendorId||0} - currentUserId={userId||0} + vendorId={userVendorId || 0} + currentUserId={userId || 0} + isLoading={isLoadingComments} // Pass the loading state + /> )} + <RfqDeailDialog + isOpen={isRfqDetailDialogOpen} + onOpenChange={setIsRfqDetailDialogOpen} + rfqId={selectedRfqId} + rfq={selectedRfq} + /> + {/* TBE 파일 다이얼로그 */} <UploadDialog /> </> |
