Commits

Art Lowel authored 50cb219045d
fix issue where the group overview page would throw an error after deleting a group
No tags

src/app/access-control/group-registry/groups-registry.component.ts

Modified
1 1 import { Component, OnDestroy, OnInit } from '@angular/core';
2 2 import { FormBuilder } from '@angular/forms';
3 3 import { Router } from '@angular/router';
4 4 import { TranslateService } from '@ngx-translate/core';
5 5 import {
6 6 BehaviorSubject,
7 7 combineLatest as observableCombineLatest,
8 + EMPTY,
8 9 Observable,
9 10 of as observableOf,
10 11 Subscription
11 12 } from 'rxjs';
12 -import { catchError, map, switchMap, tap } from 'rxjs/operators';
13 +import { catchError, defaultIfEmpty, map, switchMap, tap } from 'rxjs/operators';
13 14 import { DSpaceObjectDataService } from '../../core/data/dspace-object-data.service';
14 15 import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service';
15 16 import { FeatureID } from '../../core/data/feature-authorization/feature-id';
16 17 import { buildPaginatedList, PaginatedList } from '../../core/data/paginated-list.model';
17 18 import { RemoteData } from '../../core/data/remote-data';
18 19 import { RequestService } from '../../core/data/request.service';
19 20 import { EPersonDataService } from '../../core/eperson/eperson-data.service';
20 21 import { GroupDataService } from '../../core/eperson/group-data.service';
21 22 import { EPerson } from '../../core/eperson/models/eperson.model';
22 23 import { GroupDtoModel } from '../../core/eperson/models/group-dto.model';
137 138 }, true, true, followLink('object'));
138 139 }),
139 140 getAllSucceededRemoteData(),
140 141 getRemoteDataPayload(),
141 142 switchMap((groups: PaginatedList<Group>) => {
142 143 if (groups.page.length === 0) {
143 144 return observableOf(buildPaginatedList(groups.pageInfo, []));
144 145 }
145 146 return this.authorizationService.isAuthorized(FeatureID.AdministratorOf).pipe(
146 147 switchMap((isSiteAdmin: boolean) => {
147 - return observableCombineLatest(groups.page.map((group: Group) => {
148 + return observableCombineLatest([...groups.page.map((group: Group) => {
148 149 if (hasValue(group) && !this.deletedGroupsIds.includes(group.id)) {
149 150 return observableCombineLatest([
150 151 this.authorizationService.isAuthorized(FeatureID.CanDelete, group.self),
151 152 this.canManageGroup$(isSiteAdmin, group),
152 153 this.hasLinkedDSO(group),
153 154 this.getSubgroups(group),
154 155 this.getMembers(group)
155 156 ]).pipe(
156 157 map(([canDelete, canManageGroup, hasLinkedDSO, subgroups, members]:
157 158 [boolean, boolean, boolean, RemoteData<PaginatedList<Group>>, RemoteData<PaginatedList<EPerson>>]) => {
158 159 const groupDtoModel: GroupDtoModel = new GroupDtoModel();
159 160 groupDtoModel.ableToDelete = canDelete && !hasLinkedDSO;
160 161 groupDtoModel.ableToEdit = canManageGroup;
161 162 groupDtoModel.group = group;
162 163 groupDtoModel.subgroups = subgroups.payload;
163 164 groupDtoModel.epersons = members.payload;
164 165 return groupDtoModel;
165 166 }
166 167 )
167 168 );
169 + } else {
170 + return EMPTY;
168 171 }
169 - })).pipe(map((dtos: GroupDtoModel[]) => {
172 + })]).pipe(defaultIfEmpty([]), map((dtos: GroupDtoModel[]) => {
170 173 return buildPaginatedList(groups.pageInfo, dtos);
171 174 }));
172 175 })
173 176 );
174 177 })
175 178 ).subscribe((value: PaginatedList<GroupDtoModel>) => {
176 179 this.groupsDto$.next(value);
177 180 this.pageInfoState$.next(value.pageInfo);
178 181 this.loading$.next(false);
179 182 });

Everything looks good. We'll let you know here if there's anything you should know about.

Add shortcut