import React, { useState } from 'react' import { Box, Button, Container, Flex, FormControl, FormErrorMessage, FormLabel, Heading, Input, Text, useColorModeValue, } from '@chakra-ui/react' import { SubmitHandler, useForm } from 'react-hook-form' import { useMutation, useQueryClient } from 'react-query' import { ApiError, UserOut, UserUpdateMe, UsersService } from '../../client' import useAuth from '../../hooks/useAuth' import useCustomToast from '../../hooks/useCustomToast' 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