import { Box, Button, Container, Flex, FormControl, FormErrorMessage, FormLabel, Heading, Input, Text, useColorModeValue, } from "@chakra-ui/react" import type React from "react" import { useState } from "react" import { type SubmitHandler, useForm } from "react-hook-form" import { useMutation, useQueryClient } from "react-query" import { type ApiError, type UserOut, type UserUpdateMe, UsersService, } from "../../client" import useAuth from "../../hooks/useAuth" import useCustomToast from "../../hooks/useCustomToast" import { emailPattern } from "../../utils" const UserInformation: React.FC = () => { const queryClient = useQueryClient() const color = useColorModeValue("inherit", "ui.white") const showToast = useCustomToast() const [editMode, setEditMode] = useState(false) const { user: currentUser } = useAuth() const { register, handleSubmit, reset, getValues, formState: { isSubmitting, errors, isDirty }, } = useForm({ mode: "onBlur", criteriaMode: "all", defaultValues: { full_name: currentUser?.full_name, email: currentUser?.email, }, }) const toggleEditMode = () => { setEditMode(!editMode) } const updateInfo = async (data: UserUpdateMe) => { await UsersService.updateUserMe({ requestBody: data }) } const mutation = useMutation(updateInfo, { onSuccess: () => { showToast("Success!", "User updated successfully.", "success") }, onError: (err: ApiError) => { const errDetail = err.body?.detail showToast("Something went wrong.", `${errDetail}`, "error") }, onSettled: () => { queryClient.invalidateQueries("users") queryClient.invalidateQueries("currentUser") }, }) const onSubmit: SubmitHandler = async (data) => { mutation.mutate(data) } const onCancel = () => { reset() toggleEditMode() } return ( <> User Information Full name {editMode ? ( ) : ( {currentUser?.full_name || "N/A"} )} Email {editMode ? ( ) : ( {currentUser?.email} )} {errors.email && ( {errors.email.message} )} {editMode && ( )} ) } export default UserInformation