| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | 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" | 
					
						
							| 
									
										
										
										
											2022-07-25 18:55:15 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | export default class StatisticsPanel extends VariableUiElement { | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |     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")) | 
					
						
							| 
									
										
										
										
											2022-07-25 18:55:15 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                         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")) | 
					
						
							| 
									
										
										
										
											2022-07-25 18:55:15 +02:00
										 |  |  |                     } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                     return new Combine(els) | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |                 [Locale.language] | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2022-07-25 18:55:15 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | } |