| 
									
										
										
										
											2022-11-02 14:44:06 +01:00
										 |  |  | import { Store, UIEventSource } from "../../Logic/UIEventSource" | 
					
						
							|  |  |  | import { FixedUiElement } from "../Base/FixedUiElement" | 
					
						
							| 
									
										
										
										
											2022-10-28 04:33:05 +02:00
										 |  |  | // import Histogram from "../BigComponents/Histogram";
 | 
					
						
							|  |  |  | // import {SpecialVisualization} from "../SpecialVisualization";
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-02 14:44:06 +01:00
										 |  |  | export class HistogramViz { | 
					
						
							| 
									
										
										
										
											2022-10-28 04:33:05 +02:00
										 |  |  |     funcName = "histogram" | 
					
						
							|  |  |  |     docs = "Create a histogram for a list of given values, read from the properties." | 
					
						
							|  |  |  |     example = | 
					
						
							|  |  |  |         "`{histogram('some_key')}` with properties being `{some_key: ['a','b','a','c']} to create a histogram" | 
					
						
							|  |  |  |     args = [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             name: "key", | 
					
						
							|  |  |  |             doc: "The key to be read and to generate a histogram from", | 
					
						
							|  |  |  |             required: true, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             name: "title", | 
					
						
							|  |  |  |             doc: "This text will be placed above the texts (in the first column of the visulasition)", | 
					
						
							|  |  |  |             defaultValue: "", | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             name: "countHeader", | 
					
						
							|  |  |  |             doc: "This text will be placed above the bars", | 
					
						
							|  |  |  |             defaultValue: "", | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             name: "colors*", | 
					
						
							|  |  |  |             doc: "(Matches all resting arguments - optional) Matches a regex onto a color value, e.g. `3[a-zA-Z+-]*:#33cc33`", | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2022-11-02 14:44:06 +01:00
										 |  |  |     ] | 
					
						
							| 
									
										
										
										
											2022-10-28 04:33:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     constr(state, tagSource: UIEventSource<any>, args: string[]) { | 
					
						
							|  |  |  |         let assignColors = undefined | 
					
						
							|  |  |  |         if (args.length >= 3) { | 
					
						
							|  |  |  |             const colors = [...args] | 
					
						
							|  |  |  |             colors.splice(0, 3) | 
					
						
							|  |  |  |             const mapping = colors.map((c) => { | 
					
						
							|  |  |  |                 const splitted = c.split(":") | 
					
						
							|  |  |  |                 const value = splitted.pop() | 
					
						
							|  |  |  |                 const regex = splitted.join(":") | 
					
						
							| 
									
										
										
										
											2022-11-02 14:44:06 +01:00
										 |  |  |                 return { regex: "^" + regex + "$", color: value } | 
					
						
							| 
									
										
										
										
											2022-10-28 04:33:05 +02:00
										 |  |  |             }) | 
					
						
							|  |  |  |             assignColors = (key) => { | 
					
						
							|  |  |  |                 for (const kv of mapping) { | 
					
						
							|  |  |  |                     if (key.match(kv.regex) !== null) { | 
					
						
							|  |  |  |                         return kv.color | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 return undefined | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const listSource: Store<string[]> = tagSource.map((tags) => { | 
					
						
							|  |  |  |             try { | 
					
						
							|  |  |  |                 const value = tags[args[0]] | 
					
						
							|  |  |  |                 if (value === "" || value === undefined) { | 
					
						
							|  |  |  |                     return undefined | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 return JSON.parse(value) | 
					
						
							|  |  |  |             } catch (e) { | 
					
						
							| 
									
										
										
										
											2022-11-02 14:44:06 +01:00
										 |  |  |                 console.error("Could not load histogram: parsing  of the list failed: ", e) | 
					
						
							| 
									
										
										
										
											2022-10-28 04:33:05 +02:00
										 |  |  |                 return undefined | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |         return new FixedUiElement("HISTORGRAM") | 
					
						
							|  |  |  |         /* | 
					
						
							|  |  |  |         return new Histogram(listSource, args[1], args[2], { | 
					
						
							|  |  |  |             assignColor: assignColors, | 
					
						
							|  |  |  |         })*/ | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |