import * as React from 'react'; import { useParams } from 'react-router-dom'; import { useMutation } from '@apollo/client'; import Container from '@mui/material/Container'; import Grid from '@mui/material/Grid'; import Stack from '@mui/material/Stack'; import MuiTextField from '@mui/material/TextField'; import LoadingButton from '@mui/lab/LoadingButton'; import { IUser, IRole } from '@automatisch/types'; import { UPDATE_USER } from 'graphql/mutations/update-user.ee'; import useUser from 'hooks/useUser'; import useRoles from 'hooks/useRoles.ee'; import PageTitle from 'components/PageTitle'; import Form from 'components/Form'; import ControlledAutocomplete from 'components/ControlledAutocomplete'; import TextField from 'components/TextField'; import useFormatMessage from 'hooks/useFormatMessage'; type EditUserParams = { userId: string; } function generateRoleOptions(roles: IRole[]) { return roles?.map(({ name: label, id: value }) => ({ label, value })); } // TODO: introduce interaction feedback upon deletion (successful + failure) // TODO: introduce loading bar export default function EditUser(): React.ReactElement { const formatMessage = useFormatMessage(); const [updateUser, { loading }] = useMutation(UPDATE_USER); const { userId } = useParams(); const { user, loading: userLoading } = useUser(userId); const { roles, loading: rolesLoading } = useRoles(); const handleUserUpdate = (userDataToUpdate: Partial) => { updateUser({ variables: { input: { id: userId, fullName: userDataToUpdate.fullName, email: userDataToUpdate.email, role: { id: userDataToUpdate.role?.id } } } }); }; if (userLoading) return ; return ( {formatMessage('editUserPage.title')}
} loading={rolesLoading} /> {formatMessage('editUser.submit')}
); }