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
|
|
}
|
|
}
|