forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import BaseUIElement from "../BaseUIElement"
 | |
| import { Chart, ChartConfiguration, ChartType, DefaultDataPoint, registerables } from "chart.js"
 | |
| Chart?.register(...(registerables ?? []))
 | |
| 
 | |
| export default class ChartJs<
 | |
|     TType extends ChartType = ChartType,
 | |
|     TData = DefaultDataPoint<TType>,
 | |
|     TLabel = unknown
 | |
| > extends BaseUIElement {
 | |
|     private readonly _config: ChartConfiguration<TType, TData, TLabel>
 | |
| 
 | |
|     constructor(config: ChartConfiguration<TType, TData, TLabel>) {
 | |
|         super()
 | |
|         this._config = config
 | |
|     }
 | |
| 
 | |
|     protected InnerConstructElement(): HTMLElement {
 | |
|         const canvas = document.createElement("canvas")
 | |
|         // 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
 | |
|                 )
 | |
|             }
 | |
|         }
 | |
|         new Chart(canvas, this._config)
 | |
|         return canvas
 | |
|     }
 | |
| }
 |