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, 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])) } }