add sort select to my videos, change default sort to -publishedAt

fixes #3779
This commit is contained in:
Rigel Kent 2021-02-26 14:08:09 +01:00 committed by Chocobozzz
parent 6a882428e1
commit 8e286cdca4
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
4 changed files with 29 additions and 1 deletions

View File

@ -25,6 +25,17 @@
<a class="glyphicon glyphicon-remove-sign form-control-feedback form-control-clear" (click)="resetSearch()"></a>
<span class="sr-only" i18n>Clear filters</span>
</div>
<div class="peertube-select-container peertube-select-button ml-2">
<select [(ngModel)]="sort" (ngModelChange)="onChangeSortColumn()" class="form-control">
<option value="undefined" disabled>Sort by</option>
<option value="-publishedAt" i18n>Last published first</option>
<option value="-createdAt" i18n>Last created first</option>
<option value="-views" i18n>Most viewed first</option>
<option value="-likes" i18n>Most liked first</option>
<option value="-duration" i18n>Longest first</option>
</select>
</div>
</div>
<my-videos-selection

View File

@ -5,6 +5,10 @@ input[type=text] {
@include peertube-input-text(300px);
}
.peertube-select-container {
@include peertube-select-container(auto);
}
h1 {
display: flex;
justify-content: space-between;

View File

@ -43,6 +43,7 @@ export class MyVideosComponent implements OnInit, DisableForReuseHook {
videosSearch: string
videosSearchChanged = new Subject<string>()
getVideosObservableFunction = this.getVideosObservable.bind(this)
sort: VideoSortField = '-publishedAt'
user: User
@ -80,6 +81,10 @@ export class MyVideosComponent implements OnInit, DisableForReuseHook {
this.videosSearchChanged.next()
}
onChangeSortColumn () {
this.videosSelection.reloadVideos()
}
disableForReuse () {
this.videosSelection.disableForReuse()
}
@ -91,7 +96,7 @@ export class MyVideosComponent implements OnInit, DisableForReuseHook {
getVideosObservable (page: number, sort: VideoSortField) {
const newPagination = immutableAssign(this.pagination, { currentPage: page })
return this.videoService.getMyVideos(newPagination, sort, this.videosSearch)
return this.videoService.getMyVideos(newPagination, this.sort, this.videosSearch)
.pipe(
tap(res => this.pagination.totalItems = res.total)
)

View File

@ -54,6 +54,14 @@ function getVideoSort (value: string, lastSort: OrderItem = [ 'id', 'ASC' ]): Or
[ Sequelize.col('VideoModel.views'), direction ],
lastSort
]
} else if (field === 'publishedAt') {
return [
[ 'ScheduleVideoUpdate', 'updateAt', direction + ' NULLS LAST' ],
[ Sequelize.col('VideoModel.publishedAt'), direction ],
lastSort
]
}