1- import { combineLatest as observableCombineLatest , Observable , zip as observableZip } from 'rxjs' ;
1+ import { combineLatest as observableCombineLatest , Observable , of as observableOf , zip as observableZip } from 'rxjs' ;
22import { distinctUntilChanged , map , mergeMap , switchMap } from 'rxjs/operators' ;
33import { PaginatedList } from '../../../../core/data/paginated-list.model' ;
44import { RemoteData } from '../../../../core/data/remote-data' ;
@@ -46,17 +46,19 @@ export const compareArraysUsingIds = <T extends { id: string }>() =>
4646/**
4747 * Operator for turning a list of relationships into a list of the relevant items
4848 * @param {string } thisId The item's id of which the relations belong to
49- * @returns {(source: Observable<Relationship[]>) => Observable<Item[]> }
5049 */
51- export const relationsToItems = ( thisId : string ) =>
50+ export const relationsToItems = ( thisId : string ) : ( source : Observable < Relationship [ ] > ) => Observable < Item [ ] > =>
5251 ( source : Observable < Relationship [ ] > ) : Observable < Item [ ] > =>
5352 source . pipe (
54- mergeMap ( ( rels : Relationship [ ] ) =>
55- observableZip (
56- ...rels . map ( ( rel : Relationship ) => observableCombineLatest ( rel . leftItem , rel . rightItem ) )
57- )
58- ) ,
59- map ( ( arr ) =>
53+ mergeMap ( ( relationships : Relationship [ ] ) => {
54+ if ( relationships . length === 0 ) {
55+ return observableOf ( [ ] ) ;
56+ }
57+ return observableZip (
58+ ...relationships . map ( ( rel : Relationship ) => observableCombineLatest ( [ rel . leftItem , rel . rightItem ] ) ) ,
59+ ) ;
60+ } ) ,
61+ map ( ( arr : [ RemoteData < Item > , RemoteData < Item > ] [ ] ) =>
6062 arr
6163 . filter ( ( [ leftItem , rightItem ] ) => leftItem . hasSucceeded && rightItem . hasSucceeded )
6264 . map ( ( [ leftItem , rightItem ] ) => {
@@ -75,9 +77,8 @@ export const relationsToItems = (thisId: string) =>
7577 * Operator for turning a paginated list of relationships into a paginated list of the relevant items
7678 * The result is wrapped in the original RemoteData and PaginatedList
7779 * @param {string } thisId The item's id of which the relations belong to
78- * @returns {(source: Observable<Relationship[]>) => Observable<Item[]> }
7980 */
80- export const paginatedRelationsToItems = ( thisId : string ) =>
81+ export const paginatedRelationsToItems = ( thisId : string ) : ( source : Observable < RemoteData < PaginatedList < Relationship > > > ) => Observable < RemoteData < PaginatedList < Item > > > =>
8182 ( source : Observable < RemoteData < PaginatedList < Relationship > > > ) : Observable < RemoteData < PaginatedList < Item > > > =>
8283 source . pipe (
8384 getFirstSucceededRemoteData ( ) ,
0 commit comments