55import { useIntl } from '@edx/frontend-platform/i18n' ;
66import { AppContext } from '@edx/frontend-platform/react' ;
77import type { AppContextType } from '@edx/frontend-platform/react' ;
8- import debounce from 'lodash.debounce' ;
98import {
109 Container , DataTable ,
1110} from '@openedx/paragon' ;
@@ -15,7 +14,7 @@ import {
1514} from '@src/authz-module/constants' ;
1615import AuthZLayout from '@src/authz-module/components/AuthZLayout' ;
1716import { useNavigate , useParams } from 'react-router-dom' ;
18- import { useUserAccount , useValidateUserPermissions } from '@src/data/hooks' ;
17+ import { useUserAccount , useValidateUserPermissionsNonSuspense } from '@src/data/hooks' ;
1918import baseMessages from '@src/authz-module/messages' ;
2019import AddRoleButton from '@src/authz-module/components/AddRoleButton' ;
2120import {
@@ -59,9 +58,25 @@ const AuditUserPage = () => {
5958 return uniqueScopes . map ( scope => getScopeManageActionPermission ( scope ) ) ;
6059 } , [ userAssignments ] ) ;
6160
62- const { data : permissionsToManageScope } = useValidateUserPermissions ( deletePermissions ) ;
61+ const {
62+ data : permissionsToManageScope ,
63+ } = useValidateUserPermissionsNonSuspense ( deletePermissions ) ;
64+
65+ const rowsWithPermissions = useMemo ( ( ) => {
66+ if ( ! permissionsToManageScope ) { return userAssignments ; }
67+
68+ return userAssignments . map ( assignment => {
69+ const canManageScope = permissionsToManageScope . some (
70+ permission => permission . scope === assignment . scope && permission . allowed ,
71+ ) ;
72+ return {
73+ ...assignment ,
74+ canManageScope,
75+ } ;
76+ } ) ;
77+ } , [ userAssignments , permissionsToManageScope ] ) ;
6378
64- const fetchData = useMemo ( ( ) => debounce ( handleTableFetch , 500 ) , [ handleTableFetch ] ) ;
79+ const fetchData = useMemo ( ( ) => handleTableFetch , [ handleTableFetch ] ) ;
6580
6681 useEffect ( ( ) => {
6782 if ( ! user && ! isLoadingUser ) {
@@ -72,20 +87,13 @@ const AuditUserPage = () => {
7287 }
7388 } , [ user , isLoadingUser , navigate , isErrorUser , errorUser ] ) ;
7489
75- useEffect ( ( ) => ( ) => fetchData . cancel ( ) , [ fetchData ] ) ;
76-
7790 const handleShowConfirmDeletionModal = useCallback ( ( role : RoleToDelete ) => {
7891 if ( isRevokingUserRolePending ) { return ; }
7992
8093 setRoleToDelete ( role ) ;
8194 setShowConfirmDeletionModal ( true ) ;
8295 } , [ isRevokingUserRolePending ] ) ;
8396
84- const hasPermissionToDeleteScope = useCallback ( ( scope : string ) => {
85- const permissionIndex = deletePermissions . findIndex ( permission => permission . scope === scope ) ;
86- return permissionsToManageScope ?. [ permissionIndex ] ?. allowed ;
87- } , [ deletePermissions , permissionsToManageScope ] ) ;
88-
8997 const navLinks = useMemo ( ( ) => [
9098 {
9199 label : formatMessage ( baseMessages [ 'authz.management.home.nav.link' ] ) ,
@@ -105,10 +113,9 @@ const AuditUserPage = () => {
105113 Cell : createActionsCell ( {
106114 onClickDeleteButton : handleShowConfirmDeletionModal ,
107115 isUserAuthenticatedPage : username === authenticatedUser . username ,
108- hasPermissionToDeleteScope,
109116 } ) ,
110117 } ,
111- ] , [ authenticatedUser . username , formatMessage , handleShowConfirmDeletionModal , hasPermissionToDeleteScope , username ] ) ;
118+ ] , [ authenticatedUser . username , formatMessage , handleShowConfirmDeletionModal , username ] ) ;
112119
113120 const columns = useMemo ( ( ) => [
114121 {
@@ -242,7 +249,7 @@ const AuditUserPage = () => {
242249 isFilterable
243250 isSortable
244251 manualPagination
245- data = { userAssignments }
252+ data = { rowsWithPermissions }
246253 manualFilters
247254 manualSortBy
248255 fetchData = { fetchData }
0 commit comments