import { Button, ButtonGroup, DialogActionTrigger, Input, Text, VStack, } from "@chakra-ui/react" import { useMutation, useQueryClient } from "@tanstack/react-query" import { useState } from "react" import { type SubmitHandler, useForm } from "react-hook-form" import { FaExchangeAlt } from "react-icons/fa" import { type ApiError, type ItemPublic, ItemsService } from "../../client" import useCustomToast from "../../hooks/useCustomToast" import { handleError } from "../../utils" import { DialogBody, DialogCloseTrigger, DialogContent, DialogFooter, DialogHeader, DialogRoot, DialogTitle, DialogTrigger, } from "../ui/dialog" import { Field } from "../ui/field" interface EditItemProps { item: ItemPublic } interface ItemUpdateForm { title: string description?: string } const EditItem = ({ item }: EditItemProps) => { const [isOpen, setIsOpen] = useState(false) const queryClient = useQueryClient() const { showSuccessToast } = useCustomToast() const { register, handleSubmit, reset, formState: { errors, isSubmitting }, } = useForm({ mode: "onBlur", criteriaMode: "all", defaultValues: { ...item, description: item.description ?? undefined, }, }) const mutation = useMutation({ mutationFn: (data: ItemUpdateForm) => ItemsService.updateItem({ id: item.id, requestBody: data }), onSuccess: () => { showSuccessToast("Item updated successfully.") reset() setIsOpen(false) }, onError: (err: ApiError) => { handleError(err) }, onSettled: () => { queryClient.invalidateQueries({ queryKey: ["items"] }) }, }) const onSubmit: SubmitHandler = async (data) => { mutation.mutate(data) } return ( setIsOpen(open)} >
Edit Item Update the item details below.
) } export default EditItem