From b8d5265316413e9b113e30bb85d98cfa30dbeb7d Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Sat, 1 Aug 2020 19:30:25 +0200 Subject: [PATCH] Implementing route params inside the page resolver --- src/app/app-routing.module.ts | 9 +++++++-- ...ver.service.ts => page-resolver.service.ts} | 18 +++++++++++------- 2 files changed, 18 insertions(+), 9 deletions(-) rename src/app/services/resolvers/{library-resolver.service.ts => page-resolver.service.ts} (64%) diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 7b633753..f9488e6a 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -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("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")]}, diff --git a/src/app/services/resolvers/library-resolver.service.ts b/src/app/services/resolvers/page-resolver.service.ts similarity index 64% rename from src/app/services/resolvers/library-resolver.service.ts rename to src/app/services/resolvers/page-resolver.service.ts index 7a19b587..bfbacef0 100644 --- a/src/app/services/resolvers/library-resolver.service.ts +++ b/src/app/services/resolvers/page-resolver.service.ts @@ -1,8 +1,8 @@ -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 {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 {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> { - constructor(private http: HttpClient, private snackBar: MatSnackBar) { } + constructor(private http: HttpClient, + private snackBar: MatSnackBar) + { } resolve(route: ActivatedRouteSnapshot): Page | Observable> | Promise> { - return this.http.get>(`api/${resource}`) + let res: string = resource.replace(/:(.*?)\//, (x, y) => `${route.paramMap.get(y)}/`); + + return this.http.get>(`api/${res}`) .pipe( map(x => Object.assign(new Page(), x)), catchError((error: HttpErrorResponse) =>