import React from 'react'; import { Box, Button, Container, FormControl, FormErrorMessage, FormLabel, Heading, Input, useColorModeValue } from '@chakra-ui/react'; import { SubmitHandler, useForm } from 'react-hook-form'; import { useMutation } from 'react-query'; import { ApiError, UpdatePassword, UsersService } from '../../client'; import useCustomToast from '../../hooks/useCustomToast'; interface UpdatePasswordForm extends UpdatePassword { confirm_password: string; } const ChangePassword: React.FC = () => { const color = useColorModeValue('gray.700', 'white'); const showToast = useCustomToast(); const { register, handleSubmit, reset, getValues, formState: { errors, isSubmitting } } = useForm({ mode: 'onBlur', criteriaMode: 'all' }); const UpdatePassword = async (data: UpdatePassword) => { await UsersService.updatePasswordMe({ requestBody: data }) } const mutation = useMutation(UpdatePassword, { onSuccess: () => { showToast('Success!', 'Password updated.', 'success'); reset(); }, onError: (err: ApiError) => { const errDetail = err.body.detail; showToast('Something went wrong.', `${errDetail}`, 'error'); } }) const onSubmit: SubmitHandler = async (data) => { mutation.mutate(data); } return ( <> Change Password Current password {errors.current_password && {errors.current_password.message}} Set Password {errors.new_password && {errors.new_password.message}} Confirm Password value === getValues().new_password || 'The passwords do not match' })} placeholder='Password' type='password' /> {errors.confirm_password && {errors.confirm_password.message}} ); } export default ChangePassword;