]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/header/header.component.ts
Merge branch 'release/2.1.0' into develop
[github/Chocobozzz/PeerTube.git] / client / src / app / header / header.component.ts
index a903048f234188a15f04acabc846c5ce0e687a22..92a7eded651eea650993ca6243ec7930cf433f34 100644 (file)
@@ -1,6 +1,10 @@
+import { filter, first, map, tap } from 'rxjs/operators'
 import { Component, OnInit } from '@angular/core'
-import { Router } from '@angular/router'
+import { ActivatedRoute, NavigationEnd, Params, Router } from '@angular/router'
 import { getParameterByName } from '../shared/misc/utils'
+import { AuthService, Notifier, ServerService } from '@app/core'
+import { of } from 'rxjs'
+import { I18n } from '@ngx-translate/i18n-polyfill'
 
 @Component({
   selector: 'my-header',
@@ -10,19 +14,52 @@ import { getParameterByName } from '../shared/misc/utils'
 
 export class HeaderComponent implements OnInit {
   searchValue = ''
+  ariaLabelTextForSearch = ''
 
-  constructor (private router: Router) {}
+  constructor (
+    private router: Router,
+    private route: ActivatedRoute,
+    private auth: AuthService,
+    private serverService: ServerService,
+    private authService: AuthService,
+    private notifier: Notifier,
+    private i18n: I18n
+  ) {}
 
   ngOnInit () {
-    const searchQuery = getParameterByName('search', window.location.href)
-    if (searchQuery) this.searchValue = searchQuery
+    this.ariaLabelTextForSearch = this.i18n('Search videos, channels')
+
+    this.router.events
+        .pipe(
+          filter(e => e instanceof NavigationEnd),
+          map(() => getParameterByName('search', window.location.href))
+        )
+        .subscribe(searchQuery => this.searchValue = searchQuery || '')
   }
 
   doSearch () {
-    if (!this.searchValue) return
+    const queryParams: Params = {}
+
+    if (window.location.pathname === '/search' && this.route.snapshot.queryParams) {
+      Object.assign(queryParams, this.route.snapshot.queryParams)
+    }
+
+    Object.assign(queryParams, { search: this.searchValue })
+
+    const o = this.auth.isLoggedIn()
+      ? this.loadUserLanguagesIfNeeded(queryParams)
+      : of(true)
+
+    o.subscribe(() => this.router.navigate([ '/search' ], { queryParams }))
+  }
+
+  private loadUserLanguagesIfNeeded (queryParams: any) {
+    if (queryParams && queryParams.languageOneOf) return of(queryParams)
 
-    this.router.navigate([ '/videos', 'search' ], {
-      queryParams: { search: this.searchValue }
-    })
+    return this.auth.userInformationLoaded
+               .pipe(
+                 first(),
+                 tap(() => Object.assign(queryParams, { languageOneOf: this.auth.getUser().videoLanguages }))
+               )
   }
 }