forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			46 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			46 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								import {SearchablePillsSelector} from "../Input/SearchableMappingsSelector";
							 | 
						||
| 
								 | 
							
								import {Store} from "../../Logic/UIEventSource";
							 | 
						||
| 
								 | 
							
								import BaseUIElement from "../BaseUIElement";
							 | 
						||
| 
								 | 
							
								import * as all_languages from "../../assets/language_translations.json";
							 | 
						||
| 
								 | 
							
								import {Translation} from "../i18n/Translation";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export class AllLanguagesSelector extends SearchablePillsSelector <string> {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    constructor(options?: {
							 | 
						||
| 
								 | 
							
								                    mode?: "select-many" | "select-one"
							 | 
						||
| 
								 | 
							
								                    currentCountry?: Store<string>,
							 | 
						||
| 
								 | 
							
								                    supportedLanguages?: Record<string, string> & { _meta?: { countries?: string[] } }
							 | 
						||
| 
								 | 
							
								                }) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        const possibleValues: {
							 | 
						||
| 
								 | 
							
								            show: BaseUIElement
							 | 
						||
| 
								 | 
							
								            value: string
							 | 
						||
| 
								 | 
							
								            mainTerm: Record<string, string>
							 | 
						||
| 
								 | 
							
								            searchTerms?: Record<string, string[]>,
							 | 
						||
| 
								 | 
							
								            hasPriority?: Store<boolean>
							 | 
						||
| 
								 | 
							
								        }[] = []
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        const langs = options?.supportedLanguages ?? all_languages["default"] ?? all_languages
							 | 
						||
| 
								 | 
							
								        for (const ln in langs) {
							 | 
						||
| 
								 | 
							
								            let languageInfo: Record<string, string> & { _meta?: { countries: string[] } } = all_languages[ln]
							 | 
						||
| 
								 | 
							
								            const countries = languageInfo._meta?.countries?.map(c => c.toLowerCase())
							 | 
						||
| 
								 | 
							
								            languageInfo = {...languageInfo}
							 | 
						||
| 
								 | 
							
								            delete languageInfo._meta
							 | 
						||
| 
								 | 
							
								            const term = {
							 | 
						||
| 
								 | 
							
								                show: new Translation(languageInfo),
							 | 
						||
| 
								 | 
							
								                value: ln,
							 | 
						||
| 
								 | 
							
								                mainTerm: languageInfo,
							 | 
						||
| 
								 | 
							
								                searchTerms: {"*": [ln]},
							 | 
						||
| 
								 | 
							
								                hasPriority: countries === undefined ? undefined : options?.currentCountry?.map(country => countries?.indexOf(country.toLowerCase()) >= 0)
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            possibleValues.push(term)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        super(possibleValues,
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                mode: options?.mode ?? 'select-many'
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |