"use client" import * as React from "react" import { zodResolver } from "@hookform/resolvers/zod" import { useForm } from "react-hook-form" import { toast } from "sonner" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { Input } from "@/components/ui/input" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { createQnaSchema, type CreateQnaSchema } from "@/lib/qna/validation" import { createQna } from "../service" import { QNA_CATEGORY_LABELS } from "@/db/schema" import TiptapEditor from "@/components/qna/tiptap-editor" interface CreateQnaDialogProps { open: boolean onOpenChange: (open: boolean) => void } export function CreateQnaDialog({ open, onOpenChange }: CreateQnaDialogProps) { const [isCreatePending, startCreateTransition] = React.useTransition() const form = useForm({ resolver: zodResolver(createQnaSchema), defaultValues: { title: "", content: "", category: undefined, }, }) function onSubmit(input: CreateQnaSchema) { startCreateTransition(async () => { try { const result = await createQna(input) if (result.success) { toast.success(result.message || "질문이 성공적으로 등록되었습니다.") form.reset() onOpenChange(false) } else { toast.error(result.error || "질문 등록에 실패했습니다.") } } catch (error) { toast.error("예기치 못한 오류가 발생했습니다.") console.error("질문 생성 오류:", error) } }) } // 다이얼로그가 닫힐 때 폼 리셋 React.useEffect(() => { if (!open) { form.reset() } }, [open, form]) console.log(form.getValues(),"생성") return ( 새 질문 작성 질문의 제목과 내용을 입력해주세요. 다른 사용자들이 이해하기 쉽도록 구체적으로 작성해주세요. {/* 폼 영역: flex-1으로 남은 공간 모두 사용 */}
{/* 카테고리와 제목은 스크롤 없이 고정 */}
{/* 카테고리 선택 */} ( 카테고리 * )} /> {/* 제목 입력 */} ( 제목 * )} />
{/* 내용 입력 영역: 고정 높이로 스크롤 생성 */} ( 내용 * {/* 고정 높이 400px로 설정하여 스크롤 보장 */}
• 문제 상황을 구체적으로 설명해주세요
• 이미지 복사&붙여넣기, 드래그&드롭 지원
• 예상하는 결과와 실제 결과를 명시해주세요
)} />
) }