'use client'; import { useState } from 'react'; import { useMutation, useSuspenseQuery } from '@tanstack/react-query'; import { toast } from 'sonner'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; import { Textarea } from '@/components/ui/textarea'; import { Button } from '@/components/ui/button'; import { quotationByIdOptions } from '../api/queries'; import { approveQuotationMutation, createQuotationRevisionMutation, markQuotationStatusMutation, rejectQuotationMutation, submitApprovalMutation } from '../api/mutations'; import { AuditTimeline, CustomerRoleCards, InfoGrid, QuotationPreviewPanel, QuotationStatusBadge, SectionCard, TimelineList } from './shared'; import { formatCurrency } from '../utils/format'; function ApprovalDialog({ title, description, actionLabel, onConfirm, isPending }: { title: string; description: string; actionLabel: string; onConfirm: (comment: string) => void; isPending: boolean; }) { const [comment, setComment] = useState(''); return ( ); } export function QuotationDetailPage({ id }: { id: string }) { const { data } = useSuspenseQuery(quotationByIdOptions(id)); const baseSubmitApproval = submitApprovalMutation; const baseApproveMutation = approveQuotationMutation; const baseRejectMutation = rejectQuotationMutation; const baseReviseMutation = createQuotationRevisionMutation; const baseMarkStatusMutation = markQuotationStatusMutation; const submitApproval = useMutation({ ...baseSubmitApproval, onSuccess: async (...args) => { await baseSubmitApproval.onSuccess?.(...args); toast.success('ส่งเข้าสายอนุมัติแล้ว'); } }); const approveMutation = useMutation({ ...baseApproveMutation, onSuccess: async (...args) => { await baseApproveMutation.onSuccess?.(...args); toast.success('อนุมัติ mock สำเร็จ'); } }); const rejectMutation = useMutation({ ...baseRejectMutation, onSuccess: async (...args) => { await baseRejectMutation.onSuccess?.(...args); toast.success('Reject mock สำเร็จ'); } }); const reviseMutation = useMutation({ ...baseReviseMutation, onSuccess: async (...args) => { await baseReviseMutation.onSuccess?.(...args); toast.success('สร้าง revision mock สำเร็จ'); } }); const markStatusMutation = useMutation({ ...baseMarkStatusMutation, onSuccess: async (...args) => { await baseMarkStatusMutation.onSuccess?.(...args); toast.success('อัปเดตสถานะ mock สำเร็จ'); } }); const ownerCustomer = data.customers.find((customer) => data.quotation.customerRoles.some( (role) => role.role === 'owner' && role.customerId === customer.id ) ); const ownerContact = data.contacts.find((contact) => data.quotation.customerRoles.some( (role) => role.role === 'owner' && role.contactId === contact.id ) ); return (
{item.description}
{item.topic}
{item.quantity} {item.unit}
{formatCurrency(item.amount)}
{topic.label}
{attachment.fileName}
{attachment.fileType.toUpperCase()}