]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/+videos/video-list/trending/video-trending.component.ts
Fix live/upload redirection
[github/Chocobozzz/PeerTube.git] / client / src / app / +videos / video-list / trending / video-trending.component.ts
index 6128c4acd5e1b945ad54790f5a252cda6ca01807..085f29a8bd36aad37165f8837ba1ff10a2eb01b1 100644 (file)
@@ -1,12 +1,13 @@
+import { Subscription } from 'rxjs'
+import { first, switchMap } from 'rxjs/operators'
 import { Component, ComponentFactoryResolver, Injector, OnDestroy, OnInit } from '@angular/core'
-import { ActivatedRoute, Router } from '@angular/router'
+import { ActivatedRoute, Params, Router } from '@angular/router'
 import { AuthService, LocalStorageService, Notifier, RedirectService, ScreenService, ServerService, UserService } from '@app/core'
 import { HooksService } from '@app/core/plugins/hooks.service'
 import { immutableAssign } from '@app/helpers'
 import { VideoService } from '@app/shared/shared-main'
 import { AbstractVideoList } from '@app/shared/shared-video-miniature'
 import { VideoSortField } from '@shared/models'
-import { Subscription } from 'rxjs'
 import { VideoTrendingHeaderComponent } from './video-trending-header.component'
 
 @Component({
@@ -19,7 +20,7 @@ export class VideoTrendingComponent extends AbstractVideoList implements OnInit,
   titlePage: string
   defaultSort: VideoSortField = '-trending'
 
-  useUserVideoPreferences = true
+  loadUserVideoPreferences = true
 
   private algorithmChangeSub: Subscription
 
@@ -34,11 +35,12 @@ export class VideoTrendingComponent extends AbstractVideoList implements OnInit,
     protected storageService: LocalStorageService,
     protected cfr: ComponentFactoryResolver,
     private videoService: VideoService,
+    private redirectService: RedirectService,
     private hooks: HooksService
   ) {
     super()
 
-    this.defaultSort = this.parseAlgorithm(RedirectService.DEFAULT_TRENDING_ALGORITHM)
+    this.defaultSort = this.parseAlgorithm(this.redirectService.getDefaultTrendingAlgorithm())
 
     this.headerComponentInjector = this.getInjector()
   }
@@ -48,14 +50,20 @@ export class VideoTrendingComponent extends AbstractVideoList implements OnInit,
 
     this.generateSyndicationList()
 
-    this.algorithmChangeSub = this.route.queryParams.subscribe(
-      queryParams => {
-        const algorithm = queryParams['alg'] || RedirectService.DEFAULT_TRENDING_ALGORITHM
+    // Subscribe to alg change after we loaded the data
+    // The initial alg load is handled by the parent class
+    this.algorithmChangeSub = this.onDataSubject
+      .pipe(
+        first(),
+        switchMap(() => this.route.queryParams)
+      ).subscribe(queryParams => {
+        const oldSort = this.sort
+
+        this.loadPageRouteParams(queryParams)
 
-        this.sort = this.parseAlgorithm(algorithm)
-        this.reloadVideos()
+        if (oldSort !== this.sort) this.reloadVideos()
       }
-    )
+      )
   }
 
   ngOnDestroy () {
@@ -89,21 +97,29 @@ export class VideoTrendingComponent extends AbstractVideoList implements OnInit,
 
   getInjector () {
     return Injector.create({
-      providers: [{
+      providers: [ {
         provide: 'data',
         useValue: {
           model: this.defaultSort
         }
-      }]
+      } ]
     })
   }
 
+  protected loadPageRouteParams (queryParams: Params) {
+    const algorithm = queryParams['alg'] || this.redirectService.getDefaultTrendingAlgorithm()
+
+    this.sort = this.parseAlgorithm(algorithm)
+  }
+
   private parseAlgorithm (algorithm: string): VideoSortField {
     switch (algorithm) {
       case 'most-viewed':
         return '-trending'
+
       case 'most-liked':
         return '-likes'
+
       default:
         return '-' + algorithm as VideoSortField
     }