import sendCreateBeerCommentRequest from '@/requests/sendCreateBeerCommentRequest'; import BeerCommentValidationSchema from '@/services/BeerComment/schema/CreateBeerCommentValidationSchema'; import beerPostQueryResult from '@/services/BeerPost/schema/BeerPostQueryResult'; import { zodResolver } from '@hookform/resolvers/zod'; import { FunctionComponent, useState, useEffect } from 'react'; import { Rating } from 'react-daisyui'; import { useForm, SubmitHandler } from 'react-hook-form'; import { z } from 'zod'; import { useRouter } from 'next/router'; import useBeerPostComments from '@/hooks/useBeerPostComments'; import Button from '../ui/forms/Button'; import FormError from '../ui/forms/FormError'; import FormInfo from '../ui/forms/FormInfo'; import FormLabel from '../ui/forms/FormLabel'; import FormSegment from '../ui/forms/FormSegment'; import FormTextArea from '../ui/forms/FormTextArea'; interface BeerCommentFormProps { beerPost: z.infer; mutate: ReturnType['mutate'] } const BeerCommentForm: FunctionComponent = ({ beerPost, mutate, }) => { const { register, handleSubmit, formState, reset, setValue } = useForm< z.infer >({ defaultValues: { rating: 0, }, resolver: zodResolver(BeerCommentValidationSchema), }); const [rating, setRating] = useState(0); useEffect(() => { setRating(0); reset({ rating: 0, content: '' }); }, [reset]); const router = useRouter(); const onSubmit: SubmitHandler> = async ( data, ) => { setValue('rating', 0); setRating(0); await sendCreateBeerCommentRequest({ content: data.content, rating: data.rating, beerPostId: beerPost.id, }); reset(); const submitTasks: Promise[] = [ router.push(`/beers/${beerPost.id}`, undefined, { scroll: false }), mutate(), ]; await Promise.all(submitTasks); }; const { errors } = formState; return (
Leave a comment {errors.content?.message} Rating {errors.rating?.message} { setRating(value); setValue('rating', value); }} >
); }; export default BeerCommentForm;