1 import { Component, forwardRef, Input, OnInit } from '@angular/core'
2 import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'
3 import { ServerService } from '@app/core'
4 import { SelectOptionsItem } from '../../../../types/select-options-item.model'
5 import { ItemSelectCheckboxValue } from './select-checkbox.component'
8 selector: 'my-select-languages',
9 styleUrls: [ './select-shared.component.scss' ],
10 templateUrl: './select-languages.component.html',
13 provide: NG_VALUE_ACCESSOR,
14 useExisting: forwardRef(() => SelectLanguagesComponent),
19 export class SelectLanguagesComponent implements ControlValueAccessor, OnInit {
20 @Input() maxLanguages: number
22 selectedLanguages: ItemSelectCheckboxValue[]
23 availableLanguages: SelectOptionsItem[] = []
25 allLanguagesGroup = $localize`All languages`
27 // Fix a bug on ng-select when we update items after we selected items
29 private loaded = false
32 private server: ServerService
38 this.server.getVideoLanguages()
41 this.availableLanguages = [ { label: $localize`Unknown language`, id: '_unknown', group: this.allLanguagesGroup } ]
43 this.availableLanguages = this.availableLanguages
44 .concat(languages.map(l => ({ label: l.label, id: l.id, group: this.allLanguagesGroup })))
47 this.writeValue(this.toWrite)
52 propagateChange = (_: any) => { /* empty */ }
54 writeValue (languages: ItemSelectCheckboxValue[]) {
56 this.toWrite = languages
60 this.selectedLanguages = languages
63 registerOnChange (fn: (_: any) => void) {
64 this.propagateChange = fn
67 registerOnTouched () {
72 this.propagateChange(this.selectedLanguages)