import { Button, FormControl, FormErrorMessage, FormLabel, Input, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, } from "@chakra-ui/react" import { type SubmitHandler, useForm } from "react-hook-form" import { useMutation, useQueryClient } from "react-query" import { type ApiError, type ItemCreate, ItemsService } from "../../client" import useCustomToast from "../../hooks/useCustomToast" interface AddItemProps { isOpen: boolean onClose: () => void } const AddItem = ({ isOpen, onClose }: AddItemProps) => { const queryClient = useQueryClient() const showToast = useCustomToast() const { register, handleSubmit, reset, formState: { errors, isSubmitting }, } = useForm({ mode: "onBlur", criteriaMode: "all", defaultValues: { title: "", description: "", }, }) const addItem = async (data: ItemCreate) => { await ItemsService.createItem({ requestBody: data }) } const mutation = useMutation(addItem, { onSuccess: () => { showToast("Success!", "Item created successfully.", "success") reset() onClose() }, onError: (err: ApiError) => { const errDetail = err.body?.detail showToast("Something went wrong.", `${errDetail}`, "error") }, onSettled: () => { queryClient.invalidateQueries("items") }, }) const onSubmit: SubmitHandler = (data) => { mutation.mutate(data) } return ( <> Add Item Title {errors.title && ( {errors.title.message} )} Description ) } export default AddItem