import { useRouter } from "next/navigation"; import { useEffect, useState } from "react"; import { useQuery } from "@tanstack/react-query"; import type { UseFormReturn, Path } from "react-hook-form"; import { useConfirm } from "@frontend-opensource/use-react-hooks"; import { Input, Label, RadioGroup, RadioGroupItem, Table, TableBody, TableCell, TableHead, TableRow, Textarea, Button, } from "@common/components"; import { BOARD_POSTING_CODE } from "@/entities/board"; import { AttachmentApi } from "@/entities/attachment"; import type { Post, PostFormData, PostUpdateFormData } from "@/entities/post"; import { ENDPOINT } from "@/shared/config"; import { useUserStore, setCookie, useMenuStore } from "@/shared/lib"; import { Form, FormControl, FormField, FormItem } from "@/shared/ui/form"; import { PostingPeriodSelector } from "./posting-period-selector"; import { GeneralFileUploader } from "./general-file-uploader"; import { WithPreviewFileUploader } from "./with-preview-file-uploader"; type PostFormProps = { form: UseFormReturn; handleSave: (data: T) => Promise; }; function PostForm({ form, handleSave, }: PostFormProps) { const atflCd = form.getValues("atflCd" as Path); const router = useRouter(); const { confirm } = useConfirm(); const bbsInfo = useMenuStore((state) => state.bbsInfo); const userInfo = useUserStore((state) => state.userInfo); const [deleteAttachmentIds, setDeleteAttachmentIds] = useState([]); const { data: attachmentData } = useQuery({ queryKey: [ENDPOINT.ATTACH_SERVICE.ATTACHMENTS, atflCd], queryFn: () => AttachmentApi.getAttachmentsInfo(atflCd as string), enabled: !!atflCd, }); const onSubmit = async (data: T) => { if (await confirm("저장하시겠습니까?")) { if (deleteAttachmentIds.length > 0) { await Promise.all( deleteAttachmentIds.map(AttachmentApi.deleteAttachmentByAtflId), ); } await handleSave(data); } }; useEffect(() => { setCookie("atfl-cd-key", ""); }, []); return (
제목 } render={({ field }) => ( )} /> 작성자 } render={({ field }) => ( )} /> {!userInfo?.userUnqId && ( 비밀번호 } render={({ field }) => ( )} /> )} 내용 } render={({ field }) => (