import {VariableUiElement} from "../Base/VariableUIElement"; import Loading from "../Base/Loading"; import Title from "../Base/Title"; import TagRenderingChart from "./TagRenderingChart"; import Combine from "../Base/Combine"; import Locale from "../i18n/Locale"; import {UIEventSource} from "../../Logic/UIEventSource"; import {OsmFeature} from "../../Models/OsmFeature"; import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; export default class StatisticsPanel extends VariableUiElement { constructor(elementsInview: UIEventSource<{ element: OsmFeature, layer: LayerConfig }[]>, state: { layoutToUse: LayoutConfig }) { super(elementsInview.stabilized(1000).map(features => { if (features === undefined) { return new Loading("Loading data") } if (features.length === 0) { return "No elements in view" } const els = [] for (const layer of state.layoutToUse.layers) { if(layer.name === undefined){ continue } const featuresForLayer = features.filter(f => f.layer === layer).map(f => f.element) if(featuresForLayer.length === 0){ continue } els.push(new Title(layer.name.Clone(), 1).SetClass("mt-8")) const layerStats = [] for (const tagRendering of (layer?.tagRenderings ?? [])) { const chart = new TagRenderingChart(featuresForLayer, tagRendering, { chartclasses: "w-full", chartstyle: "height: 60rem", includeTitle: false }) const title = new Title(tagRendering.question?.Clone() ?? tagRendering.id, 4).SetClass("mt-8") if(!chart.HasClass("hidden")){ layerStats.push(new Combine([title, chart]).SetClass("flex flex-col w-full lg:w-1/3")) } } els.push(new Combine(layerStats).SetClass("flex flex-wrap")) } return new Combine(els) }, [Locale.language])); } }