web/elements: add refresh support to chart
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
parent
9654285535
commit
4b52697cfe
|
@ -6,6 +6,7 @@ import { ArcElement, BarElement } from "chart.js";
|
||||||
import { TimeScale, LinearScale } from "chart.js";
|
import { TimeScale, LinearScale } from "chart.js";
|
||||||
import "chartjs-adapter-moment";
|
import "chartjs-adapter-moment";
|
||||||
import { FONT_COLOUR_DARK_MODE, FONT_COLOUR_LIGHT_MODE } from "../../pages/flows/FlowDiagram";
|
import { FONT_COLOUR_DARK_MODE, FONT_COLOUR_LIGHT_MODE } from "../../pages/flows/FlowDiagram";
|
||||||
|
import {EVENT_REFRESH} from "../../constants";
|
||||||
|
|
||||||
Chart.register(Legend, Tooltip);
|
Chart.register(Legend, Tooltip);
|
||||||
Chart.register(LineController, BarController, DoughnutController);
|
Chart.register(LineController, BarController, DoughnutController);
|
||||||
|
@ -43,6 +44,13 @@ export abstract class AKChart<T> extends LitElement {
|
||||||
this.chart.resize();
|
this.chart.resize();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
window.addEventListener(EVENT_REFRESH, () => {
|
||||||
|
this.apiRequest().then((r: T) => {
|
||||||
|
if (!this.chart) return;
|
||||||
|
this.chart.data = this.getChartData(r);
|
||||||
|
this.chart.update();
|
||||||
|
});
|
||||||
|
});
|
||||||
const matcher = window.matchMedia("(prefers-color-scheme: light)");
|
const matcher = window.matchMedia("(prefers-color-scheme: light)");
|
||||||
const handler = (ev?: MediaQueryListEvent) => {
|
const handler = (ev?: MediaQueryListEvent) => {
|
||||||
if (ev?.matches || matcher.matches) {
|
if (ev?.matches || matcher.matches) {
|
||||||
|
@ -56,6 +64,22 @@ export abstract class AKChart<T> extends LitElement {
|
||||||
handler();
|
handler();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
firstUpdated(): void {
|
||||||
|
this.apiRequest().then((r) => {
|
||||||
|
const canvas = <HTMLCanvasElement>this.shadowRoot?.querySelector("canvas");
|
||||||
|
if (!canvas) {
|
||||||
|
console.warn("Failed to get canvas element");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const ctx = canvas.getContext("2d");
|
||||||
|
if (!ctx) {
|
||||||
|
console.warn("failed to get 2d context");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
this.chart = this.configureChart(r, ctx);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
getChartType(): string {
|
getChartType(): string {
|
||||||
return "bar";
|
return "bar";
|
||||||
}
|
}
|
||||||
|
@ -129,23 +153,6 @@ export abstract class AKChart<T> extends LitElement {
|
||||||
return new Chart(ctx, config as ChartConfiguration);
|
return new Chart(ctx, config as ChartConfiguration);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
firstUpdated(): void {
|
|
||||||
this.apiRequest().then((r) => {
|
|
||||||
const canvas = <HTMLCanvasElement>this.shadowRoot?.querySelector("canvas");
|
|
||||||
if (!canvas) {
|
|
||||||
console.warn("Failed to get canvas element");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
const ctx = canvas.getContext("2d");
|
|
||||||
if (!ctx) {
|
|
||||||
console.warn("failed to get 2d context");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
this.chart = this.configureChart(r, ctx);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
render(): TemplateResult {
|
render(): TemplateResult {
|
||||||
return html`
|
return html`
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
|
Reference in New Issue