forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			45 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			45 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'
 | |
|             });
 | |
|     }
 | |
| 
 | |
| }
 |