1 import { Observable } from 'rxjs'
2 import { map } from 'rxjs/operators'
3 import { ActivatedRouteSnapshot, Resolve, Router } from '@angular/router'
4 import { logger } from '@root-helpers/logger'
5 import { ResultList } from '@shared/models'
7 export abstract class AbstractLazyLoadResolver <T> implements Resolve<any> {
8 protected router: Router
10 resolve (route: ActivatedRouteSnapshot) {
11 const url = route.params.url
14 logger.error('Could not find url param.', { params: route.params })
15 return this.router.navigateByUrl('/404')
18 return this.finder(url)
21 if (result.data.length !== 1) {
22 logger.error('Cannot find result for this URL')
23 return this.router.navigateByUrl('/404')
26 const redirectUrl = this.buildUrl(result.data[0])
28 return this.router.navigateByUrl(redirectUrl)
33 protected abstract finder (url: string): Observable<ResultList<T>>
34 protected abstract buildUrl (e: T): string