forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			55 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
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 { FeatureSourceForLayer } from "../../Logic/FeatureSource/FeatureSource"
 | 
						|
import BaseUIElement from "../BaseUIElement"
 | 
						|
 | 
						|
export default class StatisticsForLayerPanel extends VariableUiElement {
 | 
						|
    constructor(elementsInview: FeatureSourceForLayer) {
 | 
						|
        const layer = elementsInview.layer.layerDef
 | 
						|
        super(
 | 
						|
            elementsInview.features.stabilized(1000).map(
 | 
						|
                (features) => {
 | 
						|
                    if (features === undefined) {
 | 
						|
                        return new Loading("Loading data")
 | 
						|
                    }
 | 
						|
                    if (features.length === 0) {
 | 
						|
                        return "No elements in view"
 | 
						|
                    }
 | 
						|
                    const els: BaseUIElement[] = []
 | 
						|
                    const featuresForLayer = features
 | 
						|
                    if (featuresForLayer.length === 0) {
 | 
						|
                        return
 | 
						|
                    }
 | 
						|
                    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]
 | 
						|
            )
 | 
						|
        )
 | 
						|
    }
 | 
						|
}
 |