forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			40 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			40 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | import BaseUIElement from "../BaseUIElement"; | ||
|  | import {UIEventSource} from "../../Logic/UIEventSource"; | ||
|  | import {VariableUiElement} from "./VariableUIElement"; | ||
|  | import Combine from "./Combine"; | ||
|  | import Locale from "../i18n/Locale"; | ||
|  | import {Utils} from "../../Utils"; | ||
|  | 
 | ||
|  | export default class FilteredCombine extends VariableUiElement { | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Only shows item matching the search | ||
|  |      * If predicate of an item is undefined, it will be filtered out as soon as a non-null or non-empty search term is given | ||
|  |      * @param entries | ||
|  |      * @param searchedValue | ||
|  |      * @param options | ||
|  |      */ | ||
|  |     constructor(entries: { | ||
|  |                     element: BaseUIElement | string, | ||
|  |                     predicate?: (s: string) => boolean | ||
|  |                 }[], | ||
|  |                 searchedValue: UIEventSource<string>, | ||
|  |                 options?: { | ||
|  |                     onEmpty?: BaseUIElement | string, | ||
|  |                     innerClasses: string | ||
|  |                 } | ||
|  |     ) { | ||
|  |         entries = Utils.NoNull(entries) | ||
|  |         super(searchedValue.map(searchTerm => { | ||
|  |             if(searchTerm === undefined || searchTerm === ""){ | ||
|  |                 return new Combine(entries.map(e => e.element)).SetClass(options?.innerClasses ?? "") | ||
|  |             } | ||
|  |             const kept = entries.filter(entry => entry?.predicate !== undefined && entry.predicate(searchTerm)) | ||
|  |             if (kept.length === 0) { | ||
|  |                 return options?.onEmpty | ||
|  |             } | ||
|  |             return new Combine(kept.map(entry => entry.element)).SetClass(options?.innerClasses ?? "") | ||
|  |         }, [Locale.language])) | ||
|  |     } | ||
|  | 
 | ||
|  | } |