Skip to content

Commit cca22cc

Browse files
committed
fix: update roleToDelete state type & improve role revocation handling
1 parent 9296692 commit cca22cc

2 files changed

Lines changed: 38 additions & 25 deletions

File tree

src/authz-module/libraries-manager/LibrariesUserManager.tsx

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ const LibrariesUserManager = () => {
2727
const pageManageTitle = intl.formatMessage(messages['library.authz.manage.page.title']);
2828
const teamMembersPath = `/authz/${ROUTES.LIBRARIES_TEAM_PATH.replace(':libraryId', libraryId)}`;
2929

30-
const [roleToDelete, setRoleToDelete] = useState('');
30+
const [roleToDelete, setRoleToDelete] = useState<Role | null>(null);
3131
const [showConfirmDeletionModal, setShowConfirmDeletionModal] = useState(false);
3232
const { handleShowToast, handleDiscardToast } = useToastManager();
3333

@@ -45,54 +45,66 @@ const LibrariesUserManager = () => {
4545
}, [roles, user?.roles, permissions, resources, intl]);
4646

4747
const handleCloseConfirmDeletionModal = () => {
48-
setRoleToDelete('');
48+
setRoleToDelete(null);
4949
setShowConfirmDeletionModal(false);
5050
};
5151

52-
const handleShowConfirmDeletionModal = (role: Pick<Role, 'name' | 'role'>) => {
52+
const handleShowConfirmDeletionModal = (role: Role) => {
53+
if (isRevokingUserRole) { return; }
54+
5355
handleDiscardToast();
54-
setRoleToDelete(role.name);
56+
setRoleToDelete(role);
5557
setShowConfirmDeletionModal(true);
5658
};
5759

58-
const handleRevokeUserRole = (role: string) => {
59-
if (user) {
60-
const data = {
61-
users: user.username,
62-
role: roles.find(r => r.name === role)!.role,
63-
scope: libraryId,
64-
};
60+
const handleRevokeUserRole = () => {
61+
if (!user || !roleToDelete) { return; }
6562

66-
revokeUserRoles({ data }, {
67-
onSuccess: () => {
68-
handleShowToast(intl.formatMessage(messages['library.authz.team.remove.user.toast.success.description'], {
69-
role,
70-
rolesCount: userRoles.length - 1,
71-
}));
72-
handleCloseConfirmDeletionModal();
73-
},
74-
});
75-
}
63+
const data = {
64+
users: user.username,
65+
role: roleToDelete.role,
66+
scope: libraryId,
67+
};
68+
69+
revokeUserRoles({ data }, {
70+
onSuccess: () => {
71+
const remainingRolesCount = userRoles.length - 1;
72+
handleShowToast(intl.formatMessage(
73+
messages['library.authz.team.remove.user.toast.success.description'],
74+
{
75+
role: roleToDelete.name,
76+
rolesCount: remainingRolesCount,
77+
},
78+
));
79+
handleCloseConfirmDeletionModal();
80+
},
81+
onError: (error) => {
82+
// eslint-disable-next-line no-console
83+
console.error('Failed to revoke user role:', error);
84+
handleCloseConfirmDeletionModal();
85+
// Could add error toast here if needed
86+
},
87+
});
7688
};
7789

7890
useEffect(() => {
7991
if (!isLoadingTeamMembers && !userRoles.length) {
8092
navigate(teamMembersPath);
8193
}
8294
// eslint-disable-next-line react-hooks/exhaustive-deps
83-
}, [userRoles, libraryId]);
95+
}, [userRoles.length]);
8496

8597
return (
8698
<div className="authz-libraries">
8799
<ConfirmDeletionModal
88100
isOpen={showConfirmDeletionModal}
89101
close={handleCloseConfirmDeletionModal}
90-
onSave={() => handleRevokeUserRole(roleToDelete)}
102+
onSave={handleRevokeUserRole}
91103
isDeleting={isRevokingUserRole}
92104
context={{
93105
userName: user?.username || '',
94106
scope: library.title,
95-
role: roleToDelete,
107+
role: roleToDelete?.name || '',
96108
rolesCount: userRoles.length,
97109
}}
98110
/>

src/authz-module/libraries-manager/utils.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import { actionKeys } from '@src/authz-module/components/RoleCard/constants';
2+
import { Role } from 'types';
23
import actionMessages from '../components/RoleCard/messages';
34

45
const buildPermissionsByRoleMatrix = ({
56
rolePermissions, permissions, resources, intl,
6-
}) => {
7+
}): Role['permissions'] => {
78
const permissionsMatrix = {};
89
const allowedPermissions = new Set(rolePermissions);
910

0 commit comments

Comments
 (0)