import { HotkeysService } from 'angular2-hotkeys'
import * as debug from 'debug'
-import { switchMap } from 'rxjs/operators'
+import { forkJoin, Subscription } from 'rxjs'
+import { first, switchMap } from 'rxjs/operators'
import { ViewportScroller } from '@angular/common'
-import { Component, OnInit, ViewChild } from '@angular/core'
+import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core'
import { Router } from '@angular/router'
import {
AuthService,
templateUrl: './menu.component.html',
styleUrls: [ './menu.component.scss' ]
})
-export class MenuComponent implements OnInit {
+export class MenuComponent implements OnInit, OnDestroy {
@ViewChild('languageChooserModal', { static: true }) languageChooserModal: LanguageChooserComponent
@ViewChild('quickSettingsModal', { static: true }) quickSettingsModal: QuickSettingsModalComponent
@ViewChild('dropdown') dropdown: NgbDropdown
[UserRight.MANAGE_CONFIGURATION]: '/admin/config'
}
+ private languagesSub: Subscription
+ private modalSub: Subscription
+ private hotkeysSub: Subscription
+ private authSub: Subscription
+
constructor (
private viewportScroller: ViewportScroller,
private authService: AuthService,
this.updateUserState()
this.buildMenuSections()
- this.authService.loginChangedSource.subscribe(
- status => {
- if (status === AuthStatus.LoggedIn) {
- this.isLoggedIn = true
- } else if (status === AuthStatus.LoggedOut) {
- this.isLoggedIn = false
- }
-
- this.updateUserState()
- this.buildMenuSections()
+ this.authSub = this.authService.loginChangedSource.subscribe(status => {
+ if (status === AuthStatus.LoggedIn) {
+ this.isLoggedIn = true
+ } else if (status === AuthStatus.LoggedOut) {
+ this.isLoggedIn = false
}
- )
- this.hotkeysService.cheatSheetToggle
+ this.updateUserState()
+ this.buildMenuSections()
+ })
+
+ this.hotkeysSub = this.hotkeysService.cheatSheetToggle
.subscribe(isOpen => this.helpVisible = isOpen)
- this.serverService.getVideoLanguages()
- .subscribe(languages => {
- this.languages = languages
+ this.languagesSub = forkJoin([
+ this.serverService.getVideoLanguages(),
+ this.authService.userInformationLoaded.pipe(first())
+ ]).subscribe(([ languages ]) => {
+ this.languages = languages
- this.authService.userInformationLoaded
- .subscribe(() => this.buildUserLanguages())
- })
+ this.buildUserLanguages()
+ })
this.serverService.getConfig()
.subscribe(config => this.serverConfig = config)
- this.modalService.openQuickSettingsSubject
+ this.modalSub = this.modalService.openQuickSettingsSubject
.subscribe(() => this.openQuickSettings())
}
+ ngOnDestroy () {
+ if (this.modalSub) this.modalSub.unsubscribe()
+ if (this.languagesSub) this.languagesSub.unsubscribe()
+ if (this.hotkeysSub) this.hotkeysSub.unsubscribe()
+ if (this.authSub) this.authSub.unsubscribe()
+ }
+
isRegistrationAllowed () {
if (!this.serverConfig) return false