import { useMutation } from '@apollo/client'; import LoadingButton from '@mui/lab/LoadingButton'; import Grid from '@mui/material/Grid'; import Stack from '@mui/material/Stack'; import Skeleton from '@mui/material/Skeleton'; import * as React from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { useSnackbar } from 'notistack'; import Form from 'components/Form'; import PageTitle from 'components/PageTitle'; import Container from 'components/Container'; import PermissionCatalogField from 'components/PermissionCatalogField/index.ee'; import TextField from 'components/TextField'; import * as URLS from 'config/urls'; import { UPDATE_ROLE } from 'graphql/mutations/update-role.ee'; import { RoleWithComputedPermissions, getPermissions, getRoleWithComputedPermissions, } from 'helpers/computePermissions.ee'; import useFormatMessage from 'hooks/useFormatMessage'; import useRole from 'hooks/useRole.ee'; type EditRoleParams = { roleId: string; }; export default function EditRole(): React.ReactElement { const formatMessage = useFormatMessage(); const [updateRole, { loading }] = useMutation(UPDATE_ROLE); const navigate = useNavigate(); const { roleId } = useParams(); const { role, loading: roleLoading } = useRole(roleId); const { enqueueSnackbar } = useSnackbar(); const handleRoleUpdate = async ( roleData: Partial ) => { try { const newPermissions = getPermissions(roleData.computedPermissions); await updateRole({ variables: { input: { id: roleId, name: roleData.name, description: roleData.description, permissions: newPermissions, }, }, }); enqueueSnackbar(formatMessage('editRole.successfullyUpdated'), { variant: 'success', }); navigate(URLS.ROLES); } catch (error) { throw new Error('Failed while updating!'); } }; const roleWithComputedPermissions = getRoleWithComputedPermissions(role); return ( {formatMessage('editRolePage.title')}
{roleLoading && ( <> )} {!roleLoading && role && ( <> )} {formatMessage('editRole.submit')}
); }