Commits
Art Lowel authored 50cb219045d
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 | }); |