@@ -3,7 +3,8 @@ import { useIntl } from '@edx/frontend-platform/i18n';
33import { Button , Toast , useToggle } from '@openedx/paragon' ;
44import { Plus } from '@openedx/paragon/icons' ;
55
6- import { useAddTeamMember } from '@src/authz-module/data/hooks' ;
6+ import { useAssignTeamMembersRole } from '@src/authz-module/data/hooks' ;
7+ import { PutAssignTeamMembersRoleResponse } from 'authz-module/data/api' ;
78import AddNewTeamMemberModal from './AddNewTeamMemberModal' ;
89import messages from './messages' ;
910
@@ -23,8 +24,9 @@ const AddNewTeamMemberTrigger: FC<AddNewTeamMemberTriggerProps> = ({
2324 const [ isOpen , open , close ] = useToggle ( false ) ;
2425 const [ additionMessage , setAdditionMessage ] = useState < string | null > ( null ) ;
2526 const [ formValues , setFormValues ] = useState ( DEFAULT_FORM_VALUES ) ;
27+ const [ isError , setIsError ] = useState ( false ) ;
2628
27- const { mutate : addTeamMember , isPending : isAddingNewTeamMember } = useAddTeamMember ( ) ;
29+ const { mutate : assignTeamMembersRole , isPending : isAssignTeamMembersRolePending } = useAssignTeamMembersRole ( ) ;
2830
2931 const handleChangeForm = ( e : React . ChangeEvent < HTMLTextAreaElement | HTMLSelectElement > ) => {
3032 const { name, value } = e . target ;
@@ -34,15 +36,40 @@ const AddNewTeamMemberTrigger: FC<AddNewTeamMemberTriggerProps> = ({
3436 } ) ) ;
3537 } ;
3638
39+ const handleErrors = ( errors : PutAssignTeamMembersRoleResponse [ 'errors' ] ) => {
40+ setIsError ( false ) ;
41+ const notFoundUsers = errors . filter ( err => err . error === 'user_not_found' ) . map ( err => err . userIdentifier ) ;
42+
43+ if ( notFoundUsers . length ) {
44+ setIsError ( true ) ;
45+ setFormValues ( ( prev ) => ( {
46+ ...prev ,
47+ users : prev . users
48+ . split ( ',' )
49+ . map ( user => user . trim ( ) )
50+ . filter ( user => notFoundUsers . includes ( user ) )
51+ . join ( ', ' ) ,
52+ } ) ) ;
53+ setAdditionMessage ( ( prevMessage ) => (
54+ `${ prevMessage ? `${ prevMessage } ` : '' } ${ intl . formatMessage (
55+ messages [ 'libraries.authz.manage.add.member.failure' ] ,
56+ { count : notFoundUsers . length } ,
57+ ) } `
58+ ) ) ;
59+ }
60+ } ;
61+
3762 const handleAddTeamMember = ( ) => {
3863 const data = {
3964 users : formValues . users . split ( ',' ) . map ( user => user . trim ( ) ) ,
4065 role : formValues . role ,
4166 scope : libraryId ,
4267 } ;
4368
44- addTeamMember ( { data } , {
69+ assignTeamMembersRole ( { data } , {
4570 onSuccess : ( successData ) => {
71+ setAdditionMessage ( null ) ;
72+
4673 if ( successData . completed . length ) {
4774 setAdditionMessage (
4875 intl . formatMessage (
@@ -53,13 +80,9 @@ const AddNewTeamMemberTrigger: FC<AddNewTeamMemberTriggerProps> = ({
5380 }
5481
5582 if ( successData . errors . length ) {
56- setAdditionMessage ( ( prevMessage ) => (
57- `${ prevMessage ? `${ prevMessage } ` : '' } ${ intl . formatMessage (
58- messages [ 'libraries.authz.manage.add.member.failure' ] ,
59- { count : successData . errors . length } ,
60- ) } `
61- ) ) ;
83+ handleErrors ( successData . errors ) ;
6284 } else {
85+ setIsError ( false ) ;
6386 close ( ) ;
6487 setFormValues ( DEFAULT_FORM_VALUES ) ;
6588 }
@@ -80,9 +103,10 @@ const AddNewTeamMemberTrigger: FC<AddNewTeamMemberTriggerProps> = ({
80103 { isOpen && (
81104 < AddNewTeamMemberModal
82105 isOpen = { isOpen }
106+ isError = { isError }
83107 close = { close }
84108 onSave = { handleAddTeamMember }
85- isLoading = { isAddingNewTeamMember }
109+ isLoading = { isAssignTeamMembersRolePending }
86110 formValues = { formValues }
87111 handleChangeForm = { handleChangeForm }
88112 />
0 commit comments