]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/videos/+video-edit/shared/video-edit.component.ts
Video support field inherits channel support field
[github/Chocobozzz/PeerTube.git] / client / src / app / videos / +video-edit / shared / video-edit.component.ts
index 85e5cc3f596125be76242af72f6049fa197a6903..ccfae5fcc00424a77900161ebf6836d169681695 100644 (file)
@@ -1,9 +1,8 @@
 import { Component, Input, OnInit } from '@angular/core'
 import { FormBuilder, FormControl, FormGroup } from '@angular/forms'
 import { ActivatedRoute, Router } from '@angular/router'
-import { VIDEO_IMAGE } from '@app/shared'
+import { VIDEO_IMAGE, VIDEO_SUPPORT } from '@app/shared'
 import { NotificationsService } from 'angular2-notifications'
-import 'rxjs/add/observable/forkJoin'
 import { ServerService } from '../../../core/server'
 import { VIDEO_CHANNEL } from '../../../shared/forms/form-validators'
 import { ValidatorMessage } from '../../../shared/forms/form-validators/validator-message'
@@ -17,6 +16,7 @@ import {
   VIDEO_TAGS
 } from '../../../shared/forms/form-validators/video'
 import { VideoEdit } from '../../../shared/video/video-edit.model'
+import { map } from 'rxjs/operators'
 
 @Component({
   selector: 'my-video-edit',
@@ -29,9 +29,8 @@ export class VideoEditComponent implements OnInit {
   @Input() formErrors: { [ id: string ]: string } = {}
   @Input() validationMessages: ValidatorMessage = {}
   @Input() videoPrivacies = []
-  @Input() userVideoChannels = []
+  @Input() userVideoChannels: { id: number, label: string, support: string }[] = []
 
-  tags: string[] = []
   videoCategories = []
   videoLicences = []
   videoLanguages = []
@@ -60,6 +59,7 @@ export class VideoEditComponent implements OnInit {
     this.formErrors['description'] = ''
     this.formErrors['thumbnailfile'] = ''
     this.formErrors['previewfile'] = ''
+    this.formErrors['support'] = ''
 
     this.validationMessages['name'] = VIDEO_NAME.MESSAGES
     this.validationMessages['privacy'] = VIDEO_PRIVACY.MESSAGES
@@ -70,19 +70,52 @@ export class VideoEditComponent implements OnInit {
     this.validationMessages['description'] = VIDEO_DESCRIPTION.MESSAGES
     this.validationMessages['thumbnailfile'] = VIDEO_IMAGE.MESSAGES
     this.validationMessages['previewfile'] = VIDEO_IMAGE.MESSAGES
+    this.validationMessages['support'] = VIDEO_SUPPORT.MESSAGES
 
     this.form.addControl('name', new FormControl('', VIDEO_NAME.VALIDATORS))
     this.form.addControl('privacy', new FormControl('', VIDEO_PRIVACY.VALIDATORS))
-    this.form.addControl('channelId', new FormControl({ value: '', disabled: true }))
+    this.form.addControl('channelId', new FormControl('', VIDEO_CHANNEL.VALIDATORS))
     this.form.addControl('nsfw', new FormControl(false))
     this.form.addControl('commentsEnabled', new FormControl(true))
     this.form.addControl('category', new FormControl('', VIDEO_CATEGORY.VALIDATORS))
     this.form.addControl('licence', new FormControl('', VIDEO_LICENCE.VALIDATORS))
     this.form.addControl('language', new FormControl('', VIDEO_LANGUAGE.VALIDATORS))
     this.form.addControl('description', new FormControl('', VIDEO_DESCRIPTION.VALIDATORS))
-    this.form.addControl('tags', new FormControl(''))
+    this.form.addControl('tags', new FormControl([]))
     this.form.addControl('thumbnailfile', new FormControl(''))
     this.form.addControl('previewfile', new FormControl(''))
+    this.form.addControl('support', new FormControl('', VIDEO_SUPPORT.VALIDATORS))
+
+    // We will update the "support" field depending on the channel
+    this.form.controls['channelId']
+      .valueChanges
+      .pipe(map(res => parseInt(res.toString(), 10)))
+      .subscribe(
+        newChannelId => {
+          const oldChannelId = parseInt(this.form.value['channelId'], 10)
+          const currentSupport = this.form.value['support']
+
+          // Not initialized yet
+          if (isNaN(newChannelId)) return
+          const newChannel = this.userVideoChannels.find(c => c.id === newChannelId)
+
+          // First time we set the channel?
+          if (isNaN(oldChannelId)) return this.updateSupportField(newChannel.support)
+          const oldChannel = this.userVideoChannels.find(c => c.id === oldChannelId)
+
+          if (!newChannel || !oldChannel) {
+            console.error('Cannot find new or old channel.')
+            return
+          }
+
+          // If the current support text is not the same than the old channel, the user updated it.
+          // We don't want the user to lose his text, so stop here
+          if (currentSupport && currentSupport !== oldChannel.support) return
+
+          // Update the support text with our new channel
+          this.updateSupportField(newChannel.support)
+        }
+      )
   }
 
   ngOnInit () {
@@ -92,4 +125,8 @@ export class VideoEditComponent implements OnInit {
     this.videoLicences = this.serverService.getVideoLicences()
     this.videoLanguages = this.serverService.getVideoLanguages()
   }
+
+  private updateSupportField (support: string) {
+    return this.form.patchValue({ support: support || '' })
+  }
 }