diff --git a/src/app/+search-page/search-page-preloader.guard.ts b/src/app/+search-page/search-page-preloader.guard.ts new file mode 100644 index 0000000000..5e0f3ab194 --- /dev/null +++ b/src/app/+search-page/search-page-preloader.guard.ts @@ -0,0 +1,27 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, CanActivate, Resolve, RouterStateSnapshot } from '@angular/router'; +import { Observable } from 'rxjs/Observable'; +import { RemoteData } from '../core/data/remote-data'; +import { getSucceededRemoteData } from '../core/shared/operators'; +import { ItemDataService } from '../core/data/item-data.service'; +import { Item } from '../core/shared/item.model'; +import { SearchService } from './search-service/search.service'; +import { SearchConfigurationService } from './search-service/search-configuration.service'; +import { map } from 'rxjs/operators'; + +@Injectable() +export class SearchPagePreloader implements CanActivate { + constructor(private searchService: SearchService, private configService: SearchConfigurationService) { + } + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | Promise | boolean { + const searchResults$ = this.configService.paginatedSearchOptions.flatMap((options) => + this.searchService.search(options) + ); + route.data.results = searchResults$; + return searchResults$.pipe( + getSucceededRemoteData(), + map(() => true), + ).catch(() => Observable.of(false)) + } +} diff --git a/src/app/+search-page/search-page-routing.module.ts b/src/app/+search-page/search-page-routing.module.ts index 65cca99a34..6c63439843 100644 --- a/src/app/+search-page/search-page-routing.module.ts +++ b/src/app/+search-page/search-page-routing.module.ts @@ -2,12 +2,22 @@ import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; import { SearchPageComponent } from './search-page.component'; +import { SearchPagePreloader } from './search-page-preloader.guard'; @NgModule({ imports: [ RouterModule.forChild([ - { path: '', component: SearchPageComponent, data: { title: 'search.title' } } + { + path: '', + component: SearchPageComponent, + data: { title: 'search.title' }, + canActivate: [SearchPagePreloader] + } ]) + ], + providers: [ + SearchPagePreloader ] }) -export class SearchPageRoutingModule { } +export class SearchPageRoutingModule { +}