import { useMutation } from '@apollo/client'; import LoadingButton from '@mui/lab/LoadingButton'; import Container from '@mui/material/Container'; import Grid from '@mui/material/Grid'; import Stack from '@mui/material/Stack'; import * as React from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import Form from 'components/Form'; import PageTitle from 'components/PageTitle'; 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; } // TODO: introduce interaction feedback upon deletion (successful + failure) // TODO: introduce loading bar 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 handleRoleUpdate = async (roleData: Partial) => { const newPermissions = getPermissions(roleData.computedPermissions); await updateRole({ variables: { input: { id: roleId, name: roleData.name, description: roleData.description, permissions: newPermissions, } }, }); navigate(URLS.ROLES); }; if (roleLoading || !role) return ; const roleWithComputedPermissions = getRoleWithComputedPermissions(role); return ( {formatMessage('editRolePage.title')}
{formatMessage('editRole.submit')}
); }