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 & { groupOrder: number })[] = []
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 = [ {
42 label: $localize`Unknown language`,
44 group: this.allLanguagesGroup,
48 this.availableLanguages = this.availableLanguages
49 .concat(languages.map(l => {
50 if (l.id === 'zxx') return { label: l.label, id: l.id, group: $localize`Other`, groupOrder: 0 }
51 return { label: l.label, id: l.id, group: this.allLanguagesGroup, groupOrder: 1 }
54 this.availableLanguages.sort((a, b) => a.groupOrder - b.groupOrder)
57 this.writeValue(this.toWrite)
62 propagateChange = (_: any) => { /* empty */ }
64 writeValue (languages: ItemSelectCheckboxValue[]) {
66 this.toWrite = languages
70 this.selectedLanguages = languages
73 registerOnChange (fn: (_: any) => void) {
74 this.propagateChange = fn
77 registerOnTouched () {
82 this.propagateChange(this.selectedLanguages)