X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2F%2Bvideos%2Fvideo-list%2Ftrending%2Fvideo-trending.component.ts;h=085f29a8bd36aad37165f8837ba1ff10a2eb01b1;hb=2e80d256cc75b4b02c8efc3d3e4cdf57ddf401a8;hp=6128c4acd5e1b945ad54790f5a252cda6ca01807;hpb=ba5d4a849c7d7ba05f093480ae12286c4af61556;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/+videos/video-list/trending/video-trending.component.ts b/client/src/app/+videos/video-list/trending/video-trending.component.ts index 6128c4acd..085f29a8b 100644 --- a/client/src/app/+videos/video-list/trending/video-trending.component.ts +++ b/client/src/app/+videos/video-list/trending/video-trending.component.ts @@ -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 }