"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 { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { Input } from "@/components/ui/input" import { ScrollArea } from "@/components/ui/scroll-area" import { Sheet, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, } from "@/components/ui/sheet" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { updateQnaSchema, type UpdateQnaSchema } from "@/lib/qna/validation" import { QNA_CATEGORY_LABELS, QnaViewSelect } from "@/db/schema" import { updateQna } from "../service" import TiptapEditor from "@/components/qna/tiptap-editor" interface UpdateQnaSheetProps { open: boolean onOpenChange: (open: boolean) => void qna: QnaViewSelect | null } export function UpdateQnaSheet({ open, onOpenChange, qna }: UpdateQnaSheetProps) { const [isUpdatePending, startUpdateTransition] = React.useTransition() const form = useForm({ resolver: zodResolver(updateQnaSchema), defaultValues: { title: "", content: "", category: undefined, }, }) // qna 데이터가 변경될 때 폼 초기화 React.useEffect(() => { if (qna) { form.reset({ title: qna.title, content: qna.content, category: qna.category, }) } }, [qna, form]) function onSubmit(input: UpdateQnaSchema) { if (!qna) return startUpdateTransition(async () => { try { const result = await updateQna(qna.id, input) if (result.success) { toast.success(result.message || "질문이 성공적으로 수정되었습니다.") onOpenChange(false) } else { toast.error(result.error || "질문 수정에 실패했습니다.") } } catch (error) { toast.error("예기치 못한 오류가 발생했습니다.") console.error("질문 수정 오류:", error) } }) } return ( 질문 수정 질문의 제목과 내용을 수정할 수 있습니다. 수정된 내용은 즉시 반영됩니다.
{/* 작성자 정보 표시 */} {qna && (
질문 정보
작성자: {qna.authorName} ({qna.authorEmail})
회사: {qna.companyName || "미지정"}
작성일: {new Date(qna.createdAt).toLocaleDateString("ko-KR")}
답변 수: {qna.totalAnswers}개 / 댓글 수: {qna.totalComments}개
)} {/* 제목 입력 */} ( 제목 * )} /> ( 카테고리 * )} /> {/* 내용 입력 (리치텍스트 에디터) */} ( 내용 * )} />
) }