@@ -15,6 +15,7 @@ import {
1515import { IconTrash , IconUserPlus } from '@tabler/icons-react' ;
1616import { notifications } from '@mantine/notifications' ;
1717import { GroupMemberGetResponse , EntraActionResponse } from '@common/types/iam' ;
18+ import FullScreenLoader from '@ui/components/AuthContext/LoadingScreen' ;
1819
1920interface GroupMemberManagementProps {
2021 fetchMembers : ( ) => Promise < GroupMemberGetResponse > ;
@@ -29,7 +30,7 @@ export const GroupMemberManagement: React.FC<GroupMemberManagementProps> = ({
2930 const [ toAdd , setToAdd ] = useState < string [ ] > ( [ ] ) ;
3031 const [ toRemove , setToRemove ] = useState < string [ ] > ( [ ] ) ;
3132 const [ email , setEmail ] = useState ( '' ) ;
32- const [ isLoading , setIsLoading ] = useState ( false ) ;
33+ const [ isLoading , setIsLoading ] = useState ( true ) ;
3334 const [ confirmationModal , setConfirmationModal ] = useState ( false ) ;
3435
3536 useEffect ( ( ) => {
@@ -46,6 +47,7 @@ export const GroupMemberManagement: React.FC<GroupMemberManagementProps> = ({
4647 }
4748 } ;
4849 loadMembers ( ) ;
50+ setIsLoading ( false ) ;
4951 } , [ fetchMembers ] ) ;
5052
5153 const handleAddMember = ( ) => {
@@ -132,7 +134,6 @@ export const GroupMemberManagement: React.FC<GroupMemberManagementProps> = ({
132134 setIsLoading ( false ) ;
133135 }
134136 } ;
135-
136137 return (
137138 < Box p = "md" >
138139 < Text fw = { 500 } mb = { 4 } >
@@ -145,44 +146,47 @@ export const GroupMemberManagement: React.FC<GroupMemberManagementProps> = ({
145146 Current Members
146147 </ Text >
147148 < ScrollArea style = { { height : 250 } } >
148- < List spacing = "sm" >
149- { members . map ( ( member ) => (
150- < ListItem key = { member . email } >
151- < Group justify = "space-between" >
152- < Box >
153- < Text size = "sm" >
154- { member . name } ({ member . email } )
155- </ Text >
156- { toRemove . includes ( member . email ) && (
157- < Badge color = "red" size = "sm" >
158- Queued for removal
149+ { isLoading && < FullScreenLoader /> }
150+ { ! isLoading && (
151+ < List spacing = "sm" >
152+ { members . map ( ( member ) => (
153+ < ListItem key = { member . email } >
154+ < Group justify = "space-between" >
155+ < Box >
156+ < Text size = "sm" >
157+ { member . name } ({ member . email } )
158+ </ Text >
159+ { toRemove . includes ( member . email ) && (
160+ < Badge color = "red" size = "sm" >
161+ Queued for removal
162+ </ Badge >
163+ ) }
164+ </ Box >
165+ < ActionIcon
166+ color = "red"
167+ variant = "light"
168+ onClick = { ( ) => handleRemoveMember ( member . email ) }
169+ data-testid = { `remove-exec-member-${ member . email } ` }
170+ >
171+ < IconTrash size = { 16 } />
172+ </ ActionIcon >
173+ </ Group >
174+ </ ListItem >
175+ ) ) }
176+ { toAdd . map ( ( member ) => (
177+ < ListItem key = { member } >
178+ < Group justify = "space-between" >
179+ < Box >
180+ < Text size = "sm" > { member } </ Text >
181+ < Badge color = "green" size = "sm" >
182+ Queued for addition
159183 </ Badge >
160- ) }
161- </ Box >
162- < ActionIcon
163- color = "red"
164- variant = "light"
165- onClick = { ( ) => handleRemoveMember ( member . email ) }
166- data-testid = { `remove-exec-member-${ member . email } ` }
167- >
168- < IconTrash size = { 16 } />
169- </ ActionIcon >
170- </ Group >
171- </ ListItem >
172- ) ) }
173- { toAdd . map ( ( member ) => (
174- < ListItem key = { member } >
175- < Group justify = "space-between" >
176- < Box >
177- < Text size = "sm" > { member } </ Text >
178- < Badge color = "green" size = "sm" >
179- Queued for addition
180- </ Badge >
181- </ Box >
182- </ Group >
183- </ ListItem >
184- ) ) }
185- </ List >
184+ </ Box >
185+ </ Group >
186+ </ ListItem >
187+ ) ) }
188+ </ List >
189+ ) }
186190 </ ScrollArea >
187191 </ Box >
188192
0 commit comments