| 
									
										
										
										
											2022-11-02 14:44:06 +01:00
										 |  |  | import { SearchablePillsSelector } from "../Input/SearchableMappingsSelector" | 
					
						
							|  |  |  | import { Store } from "../../Logic/UIEventSource" | 
					
						
							|  |  |  | import BaseUIElement from "../BaseUIElement" | 
					
						
							| 
									
										
										
										
											2023-02-08 01:14:21 +01:00
										 |  |  | import all_languages from "../../assets/language_translations.json" | 
					
						
							| 
									
										
										
										
											2022-11-02 14:44:06 +01:00
										 |  |  | import { Translation } from "../i18n/Translation" | 
					
						
							| 
									
										
										
										
											2022-10-29 03:03:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-02 14:44:06 +01:00
										 |  |  | export class AllLanguagesSelector extends SearchablePillsSelector<string> { | 
					
						
							| 
									
										
										
										
											2022-10-29 03:03:51 +02:00
										 |  |  |     constructor(options?: { | 
					
						
							| 
									
										
										
										
											2022-11-02 14:44:06 +01:00
										 |  |  |         mode?: "select-many" | "select-one" | 
					
						
							|  |  |  |         currentCountry?: Store<string> | 
					
						
							|  |  |  |         supportedLanguages?: Record<string, string> & { _meta?: { countries?: string[] } } | 
					
						
							|  |  |  |     }) { | 
					
						
							| 
									
										
										
										
											2022-10-29 03:03:51 +02:00
										 |  |  |         const possibleValues: { | 
					
						
							|  |  |  |             show: BaseUIElement | 
					
						
							|  |  |  |             value: string | 
					
						
							|  |  |  |             mainTerm: Record<string, string> | 
					
						
							| 
									
										
										
										
											2022-11-02 14:44:06 +01:00
										 |  |  |             searchTerms?: Record<string, string[]> | 
					
						
							| 
									
										
										
										
											2022-10-29 03:03:51 +02:00
										 |  |  |             hasPriority?: Store<boolean> | 
					
						
							|  |  |  |         }[] = [] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-08 01:14:21 +01:00
										 |  |  |         const langs = options?.supportedLanguages ?? all_languages | 
					
						
							| 
									
										
										
										
											2022-10-29 03:03:51 +02:00
										 |  |  |         for (const ln in langs) { | 
					
						
							| 
									
										
										
										
											2022-11-02 14:44:06 +01:00
										 |  |  |             let languageInfo: Record<string, string> & { _meta?: { countries: string[] } } = | 
					
						
							|  |  |  |                 all_languages[ln] | 
					
						
							|  |  |  |             const countries = languageInfo._meta?.countries?.map((c) => c.toLowerCase()) | 
					
						
							|  |  |  |             languageInfo = { ...languageInfo } | 
					
						
							| 
									
										
										
										
											2022-10-29 03:03:51 +02:00
										 |  |  |             delete languageInfo._meta | 
					
						
							|  |  |  |             const term = { | 
					
						
							|  |  |  |                 show: new Translation(languageInfo), | 
					
						
							|  |  |  |                 value: ln, | 
					
						
							|  |  |  |                 mainTerm: languageInfo, | 
					
						
							| 
									
										
										
										
											2022-11-02 14:44:06 +01:00
										 |  |  |                 searchTerms: { "*": [ln] }, | 
					
						
							|  |  |  |                 hasPriority: | 
					
						
							|  |  |  |                     countries === undefined | 
					
						
							|  |  |  |                         ? undefined | 
					
						
							|  |  |  |                         : options?.currentCountry?.map( | 
					
						
							|  |  |  |                               (country) => countries?.indexOf(country.toLowerCase()) >= 0 | 
					
						
							|  |  |  |                           ), | 
					
						
							| 
									
										
										
										
											2022-10-29 03:03:51 +02:00
										 |  |  |             } | 
					
						
							|  |  |  |             possibleValues.push(term) | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-11-02 14:44:06 +01:00
										 |  |  |         super(possibleValues, { | 
					
						
							|  |  |  |             mode: options?.mode ?? "select-many", | 
					
						
							|  |  |  |         }) | 
					
						
							| 
									
										
										
										
											2022-10-29 03:03:51 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | } |