import { Button, Checkbox, Flex, 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 "@tanstack/react-query" import { type UserCreate, UsersService } from "../../client" import type { ApiError } from "../../client/core/ApiError" import useCustomToast from "../../hooks/useCustomToast" import { emailPattern } from "../../utils" interface AddUserProps { isOpen: boolean onClose: () => void } interface UserCreateForm extends UserCreate { confirm_password: string } const AddUser = ({ isOpen, onClose }: AddUserProps) => { const queryClient = useQueryClient() const showToast = useCustomToast() const { register, handleSubmit, reset, getValues, formState: { errors, isSubmitting }, } = useForm({ mode: "onBlur", criteriaMode: "all", defaultValues: { email: "", full_name: "", password: "", confirm_password: "", is_superuser: false, is_active: false, }, }) const mutation = useMutation({ mutationFn: (data: UserCreate) => UsersService.createUser({ requestBody: data }), onSuccess: () => { showToast("Success!", "User created successfully.", "success") reset() onClose() }, onError: (err: ApiError) => { const errDetail = (err.body as any)?.detail showToast("Something went wrong.", `${errDetail}`, "error") }, onSettled: () => { queryClient.invalidateQueries({ queryKey: ["users"] }) }, }) const onSubmit: SubmitHandler = (data) => { mutation.mutate(data) } return ( <> Add User Email {errors.email && ( {errors.email.message} )} Full name {errors.full_name && ( {errors.full_name.message} )} Set Password {errors.password && ( {errors.password.message} )} Confirm Password value === getValues().password || "The passwords do not match", })} placeholder="Password" type="password" /> {errors.confirm_password && ( {errors.confirm_password.message} )} Is superuser? Is active? ) } export default AddUser