@@ -172,12 +172,21 @@ export class MembersListComponent implements OnInit, OnDestroy {
172172 // The search form
173173 searchForm ;
174174
175+ // The current member search form
176+ searchCurrentMembersForm ;
177+
175178 // Current search in edit group - epeople search form
176179 currentSearchQuery : string ;
177180
181+ // Current search in edit group - epeople current members search form
182+ currentMembersSearchQuery : string ;
183+
178184 // Whether or not user has done a EPeople search yet
179185 searchDone : boolean ;
180186
187+ // Whether or not user has done a EPeople Member search yet
188+ searchCurrentMembersDone : boolean ;
189+
181190 // current active group being edited
182191 groupBeingEdited : Group ;
183192
@@ -194,12 +203,18 @@ export class MembersListComponent implements OnInit, OnDestroy {
194203 public dsoNameService : DSONameService ,
195204 ) {
196205 this . currentSearchQuery = '' ;
206+ this . currentMembersSearchQuery = '' ;
197207 }
198208
199209 ngOnInit ( ) : void {
200210 this . searchForm = this . formBuilder . group ( ( {
201211 query : '' ,
202212 } ) ) ;
213+
214+ this . searchCurrentMembersForm = this . formBuilder . group ( ( {
215+ queryCurrentMembers : '' ,
216+ } ) ) ;
217+
203218 this . subs . set ( SubKey . ActiveGroup , this . groupDataService . getActiveGroup ( ) . subscribe ( ( activeGroup : Group ) => {
204219 if ( activeGroup != null ) {
205220 this . groupBeingEdited = activeGroup ;
@@ -354,6 +369,55 @@ export class MembersListComponent implements OnInit, OnDestroy {
354369 } ) ) ;
355370 }
356371
372+ /**
373+ * Search all EPeople who are a member of the current group by name, email or metadata
374+ * @param data Contains query param
375+ */
376+ searchMembers ( data : any ) {
377+ this . unsubFrom ( SubKey . Members ) ;
378+ this . subs . set ( SubKey . Members ,
379+ this . paginationService . getCurrentPagination ( this . config . id , this . config ) . pipe (
380+ switchMap ( ( paginationOptions ) => {
381+ const query : string = data . queryCurrentMembers ;
382+ if ( query != null && this . currentMembersSearchQuery !== query && this . groupBeingEdited ) {
383+ this . currentMembersSearchQuery = query ;
384+ this . paginationService . resetPage ( this . config . id ) ;
385+ }
386+ this . searchCurrentMembersDone = true ;
387+
388+ return this . ePersonDataService . searchMembers ( this . currentMembersSearchQuery , this . groupBeingEdited . id , {
389+ currentPage : paginationOptions . currentPage ,
390+ elementsPerPage : paginationOptions . pageSize ,
391+ } , false , true ) ;
392+ } ) ,
393+ getAllCompletedRemoteData ( ) ,
394+ map ( ( rd : RemoteData < any > ) => {
395+ if ( rd . hasFailed ) {
396+ this . notificationsService . error ( this . translateService . get ( this . messagePrefix + '.notification.failure' , { cause : rd . errorMessage } ) ) ;
397+ } else {
398+ return rd ;
399+ }
400+ } ) ,
401+ switchMap ( ( epersonListRD : RemoteData < PaginatedList < EPerson > > ) => {
402+ const dtos$ = observableCombineLatest ( [ ...epersonListRD . payload . page . map ( ( member : EPerson ) => {
403+ const dto$ : Observable < EpersonDtoModel > = observableCombineLatest (
404+ this . isMemberOfGroup ( member ) , ( isMember : ObservedValueOf < Observable < boolean > > ) => {
405+ const epersonDtoModel : EpersonDtoModel = new EpersonDtoModel ( ) ;
406+ epersonDtoModel . eperson = member ;
407+ epersonDtoModel . ableToDelete = isMember ;
408+ return epersonDtoModel ;
409+ } ) ;
410+ return dto$ ;
411+ } ) ] ) ;
412+ return dtos$ . pipe ( defaultIfEmpty ( [ ] ) , map ( ( dtos : EpersonDtoModel [ ] ) => {
413+ return buildPaginatedList ( epersonListRD . payload . pageInfo , dtos ) ;
414+ } ) ) ;
415+ } ) ,
416+ ) . subscribe ( ( paginatedListOfDTOs : PaginatedList < EpersonDtoModel > ) => {
417+ this . ePeopleMembersOfGroup . next ( paginatedListOfDTOs ) ;
418+ } ) ) ;
419+ }
420+
357421 /**
358422 * unsub all subscriptions
359423 */
@@ -391,4 +455,14 @@ export class MembersListComponent implements OnInit, OnDestroy {
391455 } ) ;
392456 this . search ( { query : '' } ) ;
393457 }
458+
459+ /**
460+ * Reset all input-fields to be empty and search all search
461+ */
462+ clearCurrentMembersFormAndResetResult ( ) {
463+ this . searchCurrentMembersForm . patchValue ( {
464+ queryCurrentMembers :'' ,
465+ } ) ;
466+ this . searchMembers ( { queryCurrentMembers : '' } ) ;
467+ }
394468}
0 commit comments