+import { forkJoin } from 'rxjs'
import { map } from 'rxjs/operators'
import { Component, Input, NgZone, OnDestroy, OnInit, ViewChild } from '@angular/core'
import { FormArray, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms'
import { ServerService } from '@app/core'
import { removeElementFromArray } from '@app/helpers'
-import { FormReactiveValidationMessages, FormValidatorService, VideoValidatorsService } from '@app/shared/shared-forms'
+import { FormReactiveValidationMessages, FormValidatorService, SelectChannelItem, VideoValidatorsService } from '@app/shared/shared-forms'
+import { InstanceService } from '@app/shared/shared-instance'
import { VideoCaptionEdit, VideoEdit, VideoService } from '@app/shared/shared-main'
+import { I18n } from '@ngx-translate/i18n-polyfill'
import { ServerConfig, VideoConstant, VideoPrivacy } from '@shared/models'
import { I18nPrimengCalendarService } from './i18n-primeng-calendar.service'
import { VideoCaptionAddModalComponent } from './video-caption-add-modal.component'
+type VideoLanguages = VideoConstant<string> & { group?: string }
+
@Component({
selector: 'my-video-edit',
styleUrls: [ './video-edit.component.scss' ],
@Input() form: FormGroup
@Input() formErrors: { [ id: string ]: string } = {}
@Input() validationMessages: FormReactiveValidationMessages = {}
- @Input() userVideoChannels: { id: number, label: string, support: string }[] = []
+ @Input() userVideoChannels: SelectChannelItem[] = []
@Input() schedulePublicationPossible = true
@Input() videoCaptions: (VideoCaptionEdit & { captionPath?: string })[] = []
@Input() waitTranscodingEnabled = true
videoPrivacies: VideoConstant<VideoPrivacy>[] = []
videoCategories: VideoConstant<number>[] = []
videoLicences: VideoConstant<number>[] = []
- videoLanguages: VideoConstant<string>[] = []
+ videoLanguages: VideoLanguages[] = []
tagValidators: ValidatorFn[]
tagValidatorsMessages: { [ name: string ]: string }
private videoValidatorsService: VideoValidatorsService,
private videoService: VideoService,
private serverService: ServerService,
+ private instanceService: InstanceService,
private i18nPrimengCalendarService: I18nPrimengCalendarService,
+ private i18n: I18n,
private ngZone: NgZone
) {
- this.tagValidators = this.videoValidatorsService.VIDEO_TAGS.VALIDATORS
- this.tagValidatorsMessages = this.videoValidatorsService.VIDEO_TAGS.MESSAGES
-
this.calendarLocale = this.i18nPrimengCalendarService.getCalendarLocale()
this.calendarTimezone = this.i18nPrimengCalendarService.getTimezone()
this.calendarDateFormat = this.i18nPrimengCalendarService.getDateFormat()
licence: this.videoValidatorsService.VIDEO_LICENCE,
language: this.videoValidatorsService.VIDEO_LANGUAGE,
description: this.videoValidatorsService.VIDEO_DESCRIPTION,
- tags: null,
+ tags: this.videoValidatorsService.VIDEO_TAGS_ARRAY,
previewfile: null,
support: this.videoValidatorsService.VIDEO_SUPPORT,
schedulePublicationAt: this.videoValidatorsService.VIDEO_SCHEDULE_PUBLICATION_AT,
.subscribe(res => this.videoCategories = res)
this.serverService.getVideoLicences()
.subscribe(res => this.videoLicences = res)
- this.serverService.getVideoLanguages()
- .subscribe(res => this.videoLanguages = res)
+ forkJoin([
+ this.instanceService.getAbout(),
+ this.serverService.getVideoLanguages()
+ ]).pipe(map(([ about, languages ]) => ({ about, languages })))
+ .subscribe(res => {
+ this.videoLanguages = res.languages
+ .map(l => res.about.instance.languages.includes(l.id)
+ ? { ...l, group: this.i18n('Instance languages'), groupOrder: 0 }
+ : { ...l, group: this.i18n('All languages'), groupOrder: 1 })
+ .sort((a, b) => a.groupOrder - b.groupOrder)
+ })
this.serverService.getVideoPrivacies()
- .subscribe(privacies => this.videoPrivacies = this.videoService.explainedPrivacyLabels(privacies))
+ .subscribe(privacies => {
+ this.videoPrivacies = this.videoService.explainedPrivacyLabels(privacies)
+ if (this.schedulePublicationPossible) {
+ this.videoPrivacies.push({
+ id: this.SPECIAL_SCHEDULED_PRIVACY,
+ label: this.i18n('Scheduled'),
+ description: this.i18n('Hide the video until a specific date')
+ })
+ }
+ })
this.serverConfig = this.serverService.getTmpConfig()
this.serverService.getConfig()