From 37a44fc915eef2140e22ceb96aba6b6eb2509007 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 17 Jun 2021 16:02:38 +0200 Subject: Add ability to search playlists --- .../+search/shared/abstract-lazy-load.resolver.ts | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 client/src/app/+search/shared/abstract-lazy-load.resolver.ts (limited to 'client/src/app/+search/shared/abstract-lazy-load.resolver.ts') diff --git a/client/src/app/+search/shared/abstract-lazy-load.resolver.ts b/client/src/app/+search/shared/abstract-lazy-load.resolver.ts new file mode 100644 index 000000000..31240f451 --- /dev/null +++ b/client/src/app/+search/shared/abstract-lazy-load.resolver.ts @@ -0,0 +1,34 @@ +import { Observable } from 'rxjs' +import { map } from 'rxjs/operators' +import { ActivatedRouteSnapshot, Resolve, Router } from '@angular/router' +import { ResultList } from '@shared/models/result-list.model' + +export abstract class AbstractLazyLoadResolver implements Resolve { + protected router: Router + + resolve (route: ActivatedRouteSnapshot) { + const url = route.params.url + + if (!url) { + console.error('Could not find url param.', { params: route.params }) + return this.router.navigateByUrl('/404') + } + + return this.finder(url) + .pipe( + map(result => { + if (result.data.length !== 1) { + console.error('Cannot find result for this URL') + return this.router.navigateByUrl('/404') + } + + const redirectUrl = this.buildUrl(result.data[0]) + + return this.router.navigateByUrl(redirectUrl) + }) + ) + } + + protected abstract finder (url: string): Observable> + protected abstract buildUrl (e: T): string +} -- cgit v1.2.3