forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			35 lines
		
	
	
		
			No EOL
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			No EOL
		
	
	
		
			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;
 | 
						|
    }
 | 
						|
    
 | 
						|
} |