import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'
+import { ValidatorFn } from '@angular/forms'
+import { VideoValidatorsService } from '@app/shared'
import { ServerService } from '@app/core'
import { I18n } from '@ngx-translate/i18n-polyfill'
import { AdvancedSearch } from '@app/search/advanced-search.model'
-import { VideoConstant } from '../../../../shared'
+import { ServerConfig, VideoConstant } from '../../../../shared'
@Component({
selector: 'my-search-filters',
videoLicences: VideoConstant<number>[] = []
videoLanguages: VideoConstant<string>[] = []
+ tagValidators: ValidatorFn[]
+ tagValidatorsMessages: { [ name: string ]: string }
+
publishedDateRanges: { id: string, label: string }[] = []
sorts: { id: string, label: string }[] = []
durationRanges: { id: string, label: string }[] = []
originallyPublishedStartYear: string
originallyPublishedEndYear: string
+ private serverConfig: ServerConfig
+
constructor (
private i18n: I18n,
+ private videoValidatorsService: VideoValidatorsService,
private serverService: ServerService
) {
+ this.tagValidators = this.videoValidatorsService.VIDEO_TAGS.VALIDATORS
+ this.tagValidatorsMessages = this.videoValidatorsService.VIDEO_TAGS.MESSAGES
this.publishedDateRanges = [
+ {
+ id: 'any_published_date',
+ label: this.i18n('Any')
+ },
{
id: 'today',
label: this.i18n('Today')
this.durationRanges = [
{
- id: 'short',
- label: this.i18n('Short (< 4 min)')
+ id: 'any_duration',
+ label: this.i18n('Any')
},
{
- id: 'long',
- label: this.i18n('Long (> 10 min)')
+ id: 'short',
+ label: this.i18n('Short (< 4 min)')
},
{
id: 'medium',
label: this.i18n('Medium (4-10 min)')
+ },
+ {
+ id: 'long',
+ label: this.i18n('Long (> 10 min)')
}
]
}
ngOnInit () {
- this.videoCategories = this.serverService.getVideoCategories()
- this.videoLicences = this.serverService.getVideoLicences()
- this.videoLanguages = this.serverService.getVideoLanguages()
+ this.serverConfig = this.serverService.getTmpConfig()
+ this.serverService.getConfig()
+ .subscribe(config => this.serverConfig = config)
+
+ this.serverService.getVideoCategories().subscribe(categories => this.videoCategories = categories)
+ this.serverService.getVideoLicences().subscribe(licences => this.videoLicences = licences)
+ this.serverService.getVideoLanguages().subscribe(languages => this.videoLanguages = languages)
this.loadFromDurationRange()
this.loadFromPublishedRange()
this.loadOriginallyPublishedAtYears()
}
- formUpdated () {
+ inputUpdated () {
this.updateModelFromDurationRange()
this.updateModelFromPublishedRange()
this.updateModelFromOriginallyPublishedAtYears()
+ }
+ formUpdated () {
+ this.inputUpdated()
this.filtered.emit(this.advancedSearch)
}
+ reset () {
+ this.advancedSearch.reset()
+ this.durationRange = undefined
+ this.publishedDateRange = undefined
+ this.originallyPublishedStartYear = undefined
+ this.originallyPublishedEndYear = undefined
+ this.inputUpdated()
+ }
+
+ resetField (fieldName: string, value?: any) {
+ this.advancedSearch[fieldName] = value
+ }
+
+ resetLocalField (fieldName: string, value?: any) {
+ this[fieldName] = value
+ this.inputUpdated()
+ }
+
+ resetOriginalPublicationYears () {
+ this.originallyPublishedStartYear = this.originallyPublishedEndYear = undefined
+ }
+
+ isSearchTargetEnabled () {
+ return this.serverConfig.search.searchIndex.enabled && this.serverConfig.search.searchIndex.disableLocalSearch !== true
+ }
+
private loadOriginallyPublishedAtYears () {
this.originallyPublishedStartYear = this.advancedSearch.originallyPublishedStartDate
? new Date(this.advancedSearch.originallyPublishedStartDate).getFullYear().toString()
this.advancedSearch.startDate = date.toISOString()
}
-
}