import { yupResolver } from '@hookform/resolvers/yup'; import Alert from '@mui/material/Alert'; import AlertTitle from '@mui/material/AlertTitle'; import Button from '@mui/material/Button'; import Grid from '@mui/material/Grid'; import Typography from '@mui/material/Typography'; import { styled } from '@mui/material/styles'; import useEnqueueSnackbar from 'hooks/useEnqueueSnackbar'; import * as React from 'react'; import * as yup from 'yup'; import Container from 'components/Container'; import DeleteAccountDialog from 'components/DeleteAccountDialog/index.ee'; import Form from 'components/Form'; import PageTitle from 'components/PageTitle'; import TextField from 'components/TextField'; import useCurrentUser from 'hooks/useCurrentUser'; import useFormatMessage from 'hooks/useFormatMessage'; import useUpdateCurrentUser from 'hooks/useUpdateCurrentUser'; import useUpdateCurrentUserPassword from 'hooks/useUpdateCurrentUserPassword'; const validationSchemaProfile = yup .object({ fullName: yup.string().required('Full name is required'), email: yup.string().email().required('Email is required'), }) .required(); const validationSchemaPassword = yup .object({ currentPassword: yup.string().required('Current password is required'), password: yup.string().required('New password is required'), confirmPassword: yup .string() .oneOf([yup.ref('password')], 'Passwords must match') .required('Confirm password is required'), }) .required(); const StyledForm = styled(Form)` display: flex; align-items: end; flex-direction: column; `; const getErrorMessage = (error) => { const errors = error?.response?.data?.errors || {}; const errorMessages = Object.entries(errors) .map(([key, messages]) => { if (Array.isArray(messages) && messages.length) { return `${key} ${messages.join(', ')}`; } if (typeof messages === 'string') { return `${key} ${messages}`; } return ''; }) .filter((message) => !!message) .join(' '); return errorMessages; }; function ProfileSettings() { const [showDeleteAccountConfirmation, setShowDeleteAccountConfirmation] = React.useState(false); const enqueueSnackbar = useEnqueueSnackbar(); const { data } = useCurrentUser(); const currentUser = data?.data; const formatMessage = useFormatMessage(); const { mutateAsync: updateCurrentUser } = useUpdateCurrentUser( currentUser?.id, ); const { mutateAsync: updateCurrentUserPassword } = useUpdateCurrentUserPassword(currentUser?.id); const handleProfileSettingsUpdate = async (data) => { try { const { fullName, email } = data; await updateCurrentUser({ fullName, email }); enqueueSnackbar(formatMessage('profileSettings.updatedProfile'), { variant: 'success', SnackbarProps: { 'data-test': 'snackbar-update-profile-settings-success', }, }); } catch (error) { enqueueSnackbar( getErrorMessage(error) || formatMessage('profileSettings.updateProfileError'), { variant: 'error', SnackbarProps: { 'data-test': 'snackbar-update-profile-settings-error', }, }, ); } }; const handlePasswordUpdate = async (data) => { try { const { password, currentPassword } = data; await updateCurrentUserPassword({ currentPassword, password, }); enqueueSnackbar(formatMessage('profileSettings.updatedPassword'), { variant: 'success', SnackbarProps: { 'data-test': 'snackbar-update-password-success', }, }); } catch (error) { enqueueSnackbar( getErrorMessage(error) || formatMessage('profileSettings.updatePasswordError'), { variant: 'error', SnackbarProps: { 'data-test': 'snackbar-update-password-error', }, }, ); } }; return ( {formatMessage('profileSettings.title')} ( <> )} /> ( <> )} /> {formatMessage('profileSettings.deleteMyAccount')} {formatMessage('profileSettings.deleteAccountSubtitle')}
  1. {formatMessage('profileSettings.deleteAccountResult1')}
  2. {formatMessage('profileSettings.deleteAccountResult2')}
  3. {formatMessage('profileSettings.deleteAccountResult3')}
  4. {formatMessage('profileSettings.deleteAccountResult4')}
{showDeleteAccountConfirmation && ( setShowDeleteAccountConfirmation(false)} /> )}
); } export default ProfileSettings;