+ {{epersonDTO.eperson.id}} |
-
- {{ dsoNameService.getName(eperson) }}
+
+ {{ dsoNameService.getName(epersonDTO.eperson) }}
|
- {{messagePrefix + '.table.email' | translate}}: {{ eperson.email ? eperson.email : '-' }}
- {{messagePrefix + '.table.netid' | translate}}: {{ eperson.netid ? eperson.netid : '-' }}
+ {{messagePrefix + '.table.email' | translate}}: {{ epersonDTO.eperson.email ? epersonDTO.eperson.email : '-' }}
+ {{messagePrefix + '.table.netid' | translate}}: {{ epersonDTO.eperson.netid ? epersonDTO.eperson.netid : '-' }}
|
-
+
|
diff --git a/src/app/access-control/group-registry/group-form/members-list/members-list.component.spec.ts b/src/app/access-control/group-registry/group-form/members-list/members-list.component.spec.ts
index 9cc7727557..9a6b2b4f05 100644
--- a/src/app/access-control/group-registry/group-form/members-list/members-list.component.spec.ts
+++ b/src/app/access-control/group-registry/group-form/members-list/members-list.component.spec.ts
@@ -222,13 +222,13 @@ describe('MembersListComponent', () => {
describe('if first delete button is pressed', () => {
beforeEach(() => {
+ spyOn(component, 'search').and.callThrough();
const deleteButton: DebugElement = fixture.debugElement.query(By.css('#ePeopleMembersOfGroup tbody .fa-trash-alt'));
deleteButton.nativeElement.click();
fixture.detectChanges();
});
- it('then no ePerson remains as a member of the active group.', () => {
- const epersonsFound = fixture.debugElement.queryAll(By.css('#ePeopleMembersOfGroup tbody tr'));
- expect(epersonsFound.length).toEqual(0);
+ it('should trigger the search to add the user back to the search table', () => {
+ expect(component.search).toHaveBeenCalled();
});
});
});
@@ -264,13 +264,13 @@ describe('MembersListComponent', () => {
describe('if first add button is pressed', () => {
beforeEach(() => {
+ spyOn(component, 'search').and.callThrough();
const addButton: DebugElement = fixture.debugElement.query(By.css('#epersonsSearch tbody .fa-plus'));
addButton.nativeElement.click();
fixture.detectChanges();
});
- it('then all (two) ePersons are member of the active group. No non-members left', () => {
- epersonsFound = fixture.debugElement.queryAll(By.css('#epersonsSearch tbody tr'));
- expect(epersonsFound.length).toEqual(0);
+ it('should trigger the search to remove the user from the search table', () => {
+ expect(component.search).toHaveBeenCalled();
});
});
});
diff --git a/src/app/access-control/group-registry/group-form/members-list/members-list.component.ts b/src/app/access-control/group-registry/group-form/members-list/members-list.component.ts
index 4a707ef159..9b123ae447 100644
--- a/src/app/access-control/group-registry/group-form/members-list/members-list.component.ts
+++ b/src/app/access-control/group-registry/group-form/members-list/members-list.component.ts
@@ -24,21 +24,29 @@ import {
} from '@ngx-translate/core';
import {
BehaviorSubject,
+ combineLatest as observableCombineLatest,
Observable,
+ ObservedValueOf,
+ of as observableOf,
Subscription,
} from 'rxjs';
import {
+ defaultIfEmpty,
map,
switchMap,
take,
} from 'rxjs/operators';
import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service';
-import { PaginatedList } from '../../../../core/data/paginated-list.model';
+import {
+ buildPaginatedList,
+ PaginatedList,
+} from '../../../../core/data/paginated-list.model';
import { RemoteData } from '../../../../core/data/remote-data';
import { EPersonDataService } from '../../../../core/eperson/eperson-data.service';
import { GroupDataService } from '../../../../core/eperson/group-data.service';
import { EPerson } from '../../../../core/eperson/models/eperson.model';
+import { EpersonDtoModel } from '../../../../core/eperson/models/eperson-dto.model';
import { Group } from '../../../../core/eperson/models/group.model';
import { PaginationService } from '../../../../core/pagination/pagination.service';
import {
@@ -137,7 +145,7 @@ export class MembersListComponent implements OnInit, OnDestroy {
/**
* List of EPeople members of currently active group being edited
*/
- ePeopleMembersOfGroup: BehaviorSubject