1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
import { Component, Input, OnInit } from '@angular/core'
import { FormGroup, ValidatorFn } from '@angular/forms'
import { ActivatedRoute, Router } from '@angular/router'
import { FormReactiveValidationMessages, VideoValidatorsService } from '@app/shared'
import { NotificationsService } from 'angular2-notifications'
import { ServerService } from '../../../core/server'
import { VideoEdit } from '../../../shared/video/video-edit.model'
import { map } from 'rxjs/operators'
import { FormValidatorService } from '@app/shared/forms/form-validators/form-validator.service'
@Component({
selector: 'my-video-edit',
styleUrls: [ './video-edit.component.scss' ],
templateUrl: './video-edit.component.html'
})
export class VideoEditComponent implements OnInit {
@Input() form: FormGroup
@Input() formErrors: { [ id: string ]: string } = {}
@Input() validationMessages: FormReactiveValidationMessages = {}
@Input() videoPrivacies = []
@Input() userVideoChannels: { id: number, label: string, support: string }[] = []
videoCategories = []
videoLicences = []
videoLanguages = []
video: VideoEdit
tagValidators: ValidatorFn[]
tagValidatorsMessages: { [ name: string ]: string }
error: string = null
constructor (
private formValidatorService: FormValidatorService,
private videoValidatorsService: VideoValidatorsService,
private route: ActivatedRoute,
private router: Router,
private notificationsService: NotificationsService,
private serverService: ServerService
) {
this.tagValidators = this.videoValidatorsService.VIDEO_TAGS.VALIDATORS
this.tagValidatorsMessages = this.videoValidatorsService.VIDEO_TAGS.MESSAGES
}
updateForm () {
const defaultValues = {
nsfw: 'false',
commentsEnabled: 'true',
tags: []
}
const obj = {
name: this.videoValidatorsService.VIDEO_NAME,
privacy: this.videoValidatorsService.VIDEO_PRIVACY,
channelId: this.videoValidatorsService.VIDEO_CHANNEL,
nsfw: null,
commentsEnabled: null,
category: this.videoValidatorsService.VIDEO_CATEGORY,
licence: this.videoValidatorsService.VIDEO_LICENCE,
language: this.videoValidatorsService.VIDEO_LANGUAGE,
description: this.videoValidatorsService.VIDEO_DESCRIPTION,
tags: null,
thumbnailfile: null,
previewfile: null,
support: this.videoValidatorsService.VIDEO_SUPPORT
}
this.formValidatorService.updateForm(
this.form,
this.formErrors,
this.validationMessages,
obj,
defaultValues
)
// 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)
if (!newChannel) return
// 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 () {
this.updateForm()
this.videoCategories = this.serverService.getVideoCategories()
this.videoLicences = this.serverService.getVideoLicences()
this.videoLanguages = this.serverService.getVideoLanguages()
}
private updateSupportField (support: string) {
return this.form.patchValue({ support: support || '' })
}
}
|