Implementing route params inside the page resolver

This commit is contained in:
Zoe Roux 2020-08-01 19:30:25 +02:00
parent e8c505cb56
commit b8d5265316
2 changed files with 18 additions and 9 deletions

View File

@ -6,7 +6,7 @@ import {NotFoundComponent} from './not-found/not-found.component';
import {PlayerComponent} from "./pages/player/player.component";
import {SearchComponent} from "./pages/search/search.component";
import {CollectionResolverService} from "./services/resolvers/collection-resolver.service";
import {PageResolver} from './services/resolvers/library-resolver.service';
import {PageResolver} from './services/resolvers/page-resolver.service';
import {PeopleResolverService} from "./services/resolvers/people-resolver.service";
import {SearchResolverService} from "./services/resolvers/search-resolver.service";
import {ShowResolverService} from './services/resolvers/show-resolver.service';
@ -22,7 +22,12 @@ const routes: Routes = [
canLoad: [AuthGuard.forPermissions("read")],
canActivate: [AuthGuard.forPermissions("read")]
},
{path: "browse/:library-slug", component: LibraryItemGridComponent, canLoad: [AuthGuard.forPermissions("read")], canActivate: [AuthGuard.forPermissions("read")]},
{path: "browse/:slug", component: LibraryItemGridComponent,
resolve: { items: PageResolver.forResource<LibraryItem>("library/:slug/items") },
canLoad: [AuthGuard.forPermissions("read")],
canActivate: [AuthGuard.forPermissions("read")]
},
{path: "show/:show-slug", component: ShowDetailsComponent, resolve: { show: ShowResolverService }, canLoad: [AuthGuard.forPermissions("read")], canActivate: [AuthGuard.forPermissions("read")]},
{path: "collection/:collection-slug", component: CollectionComponent, resolve: { collection: CollectionResolverService }, canLoad: [AuthGuard.forPermissions("read")], canActivate: [AuthGuard.forPermissions("read")]},
{path: "people/:people-slug", component: CollectionComponent, resolve: { collection: PeopleResolverService }, canLoad: [AuthGuard.forPermissions("read")], canActivate: [AuthGuard.forPermissions("read")]},

View File

@ -2,7 +2,7 @@ import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import {Injectable} from '@angular/core';
import {MatSnackBar} from '@angular/material/snack-bar';
import {ActivatedRouteSnapshot, Resolve} from '@angular/router';
import { EMPTY, Observable } from 'rxjs';
import {Observable, EMPTY} from 'rxjs';
import {catchError, map} from 'rxjs/operators';
import {Page} from "../../../models/page";
import {IResource} from "../../../models/resources/resource";
@ -17,11 +17,15 @@ export class PageResolver
@Injectable()
class Resolver implements Resolve<Page<T>>
{
constructor(private http: HttpClient, private snackBar: MatSnackBar) { }
constructor(private http: HttpClient,
private snackBar: MatSnackBar)
{ }
resolve(route: ActivatedRouteSnapshot): Page<T> | Observable<Page<T>> | Promise<Page<T>>
{
return this.http.get<Page<T>>(`api/${resource}`)
let res: string = resource.replace(/:(.*?)\//, (x, y) => `${route.paramMap.get(y)}/`);
return this.http.get<Page<T>>(`api/${res}`)
.pipe(
map(x => Object.assign(new Page<T>(), x)),
catchError((error: HttpErrorResponse) =>