]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/app/+search/shared/abstract-lazy-load.resolver.ts
Non latin keyboard layout support player shortcut (#5684)
[github/Chocobozzz/PeerTube.git] / client / src / app / +search / shared / abstract-lazy-load.resolver.ts
CommitLineData
37a44fc9 1import { Observable } from 'rxjs'
5fb2e288 2import { map } from 'rxjs/operators'
5fb2e288 3import { ActivatedRouteSnapshot, Resolve, Router } from '@angular/router'
42b40636 4import { logger } from '@root-helpers/logger'
d4a8e7a6 5import { ResultList } from '@shared/models'
5fb2e288 6
37a44fc9
C
7export abstract class AbstractLazyLoadResolver <T> implements Resolve<any> {
8 protected router: Router
5fb2e288
C
9
10 resolve (route: ActivatedRouteSnapshot) {
11 const url = route.params.url
5fb2e288
C
12
13 if (!url) {
42b40636 14 logger.error('Could not find url param.', { params: route.params })
5fb2e288
C
15 return this.router.navigateByUrl('/404')
16 }
17
37a44fc9 18 return this.finder(url)
5fb2e288
C
19 .pipe(
20 map(result => {
21 if (result.data.length !== 1) {
42b40636 22 logger.error('Cannot find result for this URL')
5fb2e288
C
23 return this.router.navigateByUrl('/404')
24 }
25
37a44fc9 26 const redirectUrl = this.buildUrl(result.data[0])
5fb2e288 27
37a44fc9 28 return this.router.navigateByUrl(redirectUrl)
5fb2e288
C
29 })
30 )
31 }
37a44fc9
C
32
33 protected abstract finder (url: string): Observable<ResultList<T>>
34 protected abstract buildUrl (e: T): string
5fb2e288 35}