import LoadingButton from '@mui/lab/LoadingButton'; import Grid from '@mui/material/Grid'; import Skeleton from '@mui/material/Skeleton'; import Stack from '@mui/material/Stack'; import Chip from '@mui/material/Chip'; import Typography from '@mui/material/Typography'; import MuiTextField from '@mui/material/TextField'; import Alert from '@mui/material/Alert'; import useEnqueueSnackbar from 'hooks/useEnqueueSnackbar'; import * as React from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { yupResolver } from '@hookform/resolvers/yup'; import * as yup from 'yup'; import Can from 'components/Can'; import Container from 'components/Container'; import ControlledAutocomplete from 'components/ControlledAutocomplete'; import Form from 'components/Form'; import PageTitle from 'components/PageTitle'; import TextField from 'components/TextField'; import * as URLS from 'config/urls'; import useFormatMessage from 'hooks/useFormatMessage'; import useRoles from 'hooks/useRoles.ee'; import useAdminUpdateUser from 'hooks/useAdminUpdateUser'; import useAdminUser from 'hooks/useAdminUser'; import useCurrentUserAbility from 'hooks/useCurrentUserAbility'; function generateRoleOptions(roles) { return roles?.map(({ name: label, id: value }) => ({ label, value })); } const getValidationSchema = (formatMessage, canUpdateRole) => { const getMandatoryFieldMessage = (fieldTranslationId) => formatMessage('userForm.mandatoryInput', { inputName: formatMessage(fieldTranslationId), }); return yup.object().shape({ fullName: yup .string() .trim() .required(getMandatoryFieldMessage('userForm.fullName')), email: yup .string() .trim() .email(formatMessage('userForm.validateEmail')) .required(getMandatoryFieldMessage('userForm.email')), ...(canUpdateRole ? { roleId: yup .string() .required(getMandatoryFieldMessage('userForm.role')), } : {}), }); }; const defaultValues = { fullName: '', email: '', roleId: '', }; export default function EditUser() { const formatMessage = useFormatMessage(); const { userId } = useParams(); const { mutateAsync: updateUser, isPending: isAdminUpdateUserPending } = useAdminUpdateUser(userId); const { data: userData, isLoading: isUserLoading } = useAdminUser({ userId }); const user = userData?.data; const { data, isLoading: isRolesLoading } = useRoles(); const roles = data?.data; const enqueueSnackbar = useEnqueueSnackbar(); const navigate = useNavigate(); const currentUserAbility = useCurrentUserAbility(); const canUpdateRole = currentUserAbility.can('update', 'Role'); const handleUserUpdate = async (userDataToUpdate) => { try { await updateUser({ fullName: userDataToUpdate.fullName, email: userDataToUpdate.email, roleId: userDataToUpdate.roleId, }); enqueueSnackbar(formatMessage('editUser.successfullyUpdated'), { variant: 'success', SnackbarProps: { 'data-test': 'snackbar-edit-user-success', persist: true, }, }); navigate(URLS.USERS); } catch (error) { const errors = error?.response?.data?.errors; throw errors || error; } }; return ( {formatMessage('editUserPage.title')} {isUserLoading && ( )} {!isUserLoading && (
( {formatMessage('editUser.status')} ( )} loading={isRolesLoading} showHelperText={false} /> {errors?.root?.general && ( {errors?.root?.general?.message} )} {formatMessage('editUser.submit')} )} /> )} ); }