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('gray.700', 'white'); const showToast = useCustomToast(); const [editMode, setEditMode] = useState(false); const { user: currentUser } = useAuth(); const { register, handleSubmit, reset, 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;