1 import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core'
2 import { ActivatedRoute } from '@angular/router'
3 import { VideoChannel } from '@app/shared/video-channel/video-channel.model'
4 import { VideoChannelService } from '@app/shared/video-channel/video-channel.service'
5 import { RestExtractor } from '@app/shared'
6 import { catchError, distinctUntilChanged, map, switchMap } from 'rxjs/operators'
7 import { Subscription } from 'rxjs'
8 import { AuthService } from '@app/core'
9 import { Hotkey, HotkeysService } from 'angular2-hotkeys'
10 import { SubscribeButtonComponent } from '@app/shared/user-subscription/subscribe-button.component'
11 import { I18n } from '@ngx-translate/i18n-polyfill'
14 templateUrl: './video-channels.component.html',
15 styleUrls: [ './video-channels.component.scss' ]
17 export class VideoChannelsComponent implements OnInit, OnDestroy {
18 @ViewChild('subscribeButton') subscribeButton: SubscribeButtonComponent
20 videoChannel: VideoChannel
23 private routeSub: Subscription
27 private route: ActivatedRoute,
28 private authService: AuthService,
29 private videoChannelService: VideoChannelService,
30 private restExtractor: RestExtractor,
31 private hotkeysService: HotkeysService
35 this.routeSub = this.route.params
37 map(params => params[ 'videoChannelName' ]),
38 distinctUntilChanged(),
39 switchMap(videoChannelName => this.videoChannelService.getVideoChannel(videoChannelName)),
40 catchError(err => this.restExtractor.redirectTo404IfNotFound(err, [ 400, 404 ]))
42 .subscribe(videoChannel => this.videoChannel = videoChannel)
45 new Hotkey('S', (event: KeyboardEvent): boolean => {
46 this.subscribeButton.subscribed ?
47 this.subscribeButton.unsubscribe() :
48 this.subscribeButton.subscribe()
50 }, undefined, this.i18n('Subscribe to the account'))
52 if (this.isUserLoggedIn()) this.hotkeysService.add(this.hotkeys)
56 if (this.routeSub) this.routeSub.unsubscribe()
59 if (this.isUserLoggedIn()) this.hotkeysService.remove(this.hotkeys)
63 return this.authService.isLoggedIn()