]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/shared/shared-abuse-list/abuse-message-modal.component.ts
Support ICU in TS components
[github/Chocobozzz/PeerTube.git] / client / src / app / shared / shared-abuse-list / abuse-message-modal.component.ts
index 03f5ad735980b427905b3d10f2a17ed2d0fff2dd..6c8dc6d35e102777a2276377ee0291a5b5f08db6 100644 (file)
@@ -1,10 +1,10 @@
-import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'
-import { AuthService, Notifier } from '@app/core'
-import { AbuseValidatorsService, FormReactive, FormValidatorService } from '@app/shared/shared-forms'
+import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'
+import { AuthService, HtmlRendererService, Notifier } from '@app/core'
+import { FormReactive, FormValidatorService } from '@app/shared/shared-forms'
 import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
 import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap/modal/modal-ref'
-import { I18n } from '@ngx-translate/i18n-polyfill'
 import { AbuseMessage, UserAbuse } from '@shared/models'
+import { ABUSE_MESSAGE_VALIDATOR } from '../form-validators/abuse-validators'
 import { AbuseService } from '../shared-moderation'
 
 @Component({
@@ -14,13 +14,12 @@ import { AbuseService } from '../shared-moderation'
 })
 export class AbuseMessageModalComponent extends FormReactive implements OnInit {
   @ViewChild('modal', { static: true }) modal: NgbModal
-  @ViewChild('messagesBlock', { static: false }) messagesBlock: ElementRef
 
   @Input() isAdminView: boolean
 
   @Output() countMessagesUpdated = new EventEmitter<{ abuseId: number, countMessages: number }>()
 
-  abuseMessages: AbuseMessage[] = []
+  abuseMessages: (AbuseMessage & { messageHtml: string })[] = []
   textareaMessage: string
   sendingMessage = false
   noResults = false
@@ -30,9 +29,8 @@ export class AbuseMessageModalComponent extends FormReactive implements OnInit {
 
   constructor (
     protected formValidatorService: FormValidatorService,
-    private abuseValidatorsService: AbuseValidatorsService,
     private modalService: NgbModal,
-    private i18n: I18n,
+    private htmlRenderer: HtmlRendererService,
     private auth: AuthService,
     private notifier: Notifier,
     private abuseService: AbuseService
@@ -42,7 +40,7 @@ export class AbuseMessageModalComponent extends FormReactive implements OnInit {
 
   ngOnInit () {
     this.buildForm({
-      message: this.abuseValidatorsService.ABUSE_MESSAGE
+      message: ABUSE_MESSAGE_VALIDATOR
     })
   }
 
@@ -63,8 +61,8 @@ export class AbuseMessageModalComponent extends FormReactive implements OnInit {
     this.sendingMessage = true
 
     this.abuseService.addAbuseMessage(this.abuse, this.form.value['message'])
-      .subscribe(
-        () => {
+      .subscribe({
+        next: () => {
           this.form.reset()
           this.sendingMessage = false
           this.countMessagesUpdated.emit({ abuseId: this.abuse.id, countMessages: this.abuseMessages.length + 1 })
@@ -72,25 +70,25 @@ export class AbuseMessageModalComponent extends FormReactive implements OnInit {
           this.loadMessages()
         },
 
-        err => {
+        error: err => {
           this.sendingMessage = false
           console.error(err)
           this.notifier.error('Sorry but you cannot send this message. Please retry later')
         }
-      )
+      })
   }
 
   deleteMessage (abuseMessage: AbuseMessage) {
     this.abuseService.deleteAbuseMessage(this.abuse, abuseMessage)
-      .subscribe(
-        () => {
+      .subscribe({
+        next: () => {
           this.countMessagesUpdated.emit({ abuseId: this.abuse.id, countMessages: this.abuseMessages.length - 1 })
 
           this.abuseMessages = this.abuseMessages.filter(m => m.id !== abuseMessage.id)
         },
 
-        err => this.notifier.error(err.message)
-      )
+        error: err => this.notifier.error(err.message)
+      })
   }
 
   isMessageByMe (abuseMessage: AbuseMessage) {
@@ -99,29 +97,35 @@ export class AbuseMessageModalComponent extends FormReactive implements OnInit {
 
   getPlaceholderMessage () {
     if (this.isAdminView) {
-      return this.i18n('Add a message to communicate with the reporter')
+      return $localize`Add a message to communicate with the reporter`
     }
 
-    return this.i18n('Add a message to communicate with the moderation team')
+    return $localize`Add a message to communicate with the moderation team`
   }
 
   private loadMessages () {
     this.abuseService.listAbuseMessages(this.abuse)
-      .subscribe(
-        res => {
-          this.abuseMessages = res.data
+      .subscribe({
+        next: async res => {
+          this.abuseMessages = []
+
+          for (const m of res.data) {
+            this.abuseMessages.push(Object.assign(m, {
+              messageHtml: await this.htmlRenderer.convertToBr(m.message)
+            }))
+          }
+
           this.noResults = this.abuseMessages.length === 0
 
           setTimeout(() => {
-            if (!this.messagesBlock) return
-
-            const element = this.messagesBlock.nativeElement as HTMLElement
-            element.scrollIntoView({ block: 'end', inline: 'nearest' })
+            // Don't use ViewChild: it is not supported inside a ng-template
+            const messagesBlock = document.querySelector('.messages')
+            messagesBlock.scroll(0, messagesBlock.scrollHeight)
           })
         },
 
-        err => this.notifier.error(err.message)
-      )
+        error: err => this.notifier.error(err.message)
+      })
   }
 
 }