| 
									
										
										
										
											2022-07-20 12:04:14 +02:00
										 |  |  | import BaseUIElement from "../BaseUIElement" | 
					
						
							|  |  |  | import { Chart, ChartConfiguration, ChartType, DefaultDataPoint, registerables } from "chart.js" | 
					
						
							| 
									
										
										
										
											2022-08-18 16:39:48 +02:00
										 |  |  | Chart?.register(...(registerables ?? [])) | 
					
						
							| 
									
										
										
										
											2022-07-20 12:04:14 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | export default class ChartJs< | 
					
						
							|  |  |  |     TType extends ChartType = ChartType, | 
					
						
							|  |  |  |     TData = DefaultDataPoint<TType>, | 
					
						
							|  |  |  |     TLabel = unknown | 
					
						
							|  |  |  | > extends BaseUIElement { | 
					
						
							|  |  |  |     private readonly _config: ChartConfiguration<TType, TData, TLabel> | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-20 12:04:14 +02:00
										 |  |  |     constructor(config: ChartConfiguration<TType, TData, TLabel>) { | 
					
						
							|  |  |  |         super() | 
					
						
							|  |  |  |         this._config = config | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-20 12:04:14 +02:00
										 |  |  |     protected InnerConstructElement(): HTMLElement { | 
					
						
							|  |  |  |         const canvas = document.createElement("canvas") | 
					
						
							| 
									
										
										
										
											2022-08-22 13:34:47 +02:00
										 |  |  |         // A bit exceptional: we apply the styles before giving them to 'chartJS'
 | 
					
						
							|  |  |  |         if (this.style !== undefined) { | 
					
						
							|  |  |  |             canvas.style.cssText = this.style | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (this.clss?.size > 0) { | 
					
						
							|  |  |  |             try { | 
					
						
							|  |  |  |                 canvas.classList.add(...Array.from(this.clss)) | 
					
						
							|  |  |  |             } catch (e) { | 
					
						
							|  |  |  |                 console.error( | 
					
						
							|  |  |  |                     "Invalid class name detected in:", | 
					
						
							|  |  |  |                     Array.from(this.clss).join(" "), | 
					
						
							|  |  |  |                     "\nErr msg is ", | 
					
						
							|  |  |  |                     e | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-07-20 12:04:14 +02:00
										 |  |  |         new Chart(canvas, this._config) | 
					
						
							|  |  |  |         return canvas | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |