// 폐찰하기 다이얼로그 "use client" import { useState } from "react" import { toast } from "sonner" import { bidClosureAction } from "@/lib/bidding/actions" import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@/components/ui/dialog" import { Label } from "@/components/ui/label" import { Textarea } from "@/components/ui/textarea" import { Input } from "@/components/ui/input" import { Button } from "@/components/ui/button" import { FileXIcon } from "lucide-react" interface BiddingsClosureDialogProps { open: boolean; onOpenChange: (open: boolean) => void; bidding: { id: number; title: string; biddingNumber: string; } | null; userId: string; onSuccess?: () => void; } export function BiddingsClosureDialog({ open, onOpenChange, bidding, userId, onSuccess }: BiddingsClosureDialogProps) { const [description, setDescription] = useState('') const [files, setFiles] = useState([]) const [isSubmitting, setIsSubmitting] = useState(false) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (!bidding || !description.trim()) { toast.error('폐찰 사유를 입력해주세요.') return } setIsSubmitting(true) try { const result = await bidClosureAction(bidding.id, { description: description.trim(), files }, userId) if (result.success) { toast.success(result.message) onOpenChange(false) onSuccess?.() // 페이지 새로고침 또는 상태 업데이트 window.location.reload() } else { toast.error(result.error || '폐찰 처리 중 오류가 발생했습니다.') } } catch (error) { toast.error('폐찰 처리 중 오류가 발생했습니다.') } finally { setIsSubmitting(false) } } const handleFileChange = (e: React.ChangeEvent) => { if (e.target.files) { setFiles(Array.from(e.target.files)) } } if (!bidding) return null return ( 폐찰하기 {bidding.title} ({bidding.biddingNumber})를 폐찰합니다.