]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Add playlist channel validator when playlist is public
authorChocobozzz <me@florianbigard.com>
Thu, 14 Mar 2019 13:55:10 +0000 (14:55 +0100)
committerChocobozzz <chocobozzz@cpy.re>
Mon, 18 Mar 2019 10:17:59 +0000 (11:17 +0100)
client/src/app/+my-account/my-account-video-playlists/my-account-video-playlist-create.component.ts
client/src/app/+my-account/my-account-video-playlists/my-account-video-playlist-edit.component.html
client/src/app/+my-account/my-account-video-playlists/my-account-video-playlist-update.component.ts
client/src/app/shared/forms/form-validators/video-playlist-validators.service.ts
client/src/app/shared/video-playlist/video-add-to-playlist.component.html
client/src/app/shared/video-playlist/video-add-to-playlist.component.ts

index 61b61e221a82e84329f58c77ee8315cbd5d47f65..87a10961f4b9466c0f969f26e6fea7ac3a45a62e 100644 (file)
@@ -35,13 +35,17 @@ export class MyAccountVideoPlaylistCreateComponent extends MyAccountVideoPlaylis
 
   ngOnInit () {
     this.buildForm({
-      'display-name': this.videoPlaylistValidatorsService.VIDEO_PLAYLIST_DISPLAY_NAME,
+      displayName: this.videoPlaylistValidatorsService.VIDEO_PLAYLIST_DISPLAY_NAME,
       privacy: this.videoPlaylistValidatorsService.VIDEO_PLAYLIST_PRIVACY,
       description: this.videoPlaylistValidatorsService.VIDEO_PLAYLIST_DESCRIPTION,
       videoChannelId: this.videoPlaylistValidatorsService.VIDEO_PLAYLIST_CHANNEL_ID,
       thumbnailfile: null
     })
 
+    this.form.get('privacy').valueChanges.subscribe(privacy => {
+      this.videoPlaylistValidatorsService.setChannelValidator(this.form.get('videoChannelId'), privacy)
+    })
+
     populateAsyncUserVideoChannels(this.authService, this.userVideoChannels)
 
     this.serverService.videoPlaylistPrivaciesLoaded.subscribe(
@@ -60,7 +64,7 @@ export class MyAccountVideoPlaylistCreateComponent extends MyAccountVideoPlaylis
 
     const body = this.form.value
     const videoPlaylistCreate: VideoPlaylistCreate = {
-      displayName: body['display-name'],
+      displayName: body.displayName,
       privacy: body.privacy,
       description: body.description || null,
       videoChannelId: body.videoChannelId || null,
index 5d1184218ac4c6e5323f0b9a85808869eca01a13..303fc46f7033942268105c8c8ddfbf13df2ea8b4 100644 (file)
@@ -6,13 +6,13 @@
   <div class="row">
     <div class="col-md-12 col-xl-6">
       <div class="form-group">
-        <label i18n for="display-name">Display name</label>
+        <label i18n for="displayName">Display name</label>
         <input
-          type="text" id="display-name"
-          formControlName="display-name" [ngClass]="{ 'input-error': formErrors['display-name'] }"
+          type="text" id="displayName"
+          formControlName="displayName" [ngClass]="{ 'input-error': formErrors['displayName'] }"
         >
-        <div *ngIf="formErrors['display-name']" class="form-error">
-          {{ formErrors['display-name'] }}
+        <div *ngIf="formErrors['displayName']" class="form-error">
+          {{ formErrors['displayName'] }}
         </div>
       </div>
 
             <option *ngFor="let channel of userVideoChannels" [value]="channel.id">{{ channel.label }}</option>
           </select>
         </div>
+
+        <div *ngIf="formErrors['videoChannelId']" class="form-error">
+          {{ formErrors['videoChannelId'] }}
+        </div>
       </div>
 
       <div class="form-group">
index 167d7dd094bae4ee1ea77f9e4bd5121f8e8dbb80..4887fdfb4f5d1bf10b329c7a4471a721bcba901b 100644 (file)
@@ -41,13 +41,17 @@ export class MyAccountVideoPlaylistUpdateComponent extends MyAccountVideoPlaylis
 
   ngOnInit () {
     this.buildForm({
-      'display-name': this.videoPlaylistValidatorsService.VIDEO_PLAYLIST_DISPLAY_NAME,
+      displayName: this.videoPlaylistValidatorsService.VIDEO_PLAYLIST_DISPLAY_NAME,
       privacy: this.videoPlaylistValidatorsService.VIDEO_PLAYLIST_PRIVACY,
       description: this.videoPlaylistValidatorsService.VIDEO_PLAYLIST_DESCRIPTION,
       videoChannelId: this.videoPlaylistValidatorsService.VIDEO_PLAYLIST_CHANNEL_ID,
       thumbnailfile: null
     })
 
+    this.form.get('privacy').valueChanges.subscribe(privacy => {
+      this.videoPlaylistValidatorsService.setChannelValidator(this.form.get('videoChannelId'), privacy)
+    })
+
     populateAsyncUserVideoChannels(this.authService, this.userVideoChannels)
 
     this.paramsSub = this.route.params.subscribe(routeParams => {
@@ -85,8 +89,8 @@ export class MyAccountVideoPlaylistUpdateComponent extends MyAccountVideoPlaylis
 
     const body = this.form.value
     const videoPlaylistUpdate: VideoPlaylistUpdate = {
-      displayName: body['display-name'],
-      privacy: body['privacy'],
+      displayName: body.displayName,
+      privacy: body.privacy,
       description: body.description || null,
       videoChannelId: body.videoChannelId || null,
       thumbnailfile: body.thumbnailfile || undefined
@@ -115,7 +119,7 @@ export class MyAccountVideoPlaylistUpdateComponent extends MyAccountVideoPlaylis
 
   private hydrateFormFromPlaylist () {
     this.form.patchValue({
-      'display-name': this.videoPlaylistToUpdate.displayName,
+      displayName: this.videoPlaylistToUpdate.displayName,
       privacy: this.videoPlaylistToUpdate.privacy.id,
       description: this.videoPlaylistToUpdate.description,
       videoChannelId: this.videoPlaylistToUpdate.videoChannel ? this.videoPlaylistToUpdate.videoChannel.id : null
index 726084b47ef34c2f9ad63b4c97eccec69025a456..a2c9a5368926d00784f290a87ccea20bfb29a5d1 100644 (file)
@@ -1,7 +1,8 @@
 import { I18n } from '@ngx-translate/i18n-polyfill'
-import { Validators } from '@angular/forms'
+import { AbstractControl, FormControl, Validators } from '@angular/forms'
 import { Injectable } from '@angular/core'
 import { BuildFormValidator } from '@app/shared'
+import { VideoPlaylistPrivacy } from '@shared/models'
 
 @Injectable()
 export class VideoPlaylistValidatorsService {
@@ -46,7 +47,20 @@ export class VideoPlaylistValidatorsService {
 
     this.VIDEO_PLAYLIST_CHANNEL_ID = {
       VALIDATORS: [ ],
-      MESSAGES: { }
+      MESSAGES: {
+        'required': this.i18n('The channel is required when the playlist is public.')
+      }
+    }
+  }
+
+  setChannelValidator (channelControl: AbstractControl, privacy: VideoPlaylistPrivacy) {
+    if (privacy.toString() === VideoPlaylistPrivacy.PUBLIC.toString()) {
+      channelControl.setValidators([ Validators.required ])
+    } else {
+      channelControl.setValidators(null)
     }
+
+    channelControl.markAsDirty()
+    channelControl.updateValueAndValidity()
   }
 }
index f85e50d6d4a530c5ea56478ea7f9b740e2cfb108..19b326206a52bb1b2efb0e7392596cfa7b7cf2b6 100644 (file)
 
 <form class="new-playlist-block dropdown-item" *ngIf="isNewPlaylistBlockOpened" (ngSubmit)="createPlaylist()" [formGroup]="form">
   <div class="form-group">
-    <label i18n for="display-name">Display name</label>
+    <label i18n for="displayName">Display name</label>
     <input
-      type="text" id="display-name"
-      formControlName="display-name" [ngClass]="{ 'input-error': formErrors['display-name'] }"
+      type="text" id="displayName"
+      formControlName="displayName" [ngClass]="{ 'input-error': formErrors['displayName'] }"
     >
-    <div *ngIf="formErrors['display-name']" class="form-error">
-      {{ formErrors['display-name'] }}
+    <div *ngIf="formErrors['displayName']" class="form-error">
+      {{ formErrors['displayName'] }}
     </div>
   </div>
 
index c6fb6dbedab6bf26c287511eeb0ec86f290e5d57..705f62404daf3c2586d8d582d6c6077d8b6f1540 100644 (file)
@@ -5,7 +5,7 @@ import { forkJoin } from 'rxjs'
 import { Video, VideoPlaylistCreate, VideoPlaylistElementCreate, VideoPlaylistPrivacy } from '@shared/models'
 import { FormReactive, FormValidatorService, VideoPlaylistValidatorsService } from '@app/shared/forms'
 import { I18n } from '@ngx-translate/i18n-polyfill'
-import { secondsToTime, timeToInt } from '../../../assets/player/utils'
+import { secondsToTime } from '../../../assets/player/utils'
 
 type PlaylistSummary = {
   id: number
@@ -54,7 +54,7 @@ export class VideoAddToPlaylistComponent extends FormReactive implements OnInit
     this.resetOptions(true)
 
     this.buildForm({
-      'display-name': this.videoPlaylistValidatorsService.VIDEO_PLAYLIST_DISPLAY_NAME
+      displayName: this.videoPlaylistValidatorsService.VIDEO_PLAYLIST_DISPLAY_NAME
     })
 
     forkJoin([
@@ -105,7 +105,7 @@ export class VideoAddToPlaylistComponent extends FormReactive implements OnInit
   }
 
   createPlaylist () {
-    const displayName = this.form.value[ 'display-name' ]
+    const displayName = this.form.value[ 'displayName' ]
 
     const videoPlaylistCreate: VideoPlaylistCreate = {
       displayName,