import React from 'react' import { Button, Checkbox, Flex, 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 { UserCreate, UsersService } from '../../client' import { ApiError } from '../../client/core/ApiError' import useCustomToast from '../../hooks/useCustomToast' interface AddUserProps { isOpen: boolean onClose: () => void } interface UserCreateForm extends UserCreate { confirm_password: string } const AddUser: React.FC = ({ isOpen, onClose }) => { 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 addUser = async (data: UserCreate) => { await UsersService.createUser({ requestBody: data }) } const mutation = useMutation(addUser, { onSuccess: () => { showToast('Success!', 'User created successfully.', 'success') reset() onClose() }, onError: (err: ApiError) => { const errDetail = err.body.detail showToast('Something went wrong.', `${errDetail}`, 'error') }, onSettled: () => { queryClient.invalidateQueries('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