import { useMutation, useQueryClient } from "@tanstack/react-query" import { Controller, type SubmitHandler, useForm } from "react-hook-form" import { Button, DialogActionTrigger, DialogRoot, DialogTrigger, Flex, Input, Text, VStack, } from "@chakra-ui/react" import { useState } from "react" import { FaExchangeAlt } from "react-icons/fa" import { type UserPublic, type UserUpdate, UsersService } from "@/client" import type { ApiError } from "@/client/core/ApiError" import useCustomToast from "@/hooks/useCustomToast" import { emailPattern, handleError } from "@/utils" import { Checkbox } from "../ui/checkbox" import { DialogBody, DialogCloseTrigger, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from "../ui/dialog" import { Field } from "../ui/field" interface EditUserProps { user: UserPublic } interface UserUpdateForm extends UserUpdate { confirm_password?: string } const EditUser = ({ user }: EditUserProps) => { const [isOpen, setIsOpen] = useState(false) const queryClient = useQueryClient() const { showSuccessToast } = useCustomToast() const { control, register, handleSubmit, reset, getValues, formState: { errors, isSubmitting }, } = useForm({ mode: "onBlur", criteriaMode: "all", defaultValues: user, }) const mutation = useMutation({ mutationFn: (data: UserUpdateForm) => UsersService.updateUser({ userId: user.id, requestBody: data }), onSuccess: () => { showSuccessToast("User updated successfully.") reset() setIsOpen(false) }, onError: (err: ApiError) => { handleError(err) }, onSettled: () => { queryClient.invalidateQueries({ queryKey: ["users"] }) }, }) const onSubmit: SubmitHandler = async (data) => { if (data.password === "") { data.password = undefined } mutation.mutate(data) } return ( setIsOpen(open)} >
Edit User Update the user details below. value === getValues().password || "The passwords do not match", })} placeholder="Password" type="password" /> ( field.onChange(checked)} > Is superuser? )} /> ( field.onChange(checked)} > Is active? )} />
) } export default EditUser