import { Button, FormControl, FormErrorMessage, FormLabel, Input, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, } from "@chakra-ui/react" import { useMutation, useQueryClient } from "@tanstack/react-query" import { type SubmitHandler, useForm } from "react-hook-form" import { type ApiError, type ItemPublic, type ItemUpdate, ItemsService, } from "../../client" import useCustomToast from "../../hooks/useCustomToast" import { handleError } from "../../utils" interface EditItemProps { item: ItemPublic isOpen: boolean onClose: () => void } const EditItem = ({ item, isOpen, onClose }: EditItemProps) => { const queryClient = useQueryClient() const showToast = useCustomToast() const { register, handleSubmit, reset, formState: { isSubmitting, errors, isDirty }, } = useForm({ mode: "onBlur", criteriaMode: "all", defaultValues: item, }) const mutation = useMutation({ mutationFn: (data: ItemUpdate) => ItemsService.updateItem({ id: item.id, requestBody: data }), onSuccess: () => { showToast("Success!", "Item updated successfully.", "success") onClose() }, onError: (err: ApiError) => { handleError(err, showToast) }, onSettled: () => { queryClient.invalidateQueries({ queryKey: ["items"] }) }, }) const onSubmit: SubmitHandler = async (data) => { mutation.mutate(data) } const onCancel = () => { reset() onClose() } return ( <> Edit Item Title {errors.title && ( {errors.title.message} )} Description ) } export default EditItem