import { FC } from 'react'; import { useRouter } from 'next/router'; import toast from 'react-hot-toast'; import { z } from 'zod'; import { useForm, SubmitHandler } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import EditBeerPostValidationSchema from '@/services/posts/beer-post/schema/EditBeerPostValidationSchema'; import createErrorToast from '@/util/createErrorToast'; import { sendEditBeerPostRequest, sendDeleteBeerPostRequest, } from '@/requests/posts/beer-post'; 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'; import FormTextInput from './ui/forms/FormTextInput'; type EditBeerPostSchema = z.infer; interface EditBeerPostFormProps { previousValues: EditBeerPostSchema; } const EditBeerPostForm: FC = ({ previousValues }) => { const router = useRouter(); const { register, handleSubmit, formState } = useForm({ resolver: zodResolver(EditBeerPostValidationSchema), defaultValues: previousValues, }); const { isSubmitting, errors } = formState; const onSubmit: SubmitHandler = async (data) => { try { const loadingToast = toast.loading('Editing beer post...'); await sendEditBeerPostRequest({ beerPostId: data.id, body: { name: data.name, abv: data.abv, ibu: data.ibu, description: data.description, }, }); await router.push(`/beers/${data.id}`); toast.success('Edited beer post.'); toast.dismiss(loadingToast); } catch (e) { createErrorToast(e); await router.push(`/beers/${data.id}`); } }; const onDelete = async () => { try { const loadingToast = toast.loading('Deleting beer post...'); await sendDeleteBeerPostRequest({ beerPostId: previousValues.id }); toast.dismiss(loadingToast); await router.push('/beers'); toast.success('Deleted beer post.'); } catch (e) { createErrorToast(e); await router.push(`/beers`); } }; return (
Name {errors.name?.message}
ABV {errors.abv?.message}
IBU {errors.ibu?.message}
Description {errors.description?.message}
); }; export default EditBeerPostForm;