]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/shared/shared-moderation/video-block.component.ts
Support ICU in TS components
[github/Chocobozzz/PeerTube.git] / client / src / app / shared / shared-moderation / video-block.component.ts
index fb47989dc23394b9bb8fb1a3ac16fe9b2b3f1db0..e14473b89cb4fe220958dee90593714e8eaec826 100644 (file)
@@ -1,5 +1,6 @@
-import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'
+import { Component, EventEmitter, OnInit, Output, ViewChild } from '@angular/core'
 import { Notifier } from '@app/core'
+import { prepareIcu } from '@app/helpers'
 import { FormReactive, FormValidatorService } from '@app/shared/shared-forms'
 import { Video } from '@app/shared/shared-main'
 import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
@@ -13,12 +14,12 @@ import { VideoBlockService } from './video-block.service'
   styleUrls: [ './video-block.component.scss' ]
 })
 export class VideoBlockComponent extends FormReactive implements OnInit {
-  @Input() video: Video = null
-
   @ViewChild('modal', { static: true }) modal: NgbModal
 
   @Output() videoBlocked = new EventEmitter()
 
+  videos: Video[]
+
   error: string = null
 
   private openedModal: NgbModalRef
@@ -41,7 +42,25 @@ export class VideoBlockComponent extends FormReactive implements OnInit {
     }, defaultValues)
   }
 
-  show () {
+  isMultiple () {
+    return this.videos.length > 1
+  }
+
+  getSingleVideo () {
+    return this.videos[0]
+  }
+
+  hasLive () {
+    return this.videos.some(v => v.isLive)
+  }
+
+  hasLocal () {
+    return this.videos.some(v => v.isLocal)
+  }
+
+  show (videos: Video[]) {
+    this.videos = videos
+
     this.openedModal = this.modalService.open(this.modal, { centered: true, keyboard: false })
   }
 
@@ -51,22 +70,36 @@ export class VideoBlockComponent extends FormReactive implements OnInit {
   }
 
   block () {
-    const reason = this.form.value[ 'reason' ] || undefined
-    const unfederate = this.video.isLocal ? this.form.value[ 'unfederate' ] : undefined
+    const options = this.videos.map(v => ({
+      videoId: v.id,
+      reason: this.form.value['reason'] || undefined,
+      unfederate: v.isLocal
+        ? this.form.value['unfederate']
+        : undefined
+    }))
+
+    this.videoBlocklistService.blockVideo(options)
+        .subscribe({
+          next: () => {
+            const message = prepareIcu($localize`{count, plural, =1 {Blocked {videoName}} other {Blocked {count} videos}}.`)(
+              { count: this.videos.length, videoName: this.getSingleVideo().name },
+              $localize`Blocked ${this.videos.length} videos.`
+            )
 
-    this.videoBlocklistService.blockVideo(this.video.id, reason, unfederate)
-        .subscribe(
-          () => {
-            this.notifier.success($localize`Video blocked.`)
+            this.notifier.success(message)
             this.hide()
 
-            this.video.blacklisted = true
-            this.video.blockedReason = reason
+            for (const o of options) {
+              const video = this.videos.find(v => v.id === o.videoId)
+
+              video.blacklisted = true
+              video.blacklistedReason = o.reason
+            }
 
             this.videoBlocked.emit()
           },
 
-          err => this.notifier.error(err.message)
-        )
+          error: err => this.notifier.error(err.message)
+        })
   }
 }