import { useMutation, useQueryClient } from "@tanstack/react-query" import { type SubmitHandler, useForm } from "react-hook-form" import { Button, DialogActionTrigger, DialogTitle, Input, Text, VStack, } from "@chakra-ui/react" import { useState } from "react" import { FaPlus } from "react-icons/fa" import { type ItemCreate, ItemsService } from "@/client" import type { ApiError } from "@/client/core/ApiError" import useCustomToast from "@/hooks/useCustomToast" import { handleError } from "@/utils" import { DialogBody, DialogCloseTrigger, DialogContent, DialogFooter, DialogHeader, DialogRoot, DialogTrigger, } from "../ui/dialog" import { Field } from "../ui/field" const AddItem = () => { const [isOpen, setIsOpen] = useState(false) const queryClient = useQueryClient() const { showSuccessToast } = useCustomToast() const { register, handleSubmit, reset, formState: { errors, isValid, isSubmitting }, } = useForm({ mode: "onBlur", criteriaMode: "all", defaultValues: { title: "", description: "", }, }) const mutation = useMutation({ mutationFn: (data: ItemCreate) => ItemsService.createItem({ requestBody: data }), onSuccess: () => { showSuccessToast("Item created successfully.") reset() setIsOpen(false) }, onError: (err: ApiError) => { handleError(err) }, onSettled: () => { queryClient.invalidateQueries({ queryKey: ["items"] }) }, }) const onSubmit: SubmitHandler = (data) => { mutation.mutate(data) } return ( setIsOpen(open)} >
Add Item Fill in the details to add a new item.
) } export default AddItem