import useBreweryPostComments from '@/hooks/data-fetching/brewery-comments/useBreweryPostComments'; import BreweryPostQueryResult from '@/services/posts/BreweryPost/schema/BreweryPostQueryResult'; import CreateCommentValidationSchema from '@/services/schema/CommentSchema/CreateCommentValidationSchema'; import { zodResolver } from '@hookform/resolvers/zod'; import { FC } from 'react'; import { useForm, SubmitHandler } from 'react-hook-form'; import toast from 'react-hot-toast'; import { z } from 'zod'; import sendCreateBreweryCommentRequest from '@/requests/BreweryComment/sendCreateBreweryCommentRequest'; import createErrorToast from '@/util/createErrorToast'; import CommentForm from '../ui/CommentForm'; interface BreweryCommentFormProps { breweryPost: z.infer; mutate: ReturnType['mutate']; } const BreweryCommentForm: FC = ({ breweryPost, mutate }) => { const { register, handleSubmit, formState, watch, reset, setValue } = useForm< z.infer >({ defaultValues: { rating: 0 }, resolver: zodResolver(CreateCommentValidationSchema), }); const onSubmit: SubmitHandler> = async ( data, ) => { const loadingToast = toast.loading('Posting a new comment...'); try { await sendCreateBreweryCommentRequest({ content: data.content, rating: data.rating, breweryPostId: breweryPost.id, }); reset(); toast.remove(loadingToast); toast.success('Comment posted successfully.'); await mutate(); } catch (error) { await mutate(); toast.remove(loadingToast); createErrorToast(error); reset(); } }; return ( ); }; export default BreweryCommentForm;