import { useCallback, useEffect, useState } from 'react' import { Button, FormControl, FormErrorMessage, Input, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, } from '@chakra-ui/react' import { useSWRConfig } from 'swr' import { Field, FieldAttributes, FieldProps, Form, Formik, FormikHelpers, } from 'formik' import * as Yup from 'yup' import cx from 'classnames' import UserAPI, { User } from '@/client/idp/user' export type AccountChangePasswordProps = { open: boolean user: User onClose?: () => void } type FormValues = { currentPassword: string newPassword: string } const AccountChangePassword = ({ open, onClose, }: AccountChangePasswordProps) => { const { mutate } = useSWRConfig() const [isModalOpen, setIsModalOpen] = useState(false) const initialValues: FormValues = { currentPassword: '', newPassword: '' } const formSchema = Yup.object().shape({ currentPassword: Yup.string().required('Current password is required'), newPassword: Yup.string().required('New password is required'), }) useEffect(() => { setIsModalOpen(open) }, [open]) const handleSubmit = useCallback( async ( { currentPassword, newPassword }: FormValues, { setSubmitting }: FormikHelpers, ) => { setSubmitting(true) try { const result = await UserAPI.updatePassword({ currentPassword, newPassword, }) mutate(`/user`, result) setSubmitting(false) onClose?.() } finally { setSubmitting(false) } }, [onClose, mutate], ) return ( onClose?.()} closeOnOverlayClick={false} > Change Password {({ errors, touched, isSubmitting }) => (
{({ field }: FieldAttributes) => ( {errors.currentPassword} )} {({ field }: FieldAttributes) => ( {errors.newPassword} )}
)}
) } export default AccountChangePassword