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 { ApiError, UserUpdate } from '../../client'; import useCustomToast from '../../hooks/useCustomToast'; import { useUsersStore } from '../../store/users-store'; interface EditUserProps { user_id: number; isOpen: boolean; onClose: () => void; } interface UserUpdateForm extends UserUpdate { confirm_password: string; } const EditUser: React.FC = ({ user_id, isOpen, onClose }) => { const showToast = useCustomToast(); const { editUser, users } = useUsersStore(); const currentUser = users.find((user) => user.id === user_id); const { register, handleSubmit, reset, getValues, formState: { errors, isSubmitting } } = useForm({ mode: 'onBlur', criteriaMode: 'all', defaultValues: { email: currentUser?.email, full_name: currentUser?.full_name, password: '', confirm_password: '', is_superuser: currentUser?.is_superuser, is_active: currentUser?.is_active } }); const onSubmit: SubmitHandler = async (data) => { try { if (data.password === '') { delete data.password; } await editUser(user_id, data); showToast('Success!', 'User updated successfully.', 'success'); reset(); onClose(); } catch (err) { const errDetail = (err as ApiError).body.detail; showToast('Something went wrong.', `${errDetail}`, 'error'); } } const onCancel = () => { reset(); onClose(); } return ( <> Edit User Email {errors.email && {errors.email.message}} Full name Set Password {errors.password && {errors.password.message}} Confirm Password value === getValues().password || 'The passwords do not match' })} placeholder='••••••••' type='password' /> {errors.confirm_password && {errors.confirm_password.message}} Is superuser? Is active? ) } export default EditUser;