diff --git a/src/frontend/packages/core/src/features/dashboard/dashboard-base/dashboard-base.component.ts b/src/frontend/packages/core/src/features/dashboard/dashboard-base/dashboard-base.component.ts index 5f0dd43422..327b3bfd4d 100644 --- a/src/frontend/packages/core/src/features/dashboard/dashboard-base/dashboard-base.component.ts +++ b/src/frontend/packages/core/src/features/dashboard/dashboard-base/dashboard-base.component.ts @@ -150,6 +150,7 @@ export class DashboardBaseComponent implements OnInit, OnDestroy, AfterViewInit ngOnDestroy() { this.mobileSub.unsubscribe(); this.closeSub.unsubscribe(); + this.sidePanelService.unsetContainer(); } isNoMarginView(route: ActivatedRouteSnapshot): boolean { diff --git a/src/frontend/packages/core/src/shared/services/side-panel.service.ts b/src/frontend/packages/core/src/shared/services/side-panel.service.ts index e2a13675cd..2b86182a17 100644 --- a/src/frontend/packages/core/src/shared/services/side-panel.service.ts +++ b/src/frontend/packages/core/src/shared/services/side-panel.service.ts @@ -1,8 +1,15 @@ -import { ComponentFactory, ComponentFactoryResolver, ComponentRef, Injectable, ViewContainerRef, Inject } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { + ComponentFactory, + ComponentFactoryResolver, + ComponentRef, + Inject, + Injectable, + ViewContainerRef, +} from '@angular/core'; import { Router } from '@angular/router'; import { asapScheduler, BehaviorSubject, Observable, Subject } from 'rxjs'; import { filter, observeOn, publishReplay, refCount, tap } from 'rxjs/operators'; -import { DOCUMENT } from '@angular/common'; /** * Service to allow the overlay side panel to be shown or hidden. @@ -35,6 +42,10 @@ export class SidePanelService { this.setupRouterListener(); } + public unsetContainer() { + this.container = undefined; + } + public setContainer(container: ViewContainerRef) { if (this.container) { throw new Error('SidePanelService: container already set'); diff --git a/src/frontend/packages/store/src/entity-request-pipeline/entity-pagination-request-pipeline.ts b/src/frontend/packages/store/src/entity-request-pipeline/entity-pagination-request-pipeline.ts index 163ec04dc5..fa82840e99 100644 --- a/src/frontend/packages/store/src/entity-request-pipeline/entity-pagination-request-pipeline.ts +++ b/src/frontend/packages/store/src/entity-request-pipeline/entity-pagination-request-pipeline.ts @@ -52,17 +52,17 @@ function getRequestObservable( request: HttpRequest, paginationPageIterator?: PaginationPageIterator ): Observable { - const initialRequest = makeRequestEntityPipe( - httpClient, - request, - entityCatalog.getEndpoint(action.endpointType, action.subType), - action.endpointGuid, - action.externalRequest - ); if (action.flattenPagination && !paginationPageIterator) { console.warn('Action requires all request pages but no page flattener was given.'); } if (!action.flattenPagination || !paginationPageIterator) { + const initialRequest = makeRequestEntityPipe( + httpClient, + request, + entityCatalog.getEndpoint(action.endpointType, action.subType), + action.endpointGuid, + action.externalRequest + ); return initialRequest.pipe(map(response => singleRequestToPaged(response))); } return paginationPageIterator.mergeAllPagesEntities(); diff --git a/src/frontend/packages/store/src/entity-request-pipeline/pagination-request-base-handlers/pagination-iterator.pipe.ts b/src/frontend/packages/store/src/entity-request-pipeline/pagination-request-base-handlers/pagination-iterator.pipe.ts index cbc69245b2..aeb8a466f6 100644 --- a/src/frontend/packages/store/src/entity-request-pipeline/pagination-request-base-handlers/pagination-iterator.pipe.ts +++ b/src/frontend/packages/store/src/entity-request-pipeline/pagination-request-base-handlers/pagination-iterator.pipe.ts @@ -1,7 +1,7 @@ import { HttpRequest } from '@angular/common/http'; import { Store } from '@ngrx/store'; import { combineLatest, Observable, of, range } from 'rxjs'; -import { map, mergeMap, reduce, switchMap } from 'rxjs/operators'; +import { first, map, mergeMap, reduce, switchMap } from 'rxjs/operators'; import { UpdatePaginationMaxedState } from '../../actions/pagination.actions'; import { AppState } from '../../app-state'; @@ -95,10 +95,9 @@ export class PaginationPageIterator { private handleRequests(initialResponse: JetstreamResponse, action: PaginatedAction, totalPages: number, totalResults: number): Observable<[JetstreamResponse, JetstreamResponse[]]> { - const allResults = combineLatest(of(initialResponse), this.getAllOtherPageRequests(totalPages)); - + const createAllResults = () => combineLatest(of(initialResponse), this.getAllOtherPageRequests(totalPages)); if (totalResults === 0 || (this.paginationMaxedState && this.paginationMaxedState.ignoreMaxed)) { - return allResults; + return createAllResults(); } return this.config.maxedStateStartAt(this.store, action).pipe( @@ -114,7 +113,7 @@ export class PaginationPageIterator { ); return combineLatest([of(initialResponse), of([])]); } - return allResults; + return createAllResults(); }) ); } @@ -126,7 +125,7 @@ export class PaginationPageIterator { public mergeAllPagesEntities(): Observable { const initialRequest = this.addPageToRequest(1); return this.makeRequest(initialRequest).pipe( - mergeMap(initialResponse => { + switchMap(initialResponse => { const totalPages = this.config.getTotalPages(initialResponse); const totalResults = this.config.getTotalEntities(initialResponse); return this.handleRequests( @@ -135,6 +134,7 @@ export class PaginationPageIterator { this.getValidNumber(totalPages), this.getValidNumber(totalResults) ).pipe( + first(), map(([initialRequestResponse, othersResponse]) => [initialRequestResponse, ...othersResponse]), map(responsePages => this.reducePages(responsePages)), );