'use client' import * as React from 'react' import { useForm } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import * as z from 'zod' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Textarea } from '@/components/ui/textarea' import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form' import { useToast } from '@/hooks/use-toast' import { saveSelectionResult } from './actions' import { Loader2, Save, FileText } from 'lucide-react' import { Dropzone, DropzoneZone, DropzoneUploadIcon, DropzoneTitle, DropzoneDescription, DropzoneInput } from '@/components/ui/dropzone' const selectionResultSchema = z.object({ summary: z.string().min(1, '결과요약을 입력해주세요'), }) type SelectionResultFormData = z.infer interface SelectionResultFormProps { biddingId: number onSuccess: () => void } export function SelectionResultForm({ biddingId, onSuccess }: SelectionResultFormProps) { const { toast } = useToast() const [isSubmitting, setIsSubmitting] = React.useState(false) const [attachmentFiles, setAttachmentFiles] = React.useState([]) const form = useForm({ resolver: zodResolver(selectionResultSchema), defaultValues: { summary: '', }, }) const removeAttachmentFile = (index: number) => { setAttachmentFiles(prev => prev.filter((_, i) => i !== index)) } const onSubmit = async (data: SelectionResultFormData) => { setIsSubmitting(true) try { const result = await saveSelectionResult({ biddingId, summary: data.summary, attachments: attachmentFiles }) if (result.success) { toast({ title: '저장 완료', description: result.message, }) onSuccess() } else { toast({ title: '저장 실패', description: result.error, variant: 'destructive', }) } } catch (error) { console.error('Failed to save selection result:', error) toast({ title: '저장 실패', description: '선정결과 저장 중 오류가 발생했습니다.', variant: 'destructive', }) } finally { setIsSubmitting(false) } } return ( 선정결과
{/* 결과요약 */} ( 결과요약