From 74af5145f210e7e23d40b22c9ee3d968723d2595 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 25 May 2018 18:32:53 +0200 Subject: [PATCH] Video support field inherits channel support field --- ...-account-video-channel-edit.component.html | 5 ++- .../forms/markdown-textarea.component.scss | 1 + client/src/app/shared/misc/utils.ts | 4 +- .../shared/video-edit.component.ts | 38 ++++++++++++++++++- .../videos/+video-edit/video-add.component.ts | 2 +- .../+video-edit/video-update.component.ts | 2 +- 6 files changed, 46 insertions(+), 6 deletions(-) diff --git a/client/src/app/+my-account/my-account-video-channels/my-account-video-channel-edit.component.html b/client/src/app/+my-account/my-account-video-channels/my-account-video-channel-edit.component.html index d5fb6262a..10d408d55 100644 --- a/client/src/app/+my-account/my-account-video-channels/my-account-video-channel-edit.component.html +++ b/client/src/app/+my-account/my-account-video-channels/my-account-video-channel-edit.component.html @@ -28,7 +28,10 @@
- + { authService.userInformationLoaded .subscribe( @@ -28,7 +28,7 @@ function populateAsyncUserVideoChannels (authService: AuthService, channel: any[ const videoChannels = user.videoChannels if (Array.isArray(videoChannels) === false) return - videoChannels.forEach(c => channel.push({ id: c.id, label: c.displayName })) + videoChannels.forEach(c => channel.push({ id: c.id, label: c.displayName, support: c.support })) return res() } diff --git a/client/src/app/videos/+video-edit/shared/video-edit.component.ts b/client/src/app/videos/+video-edit/shared/video-edit.component.ts index d4567e26c..ccfae5fcc 100644 --- a/client/src/app/videos/+video-edit/shared/video-edit.component.ts +++ b/client/src/app/videos/+video-edit/shared/video-edit.component.ts @@ -16,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', @@ -28,7 +29,7 @@ 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 }[] = [] videoCategories = [] videoLicences = [] @@ -84,6 +85,37 @@ export class VideoEditComponent implements OnInit { 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 () { @@ -93,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 || '' }) + } } diff --git a/client/src/app/videos/+video-edit/video-add.component.ts b/client/src/app/videos/+video-edit/video-add.component.ts index 032504cea..997f033b7 100644 --- a/client/src/app/videos/+video-edit/video-add.component.ts +++ b/client/src/app/videos/+video-edit/video-add.component.ts @@ -42,7 +42,7 @@ export class VideoAddComponent extends FormReactive implements OnInit, OnDestroy formErrors: { [ id: string ]: string } = {} validationMessages: ValidatorMessage = {} - userVideoChannels = [] + userVideoChannels: { id: number, label: string, support: string }[] = [] userVideoQuotaUsed = 0 videoPrivacies = [] firstStepPrivacyId = 0 diff --git a/client/src/app/videos/+video-edit/video-update.component.ts b/client/src/app/videos/+video-edit/video-update.component.ts index 339da1bf4..310285f92 100644 --- a/client/src/app/videos/+video-edit/video-update.component.ts +++ b/client/src/app/videos/+video-edit/video-update.component.ts @@ -66,7 +66,7 @@ export class VideoUpdateComponent extends FormReactive implements OnInit { .listAccountVideoChannels(video.account) .pipe( map(result => result.data), - map(videoChannels => videoChannels.map(c => ({ id: c.id, label: c.displayName }))), + map(videoChannels => videoChannels.map(c => ({ id: c.id, label: c.displayName, support: c.support }))), map(videoChannels => ({ video, videoChannels })) ) }) -- 2.41.0