import React from 'react'; import { Button, FormControl, FormErrorMessage, FormLabel, Input, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay } from '@chakra-ui/react'; import { SubmitHandler, useForm } from 'react-hook-form'; import { useMutation, useQueryClient } from 'react-query'; import { ApiError, ItemOut, ItemUpdate, ItemsService } from '../../client'; import useCustomToast from '../../hooks/useCustomToast'; interface EditItemProps { item: ItemOut; isOpen: boolean; onClose: () => void; } const EditItem: React.FC = ({ item, isOpen, onClose }) => { const queryClient = useQueryClient(); const showToast = useCustomToast(); const { register, handleSubmit, reset, formState: { isSubmitting, errors, isDirty } } = useForm({ mode: 'onBlur', criteriaMode: 'all', defaultValues: item }); const updateItem = async (data: ItemUpdate) => { await ItemsService.updateItem({ id: item.id, requestBody: data }); } const mutation = useMutation(updateItem, { onSuccess: () => { showToast('Success!', 'Item updated successfully.', 'success'); onClose(); }, onError: (err: ApiError) => { const errDetail = err.body.detail; showToast('Something went wrong.', `${errDetail}`, 'error'); }, onSettled: () => { queryClient.invalidateQueries('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;