mirror of https://github.com/Chocobozzz/PeerTube
Fix loading things twice on trending page
parent
94d721efdc
commit
15bedeebd7
|
@ -1,12 +1,13 @@
|
||||||
|
import { Subscription } from 'rxjs'
|
||||||
|
import { first, switchMap } from 'rxjs/operators'
|
||||||
import { Component, ComponentFactoryResolver, Injector, OnDestroy, OnInit } from '@angular/core'
|
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 { AuthService, LocalStorageService, Notifier, RedirectService, ScreenService, ServerService, UserService } from '@app/core'
|
||||||
import { HooksService } from '@app/core/plugins/hooks.service'
|
import { HooksService } from '@app/core/plugins/hooks.service'
|
||||||
import { immutableAssign } from '@app/helpers'
|
import { immutableAssign } from '@app/helpers'
|
||||||
import { VideoService } from '@app/shared/shared-main'
|
import { VideoService } from '@app/shared/shared-main'
|
||||||
import { AbstractVideoList } from '@app/shared/shared-video-miniature'
|
import { AbstractVideoList } from '@app/shared/shared-video-miniature'
|
||||||
import { VideoSortField } from '@shared/models'
|
import { VideoSortField } from '@shared/models'
|
||||||
import { Subscription } from 'rxjs'
|
|
||||||
import { VideoTrendingHeaderComponent } from './video-trending-header.component'
|
import { VideoTrendingHeaderComponent } from './video-trending-header.component'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
@ -48,12 +49,18 @@ export class VideoTrendingComponent extends AbstractVideoList implements OnInit,
|
||||||
|
|
||||||
this.generateSyndicationList()
|
this.generateSyndicationList()
|
||||||
|
|
||||||
this.algorithmChangeSub = this.route.queryParams.subscribe(
|
// Subscribe to alg change after we loaded the data
|
||||||
queryParams => {
|
// The initial alg load is handled by the parent class
|
||||||
const algorithm = queryParams['alg'] || RedirectService.DEFAULT_TRENDING_ALGORITHM
|
this.algorithmChangeSub = this.onDataSubject
|
||||||
|
.pipe(
|
||||||
|
first(),
|
||||||
|
switchMap(() => this.route.queryParams)
|
||||||
|
).subscribe(queryParams => {
|
||||||
|
const oldSort = this.sort
|
||||||
|
|
||||||
this.sort = this.parseAlgorithm(algorithm)
|
this.loadPageRouteParams(queryParams)
|
||||||
this.reloadVideos()
|
|
||||||
|
if (oldSort !== this.sort) this.reloadVideos()
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -98,6 +105,12 @@ export class VideoTrendingComponent extends AbstractVideoList implements OnInit,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected loadPageRouteParams (queryParams: Params) {
|
||||||
|
const algorithm = queryParams['alg'] || RedirectService.DEFAULT_TRENDING_ALGORITHM
|
||||||
|
|
||||||
|
this.sort = this.parseAlgorithm(algorithm)
|
||||||
|
}
|
||||||
|
|
||||||
private parseAlgorithm (algorithm: string): VideoSortField {
|
private parseAlgorithm (algorithm: string): VideoSortField {
|
||||||
switch (algorithm) {
|
switch (algorithm) {
|
||||||
case 'most-viewed':
|
case 'most-viewed':
|
||||||
|
|
|
@ -11,7 +11,7 @@ import {
|
||||||
ViewChild,
|
ViewChild,
|
||||||
ViewContainerRef
|
ViewContainerRef
|
||||||
} from '@angular/core'
|
} from '@angular/core'
|
||||||
import { ActivatedRoute, Router } from '@angular/router'
|
import { ActivatedRoute, Params, Router } from '@angular/router'
|
||||||
import {
|
import {
|
||||||
AuthService,
|
AuthService,
|
||||||
ComponentPaginationLight,
|
ComponentPaginationLight,
|
||||||
|
@ -199,6 +199,7 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy, AfterConte
|
||||||
// No more results
|
// No more results
|
||||||
if (this.lastQueryLength !== undefined && this.lastQueryLength < this.pagination.itemsPerPage) return
|
if (this.lastQueryLength !== undefined && this.lastQueryLength < this.pagination.itemsPerPage) return
|
||||||
|
|
||||||
|
console.log('near of bottom')
|
||||||
this.pagination.currentPage += 1
|
this.pagination.currentPage += 1
|
||||||
|
|
||||||
this.setScrollRouteParams()
|
this.setScrollRouteParams()
|
||||||
|
@ -322,10 +323,17 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy, AfterConte
|
||||||
// On videos hook for children that want to do something
|
// On videos hook for children that want to do something
|
||||||
protected onMoreVideos () { /* empty */ }
|
protected onMoreVideos () { /* empty */ }
|
||||||
|
|
||||||
protected loadRouteParams (routeParams: { [ key: string ]: any }) {
|
protected load () { /* empty */ }
|
||||||
this.sort = routeParams[ 'sort' ] as VideoSortField || this.defaultSort
|
|
||||||
this.categoryOneOf = routeParams[ 'categoryOneOf' ]
|
// Hook if the page has custom route params
|
||||||
this.angularState = routeParams[ 'a-state' ]
|
protected loadPageRouteParams (_queryParams: Params) { /* empty */ }
|
||||||
|
|
||||||
|
protected loadRouteParams (queryParams: Params) {
|
||||||
|
this.sort = queryParams[ 'sort' ] as VideoSortField || this.defaultSort
|
||||||
|
this.categoryOneOf = queryParams[ 'categoryOneOf' ]
|
||||||
|
this.angularState = queryParams[ 'a-state' ]
|
||||||
|
|
||||||
|
this.loadPageRouteParams(queryParams)
|
||||||
}
|
}
|
||||||
|
|
||||||
protected buildLocalFilter (existing: VideoFilter, base: VideoFilter) {
|
protected buildLocalFilter (existing: VideoFilter, base: VideoFilter) {
|
||||||
|
|
|
@ -121,6 +121,8 @@ describe('Test moderation notifications', function () {
|
||||||
const resComment = await addVideoCommentThread(servers[0].url, userAccessToken, video.id, 'comment abuse ' + uuidv4())
|
const resComment = await addVideoCommentThread(servers[0].url, userAccessToken, video.id, 'comment abuse ' + uuidv4())
|
||||||
const comment = resComment.body.comment
|
const comment = resComment.body.comment
|
||||||
|
|
||||||
|
await waitJobs(servers)
|
||||||
|
|
||||||
await reportAbuse({ url: servers[0].url, token: servers[0].accessToken, commentId: comment.id, reason: 'super reason' })
|
await reportAbuse({ url: servers[0].url, token: servers[0].accessToken, commentId: comment.id, reason: 'super reason' })
|
||||||
|
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
Loading…
Reference in New Issue