Skip to content

Commit 129a24d

Browse files
bra-i-amdcoa
authored andcommitted
fix: update roleToDelete state type & improve role revocation handling
1 parent 56b0fe3 commit 129a24d

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
@@ -28,7 +28,7 @@ const LibrariesUserManager = () => {
2828
const pageManageTitle = intl.formatMessage(messages['library.authz.manage.page.title']);
2929
const teamMembersPath = `/authz/${ROUTES.LIBRARIES_TEAM_PATH.replace(':libraryId', libraryId)}`;
3030

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

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

4848
const handleCloseConfirmDeletionModal = () => {
49-
setRoleToDelete('');
49+
setRoleToDelete(null);
5050
setShowConfirmDeletionModal(false);
5151
};
5252

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

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

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

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

8698
return (
8799
<div className="authz-libraries">
88100
<ConfirmDeletionModal
89101
isOpen={showConfirmDeletionModal}
90102
close={handleCloseConfirmDeletionModal}
91-
onSave={() => handleRevokeUserRole(roleToDelete)}
103+
onSave={handleRevokeUserRole}
92104
isDeleting={isRevokingUserRole}
93105
context={{
94106
userName: user?.username || '',
95107
scope: library.title,
96-
role: roleToDelete,
108+
role: roleToDelete?.name || '',
97109
rolesCount: userRoles.length,
98110
}}
99111
/>

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

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

45
/**
@@ -15,7 +16,7 @@ import actionMessages from '../components/RoleCard/messages';
1516
*/
1617
const buildPermissionsByRoleMatrix = ({
1718
rolePermissions, permissions, resources, intl,
18-
}) => {
19+
}): Role['permissions'] => {
1920
const permissionsMatrix = {};
2021
const allowedPermissions = new Set(rolePermissions);
2122

0 commit comments

Comments
 (0)