]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/modal/quick-settings-modal.component.ts
Open and close settings modal using query params
[github/Chocobozzz/PeerTube.git] / client / src / app / modal / quick-settings-modal.component.ts
index 99859a1a50572e28f0ddbc2951e8ea2bf8386be1..19f75ad5c2338b001d7cc8151b038e372b7ceb01 100644 (file)
@@ -1,8 +1,8 @@
 import { ReplaySubject } from 'rxjs'
 import { filter } from 'rxjs/operators'
 import { Component, OnInit, ViewChild } from '@angular/core'
+import { ActivatedRoute, Router } from '@angular/router'
 import { AuthService, AuthStatus, LocalStorageService, User, UserService } from '@app/core'
-import { FormReactive, FormValidatorService } from '@app/shared/shared-forms'
 import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
 import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap/modal/modal-ref'
 
@@ -10,7 +10,9 @@ import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap/modal/modal-ref'
   selector: 'my-quick-settings',
   templateUrl: './quick-settings-modal.component.html'
 })
-export class QuickSettingsModalComponent extends FormReactive implements OnInit {
+export class QuickSettingsModalComponent implements OnInit {
+  private static readonly QUERY_MODAL_NAME = 'quick-settings'
+
   @ViewChild('modal', { static: true }) modal: NgbModal
 
   user: User
@@ -19,32 +21,40 @@ export class QuickSettingsModalComponent extends FormReactive implements OnInit
   private openedModal: NgbModalRef
 
   constructor (
-    protected formValidatorService: FormValidatorService,
     private modalService: NgbModal,
     private userService: UserService,
     private authService: AuthService,
-    private localStorageService: LocalStorageService
+    private localStorageService: LocalStorageService,
+    private route: ActivatedRoute,
+    private router: Router
   ) {
-    super()
   }
 
   ngOnInit () {
     this.user = this.userService.getAnonymousUser()
     this.localStorageService.watch()
-      .subscribe(
-        () => this.user = this.userService.getAnonymousUser()
-      )
+      .subscribe({
+        next: () => this.user = this.userService.getAnonymousUser()
+      })
 
     this.userInformationLoaded.next(true)
 
     this.authService.loginChangedSource
       .pipe(filter(status => status !== AuthStatus.LoggedIn))
-      .subscribe(
-        () => {
+      .subscribe({
+        next: () => {
           this.user = this.userService.getAnonymousUser()
           this.userInformationLoaded.next(true)
         }
-      )
+      })
+
+    this.route.queryParams.subscribe(params => {
+      if (params['modal'] === QuickSettingsModalComponent.QUERY_MODAL_NAME) {
+        this.openedModal = this.modalService.open(this.modal, { centered: true })
+
+        this.openedModal.hidden.subscribe(() => this.setModalQuery('remove'))
+      }
+    })
   }
 
   isUserLoggedIn () {
@@ -52,11 +62,14 @@ export class QuickSettingsModalComponent extends FormReactive implements OnInit
   }
 
   show () {
-    this.openedModal = this.modalService.open(this.modal, { centered: true })
+    this.setModalQuery('add')
   }
 
-  hide () {
-    this.openedModal.close()
-    this.form.reset()
+  private setModalQuery (type: 'add' | 'remove') {
+    const modal = type === 'add'
+      ? QuickSettingsModalComponent.QUERY_MODAL_NAME
+      : null
+
+    this.router.navigate([], { queryParams: { modal }, queryParamsHandling: 'merge' })
   }
 }