]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - client/src/app/shared/shared-main/router/actor-redirect-guard.service.ts
Update angular
[github/Chocobozzz/PeerTube.git] / client / src / app / shared / shared-main / router / actor-redirect-guard.service.ts
1 import { forkJoin, of } from 'rxjs'
2 import { catchError, map } from 'rxjs/operators'
3 import { Injectable } from '@angular/core'
4 import { ActivatedRouteSnapshot, Router } from '@angular/router'
5 import { AccountService } from '../account'
6 import { VideoChannelService } from '../video-channel'
7
8 @Injectable()
9 export class ActorRedirectGuard {
10
11 constructor (
12 private router: Router,
13 private accountService: AccountService,
14 private channelService: VideoChannelService
15 ) {}
16
17 canActivate (route: ActivatedRouteSnapshot) {
18 const actorName = route.params.actorName
19
20 return forkJoin([
21 this.accountService.getAccount(actorName).pipe(this.orUndefined()),
22 this.channelService.getVideoChannel(actorName).pipe(this.orUndefined())
23 ]).pipe(
24 map(([ account, channel ]) => {
25 if (account) {
26 return this.router.parseUrl(`/a/${actorName}`)
27 }
28
29 if (channel) {
30 return this.router.parseUrl(`/c/${actorName}`)
31 }
32
33 return this.router.parseUrl('/404')
34 })
35 )
36 }
37
38 private orUndefined () {
39 return catchError(() => of(undefined))
40 }
41 }