X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fshared%2Fshared-video-miniature%2Fabstract-video-list.ts;h=f833805136c50eb7f9eb2f6bfd8585231bfe23e9;hb=f1ac63488c0050fec1c4d713d74db4f4ea944395;hp=5361f6d6cf38414e281136c2d69b36dfb08e569a;hpb=40930fda8615a9e0196e99602419cb74dda75e02;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/shared/shared-video-miniature/abstract-video-list.ts b/client/src/app/shared/shared-video-miniature/abstract-video-list.ts index 5361f6d6c..f83380513 100644 --- a/client/src/app/shared/shared-video-miniature/abstract-video-list.ts +++ b/client/src/app/shared/shared-video-miniature/abstract-video-list.ts @@ -1,4 +1,4 @@ -import { fromEvent, Observable, Subject, Subscription } from 'rxjs' +import { fromEvent, Observable, ReplaySubject, Subject, Subscription } from 'rxjs' import { debounceTime, switchMap, tap } from 'rxjs/operators' import { AfterContentInit, @@ -11,7 +11,7 @@ import { ViewChild, ViewContainerRef } from '@angular/core' -import { ActivatedRoute, Router } from '@angular/router' +import { ActivatedRoute, Params, Router } from '@angular/router' import { AuthService, ComponentPaginationLight, @@ -28,8 +28,8 @@ import { isLastMonth, isLastWeek, isThisMonth, isToday, isYesterday } from '@sha import { ServerConfig, UserRight, VideoFilter, VideoSortField } from '@shared/models' import { NSFWPolicyType } from '@shared/models/videos/nsfw-policy.type' import { Syndication, Video } from '../shared-main' -import { MiniatureDisplayOptions, OwnerDisplayType } from './video-miniature.component' import { GenericHeaderComponent, VideoListHeaderComponent } from './video-list-header.component' +import { MiniatureDisplayOptions } from './video-miniature.component' enum GroupDate { UNKNOWN = 0, @@ -63,8 +63,8 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy, AfterConte syndicationItems: Syndication[] = [] loadOnInit = true - useUserVideoPreferences = false - ownerDisplayType: OwnerDisplayType = 'account' + loadUserVideoPreferences = false + displayModerationBlock = false titleTooltip: string displayVideoActions = true @@ -98,6 +98,8 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy, AfterConte userMiniature: User + protected onUserLoadedSubject = new ReplaySubject(1) + protected serverConfig: ServerConfig protected abstract notifier: Notifier @@ -149,10 +151,11 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy, AfterConte this.calcPageSizes() const loadUserObservable = this.loadUserAndSettings() + loadUserObservable.subscribe(() => { + this.onUserLoadedSubject.next() - if (this.loadOnInit === true) { - loadUserObservable.subscribe(() => this.loadMoreVideos()) - } + if (this.loadOnInit === true) this.loadMoreVideos() + }) this.userService.listenAnonymousUpdate() .pipe(switchMap(() => this.loadUserAndSettings())) @@ -195,6 +198,7 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy, AfterConte // No more results if (this.lastQueryLength !== undefined && this.lastQueryLength < this.pagination.itemsPerPage) return + console.log('near of bottom') this.pagination.currentPage += 1 this.setScrollRouteParams() @@ -315,13 +319,25 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy, AfterConte viewContainerRef.createComponent(componentFactory, 0, injector) } + // Can be redefined by child + displayAsRow () { + return false + } + // On videos hook for children that want to do something protected onMoreVideos () { /* empty */ } - protected loadRouteParams (routeParams: { [ key: string ]: any }) { - this.sort = routeParams[ 'sort' ] as VideoSortField || this.defaultSort - this.categoryOneOf = routeParams[ 'categoryOneOf' ] - this.angularState = routeParams[ 'a-state' ] + protected load () { /* empty */ } + + // Hook if the page has custom route params + 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) { @@ -374,7 +390,7 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy, AfterConte .pipe(tap(user => { this.userMiniature = user - if (!this.useUserVideoPreferences) return + if (!this.loadUserVideoPreferences) return this.languageOneOf = user.videoLanguages this.nsfwPolicy = user.nsfwPolicy