import sendCreateBeerCommentRequest from '@/requests/sendCreateBeerCommentRequest'; import { BeerCommentQueryResultArrayT } from '@/services/BeerComment/schema/BeerCommentQueryResult'; import BeerCommentValidationSchema from '@/services/BeerComment/schema/CreateBeerCommentValidationSchema'; import { BeerPostQueryResult } from '@/services/BeerPost/schema/BeerPostQueryResult'; import { zodResolver } from '@hookform/resolvers/zod'; import { useRouter } from 'next/router'; import { Dispatch, SetStateAction, FunctionComponent, useState, useEffect } from 'react'; import { Rating } from 'react-daisyui'; import { useForm, SubmitHandler } from 'react-hook-form'; import { z } from 'zod'; 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: BeerPostQueryResult; setComments: Dispatch>; } const BeerCommentForm: FunctionComponent = ({ beerPost }) => { 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(); router.replace(`/beers/${beerPost.id}?comments_page=1`, undefined, { scroll: false }); }; const { errors } = formState; return (
Leave a comment {errors.content?.message} Rating {errors.rating?.message} { setRating(value); setValue('rating', value); }} >
); }; export default BeerCommentForm;