mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2024-11-29 12:04:02 -06:00
Add infinite scroll to comments
This commit is contained in:
parent
80f8e364e1
commit
7416fbf335
@ -9,7 +9,13 @@
|
|||||||
(commentCreated)="onCommentThreadCreated($event)"
|
(commentCreated)="onCommentThreadCreated($event)"
|
||||||
></my-video-comment-add>
|
></my-video-comment-add>
|
||||||
|
|
||||||
<div class="comment-threads">
|
<div
|
||||||
|
class="comment-threads"
|
||||||
|
infiniteScroll
|
||||||
|
[infiniteScrollUpDistance]="1.5"
|
||||||
|
[infiniteScrollDistance]="0.5"
|
||||||
|
(scrolled)="onNearOfBottom()"
|
||||||
|
>
|
||||||
<div *ngFor="let comment of comments">
|
<div *ngFor="let comment of comments">
|
||||||
<my-video-comment
|
<my-video-comment
|
||||||
[comment]="comment"
|
[comment]="comment"
|
||||||
|
@ -22,7 +22,7 @@ export class VideoCommentsComponent implements OnInit {
|
|||||||
sort: SortField = '-createdAt'
|
sort: SortField = '-createdAt'
|
||||||
componentPagination: ComponentPagination = {
|
componentPagination: ComponentPagination = {
|
||||||
currentPage: 1,
|
currentPage: 1,
|
||||||
itemsPerPage: 25,
|
itemsPerPage: 10,
|
||||||
totalItems: null
|
totalItems: null
|
||||||
}
|
}
|
||||||
inReplyToCommentId: number
|
inReplyToCommentId: number
|
||||||
@ -36,15 +36,7 @@ export class VideoCommentsComponent implements OnInit {
|
|||||||
) {}
|
) {}
|
||||||
|
|
||||||
ngOnInit () {
|
ngOnInit () {
|
||||||
this.videoCommentService.getVideoCommentThreads(this.video.id, this.componentPagination, this.sort)
|
this.loadMoreComments()
|
||||||
.subscribe(
|
|
||||||
res => {
|
|
||||||
this.comments = res.comments
|
|
||||||
this.componentPagination.totalItems = res.totalComments
|
|
||||||
},
|
|
||||||
|
|
||||||
err => this.notificationsService.error('Error', err.message)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
viewReplies (comment: VideoComment) {
|
viewReplies (comment: VideoComment) {
|
||||||
@ -61,6 +53,18 @@ export class VideoCommentsComponent implements OnInit {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loadMoreComments () {
|
||||||
|
this.videoCommentService.getVideoCommentThreads(this.video.id, this.componentPagination, this.sort)
|
||||||
|
.subscribe(
|
||||||
|
res => {
|
||||||
|
this.comments = this.comments.concat(res.comments)
|
||||||
|
this.componentPagination.totalItems = res.totalComments
|
||||||
|
},
|
||||||
|
|
||||||
|
err => this.notificationsService.error('Error', err.message)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
onCommentThreadCreated (comment: VideoComment) {
|
onCommentThreadCreated (comment: VideoComment) {
|
||||||
this.comments.unshift(comment)
|
this.comments.unshift(comment)
|
||||||
}
|
}
|
||||||
@ -76,4 +80,23 @@ export class VideoCommentsComponent implements OnInit {
|
|||||||
isUserLoggedIn () {
|
isUserLoggedIn () {
|
||||||
return this.authService.isLoggedIn()
|
return this.authService.isLoggedIn()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onNearOfBottom () {
|
||||||
|
this.componentPagination.currentPage++
|
||||||
|
|
||||||
|
if (this.hasMoreComments()) {
|
||||||
|
this.loadMoreComments()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected hasMoreComments () {
|
||||||
|
// No results
|
||||||
|
if (this.componentPagination.totalItems === 0) return false
|
||||||
|
|
||||||
|
// Not loaded yet
|
||||||
|
if (!this.componentPagination.totalItems) return true
|
||||||
|
|
||||||
|
const maxPage = this.componentPagination.totalItems / this.componentPagination.itemsPerPage
|
||||||
|
return maxPage > this.componentPagination.currentPage
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user