added preloading guard for search results

This commit is contained in:
lotte
2018-08-09 08:54:43 +02:00
parent 777ae2bc19
commit d9e70bd4da
2 changed files with 39 additions and 2 deletions

View File

@@ -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<boolean> | Promise<boolean> | 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))
}
}

View File

@@ -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 {
}