forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			40 lines
		
	
	
		
			No EOL
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			No EOL
		
	
	
		
			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]))
 | |
|     }
 | |
| 
 | |
| } |