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 {PlayerComponent} from "./pages/player/player.component";
import {SearchComponent} from "./pages/search/search.component"; import {SearchComponent} from "./pages/search/search.component";
import {CollectionResolverService} from "./services/resolvers/collection-resolver.service"; 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 {PeopleResolverService} from "./services/resolvers/people-resolver.service";
import {SearchResolverService} from "./services/resolvers/search-resolver.service"; import {SearchResolverService} from "./services/resolvers/search-resolver.service";
import {ShowResolverService} from './services/resolvers/show-resolver.service'; import {ShowResolverService} from './services/resolvers/show-resolver.service';
@ -22,7 +22,12 @@ const routes: Routes = [
canLoad: [AuthGuard.forPermissions("read")], canLoad: [AuthGuard.forPermissions("read")],
canActivate: [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: "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: "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")]}, {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 {Injectable} from '@angular/core';
import {MatSnackBar} from '@angular/material/snack-bar'; import {MatSnackBar} from '@angular/material/snack-bar';
import {ActivatedRouteSnapshot, Resolve} from '@angular/router'; import {ActivatedRouteSnapshot, Resolve} from '@angular/router';
import { EMPTY, Observable } from 'rxjs'; import {Observable, EMPTY} from 'rxjs';
import {catchError, map} from 'rxjs/operators'; import {catchError, map} from 'rxjs/operators';
import {Page} from "../../../models/page"; import {Page} from "../../../models/page";
import {IResource} from "../../../models/resources/resource"; import {IResource} from "../../../models/resources/resource";
@ -17,11 +17,15 @@ export class PageResolver
@Injectable() @Injectable()
class Resolver implements Resolve<Page<T>> 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>> 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( .pipe(
map(x => Object.assign(new Page<T>(), x)), map(x => Object.assign(new Page<T>(), x)),
catchError((error: HttpErrorResponse) => catchError((error: HttpErrorResponse) =>