From 5b0413ddaa7949a6a44512a8281c5a23466599ae Mon Sep 17 00:00:00 2001 From: Rigel Kent <sendmemail@rigelk.eu> Date: Sat, 28 Dec 2019 11:27:31 +0100 Subject: [PATCH] Add author indicator to the comment replies loader --- .../+video-watch/comment/video-comment.model.ts | 2 ++ .../comment/video-comments.component.html | 14 ++++++++++++-- .../comment/video-comments.component.scss | 2 +- server/models/video/video-comment.ts | 12 ++++++++++++ shared/models/videos/video-comment.model.ts | 1 + support/doc/api/openapi.yaml | 2 ++ 6 files changed, 30 insertions(+), 3 deletions(-) diff --git a/client/src/app/videos/+video-watch/comment/video-comment.model.ts b/client/src/app/videos/+video-watch/comment/video-comment.model.ts index 719d1f04e1..aaeb0ea9c2 100644 --- a/client/src/app/videos/+video-watch/comment/video-comment.model.ts +++ b/client/src/app/videos/+video-watch/comment/video-comment.model.ts @@ -15,6 +15,7 @@ export class VideoComment implements VideoCommentServerModel { deletedAt: Date | string isDeleted: boolean account: AccountInterface + totalRepliesFromVideoAuthor: number totalReplies: number by: string accountAvatarUrl: string @@ -33,6 +34,7 @@ export class VideoComment implements VideoCommentServerModel { this.deletedAt = hash.deletedAt ? new Date(hash.deletedAt.toString()) : null this.isDeleted = hash.isDeleted this.account = hash.account + this.totalRepliesFromVideoAuthor = hash.totalRepliesFromVideoAuthor this.totalReplies = hash.totalReplies if (this.account) { diff --git a/client/src/app/videos/+video-watch/comment/video-comments.component.html b/client/src/app/videos/+video-watch/comment/video-comments.component.html index e284eab0a1..8f5c583d38 100644 --- a/client/src/app/videos/+video-watch/comment/video-comments.component.html +++ b/client/src/app/videos/+video-watch/comment/video-comments.component.html @@ -69,9 +69,19 @@ ></my-video-comment> <div *ngIf="comment.totalReplies !== 0 && !threadComments[comment.id]" (click)="viewReplies(comment.id)" class="view-replies"> - <ng-container i18n>View all {{ comment.totalReplies }} replies</ng-container> - <span *ngIf="!threadLoading[comment.id]" class="glyphicon glyphicon-menu-down"></span> + + <ng-container *ngIf="comment.totalRepliesFromVideoAuthor > 0; then hasAuthorComments; else noAuthorComments"></ng-container> + <ng-template #hasAuthorComments> + <ng-container *ngIf="comment.totalReplies !== comment.totalRepliesFromVideoAuthor; else onlyAuthorComments" i18n> + View {{ comment.totalReplies }} replies from {{ video?.account?.displayName || 'the author' }} and others + </ng-container> + <ng-template i18n #onlyAuthorComments> + View {{ comment.totalReplies }} replies from {{ video?.account?.displayName || 'the author' }} + </ng-template> + </ng-template> + <ng-template i18n #noAuthorComments>View {{ comment.totalReplies }} replies</ng-template> + <my-small-loader class="comment-thread-loading" [loading]="threadLoading[comment.id]"></my-small-loader> </div> </div> diff --git a/client/src/app/videos/+video-watch/comment/video-comments.component.scss b/client/src/app/videos/+video-watch/comment/video-comments.component.scss index c02f6c21bb..600bc1ceee 100644 --- a/client/src/app/videos/+video-watch/comment/video-comments.component.scss +++ b/client/src/app/videos/+video-watch/comment/video-comments.component.scss @@ -14,7 +14,7 @@ } .glyphicon, .comment-thread-loading { - margin-left: 5px; + margin-right: 5px; display: inline-block; font-size: 13px; } diff --git a/server/models/video/video-comment.ts b/server/models/video/video-comment.ts index 28f011b03b..c2798e82aa 100644 --- a/server/models/video/video-comment.ts +++ b/server/models/video/video-comment.ts @@ -56,6 +56,17 @@ enum ScopeNames { ')' ), 'totalReplies' + ], + [ + Sequelize.literal( + '(' + + 'SELECT COUNT("replies"."id") ' + + 'FROM "videoComment" AS "replies" ' + + 'WHERE "replies"."originCommentId" = "VideoCommentModel"."id" ' + + 'AND "accountId" = ' + userAccountId + + ')' + ), + 'totalRepliesFromVideoAuthor' ] ] } @@ -501,6 +512,7 @@ export class VideoCommentModel extends Model<VideoCommentModel> { updatedAt: this.updatedAt, deletedAt: this.deletedAt, isDeleted: this.isDeleted(), + totalRepliesFromVideoAuthor: this.get('totalRepliesFromVideoAuthor') || 0, totalReplies: this.get('totalReplies') || 0, account: this.Account ? this.Account.toFormattedJSON() : null } as VideoComment diff --git a/shared/models/videos/video-comment.model.ts b/shared/models/videos/video-comment.model.ts index 0449626332..eec7dba1ce 100644 --- a/shared/models/videos/video-comment.model.ts +++ b/shared/models/videos/video-comment.model.ts @@ -11,6 +11,7 @@ export interface VideoComment { updatedAt: Date | string deletedAt: Date | string isDeleted: boolean + totalRepliesFromVideoAuthor: number totalReplies: number account: Account } diff --git a/support/doc/api/openapi.yaml b/support/doc/api/openapi.yaml index 5c5845f2b6..a193bebab9 100644 --- a/support/doc/api/openapi.yaml +++ b/support/doc/api/openapi.yaml @@ -2257,6 +2257,8 @@ components: type: string updatedAt: type: string + totalRepliesFromVideoAuthor: + type: number totalReplies: type: number account: -- GitLab