import { UIEventSource } from "../../Logic/UIEventSource" import { Utils } from "../../Utils" import BaseUIElement from "../BaseUIElement" import { VariableUiElement } from "../Base/VariableUIElement" import { SubstitutedTranslation } from "../SubstitutedTranslation" import TagRenderingConfig from "../../Models/ThemeConfig/TagRenderingConfig" import Combine from "../Base/Combine" import Img from "../Base/Img" import { SpecialVisualizationState } from "../SpecialVisualization" /*** * Displays the correct value for a known tagrendering */ export default class TagRenderingAnswer extends VariableUiElement { constructor( tagsSource: UIEventSource, configuration: TagRenderingConfig, state: SpecialVisualizationState, contentClasses: string = "", contentStyle: string = "", options?: { specialViz: Map } ) { if (configuration === undefined) { throw "Trying to generate a tagRenderingAnswer without configuration..." } UIEventSource if (tagsSource === undefined) { throw "Trying to generate a tagRenderingAnswer without tagSource..." } super( tagsSource .map((tags) => { if (tags === undefined) { return undefined } if (configuration.condition) { if (!configuration.condition.matchesProperties(tags)) { return undefined } } const trs = Utils.NoNull(configuration.GetRenderValues(tags)) if (trs.length === 0) { return undefined } const valuesToRender: BaseUIElement[] = trs.map((tr) => { const text = new SubstitutedTranslation( tr.then, tagsSource, state, options?.specialViz ) if (tr.icon === undefined) { return text } return new Combine([ new Img(tr.icon).SetClass("mapping-icon-" + (tr.iconClass ?? "small")), text, ]).SetClass("flex items-center") }) if (valuesToRender.length === 1) { return valuesToRender[0] } else if (valuesToRender.length > 1) { return new Combine(valuesToRender).SetClass("flex flex-col") } return undefined }) .map((element: BaseUIElement) => element?.SetClass(contentClasses)?.SetStyle(contentStyle) ) ) this.SetClass("flex items-center flex-row text-lg link-underline") this.SetStyle("word-wrap: anywhere;") } }