X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fshared%2Fshared-custom-markup%2Fpeertube-custom-tags%2Fvideos-list-markup.component.ts;h=7c2e7db6a1bbc5fc7668074d9c2a4087a67131ab;hb=a2be43f5700460d3afdc194abc788690b79e66cd;hp=fe084afd90bba177692b9f25f045323485128fe8;hpb=9105634f16e5dfc66df198f23dbfae77dff2d821;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/shared/shared-custom-markup/peertube-custom-tags/videos-list-markup.component.ts b/client/src/app/shared/shared-custom-markup/peertube-custom-tags/videos-list-markup.component.ts index fe084afd9..7c2e7db6a 100644 --- a/client/src/app/shared/shared-custom-markup/peertube-custom-tags/videos-list-markup.component.ts +++ b/client/src/app/shared/shared-custom-markup/peertube-custom-tags/videos-list-markup.component.ts @@ -1,25 +1,34 @@ -import { Component, Input, OnInit } from '@angular/core' -import { AuthService } from '@app/core' -import { VideoFilter, VideoSortField } from '@shared/models' +import { finalize } from 'rxjs/operators' +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core' +import { AuthService, Notifier } from '@app/core' +import { VideoSortField } from '@shared/models' import { Video, VideoService } from '../../shared-main' import { MiniatureDisplayOptions } from '../../shared-video-miniature' +import { CustomMarkupComponent } from './shared' /* - * Markup component list videos depending on criterias + * Markup component list videos depending on criteria */ @Component({ selector: 'my-videos-list-markup', templateUrl: 'videos-list-markup.component.html', - styleUrls: [ 'videos-list-markup.component.scss' ] + styleUrls: [ 'videos-list-markup.component.scss' ], + changeDetection: ChangeDetectionStrategy.OnPush }) -export class VideosListMarkupComponent implements OnInit { +export class VideosListMarkupComponent implements CustomMarkupComponent, OnInit { @Input() sort: string @Input() categoryOneOf: number[] @Input() languageOneOf: string[] @Input() count: number @Input() onlyDisplayTitle: boolean - @Input() filter: VideoFilter + @Input() isLocal: boolean + @Input() isLive: boolean + @Input() maxRows: number + @Input() channelHandle: string + @Input() accountHandle: string + + @Output() loaded = new EventEmitter() videos: Video[] @@ -36,13 +45,25 @@ export class VideosListMarkupComponent implements OnInit { constructor ( private auth: AuthService, - private videoService: VideoService + private videoService: VideoService, + private notifier: Notifier, + private cd: ChangeDetectorRef ) { } getUser () { return this.auth.getUser() } + limitRowsStyle () { + if (this.maxRows <= 0) return {} + + return { + 'grid-template-rows': `repeat(${this.maxRows}, 1fr)`, + 'grid-auto-rows': '0', // Set height to 0 for autogenerated grid rows + 'overflow-y': 'hidden' // Hide grid items that overflow + } + } + ngOnInit () { if (this.onlyDisplayTitle) { for (const key of Object.keys(this.displayOptions)) { @@ -50,6 +71,19 @@ export class VideosListMarkupComponent implements OnInit { } } + return this.getVideosObservable() + .pipe(finalize(() => this.loaded.emit(true))) + .subscribe({ + next: ({ data }) => { + this.videos = data + this.cd.markForCheck() + }, + + error: err => this.notifier.error($localize`Error in videos list component: ${err.message}`) + }) + } + + getVideosObservable () { const options = { videoPagination: { currentPage: 1, @@ -57,11 +91,16 @@ export class VideosListMarkupComponent implements OnInit { }, categoryOneOf: this.categoryOneOf, languageOneOf: this.languageOneOf, - filter: this.filter, - sort: this.sort as VideoSortField + isLocal: this.isLocal, + isLive: this.isLive, + sort: this.sort as VideoSortField, + account: { nameWithHost: this.accountHandle }, + videoChannel: { nameWithHost: this.channelHandle } } - this.videoService.getVideos(options) - .subscribe(({ data }) => this.videos = data) + if (this.channelHandle) return this.videoService.getVideoChannelVideos(options) + if (this.accountHandle) return this.videoService.getAccountVideos(options) + + return this.videoService.getVideos(options) } }