Skip to content

Commit a689ee1

Browse files
committed
refactor(chartjs.component): afterNextRender in case of SSR
1 parent 2f8e5b4 commit a689ee1

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

projects/coreui-angular-chartjs/src/lib/chartjs.component.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {
2+
afterNextRender,
23
AfterViewInit,
34
booleanAttribute,
45
ChangeDetectionStrategy,
@@ -34,6 +35,8 @@ let nextId = 0;
3435
exportAs: 'cChart',
3536
standalone: true,
3637
changeDetection: ChangeDetectionStrategy.OnPush
38+
// eslint-disable-next-line @angular-eslint/no-host-metadata-property
39+
// host: { ngSkipHydration: 'true' }
3740
})
3841
export class ChartjsComponent<TType extends ChartType = ChartType, TData = DefaultDataPoint<TType>, TLabel = unknown> implements AfterViewInit, OnDestroy, OnChanges {
3942

@@ -65,6 +68,7 @@ export class ChartjsComponent<TType extends ChartType = ChartType, TData = Defau
6568
@ViewChild('canvasElement') canvasElement!: ElementRef;
6669

6770
chart!: Chart<TType, TData, TLabel>;
71+
ctx!: CanvasRenderingContext2D;
6872

6973
@HostBinding('class')
7074
get hostClasses() {
@@ -78,7 +82,12 @@ export class ChartjsComponent<TType extends ChartType = ChartType, TData = Defau
7882
private ngZone: NgZone,
7983
private renderer: Renderer2,
8084
private changeDetectorRef: ChangeDetectorRef
81-
) {}
85+
) {
86+
afterNextRender(() => {
87+
this.ctx = this.canvasElement?.nativeElement?.getContext('2d');
88+
this.chartRender();
89+
});
90+
}
8291

8392
ngAfterViewInit(): void {
8493
this.chartRender();
@@ -115,17 +124,15 @@ export class ChartjsComponent<TType extends ChartType = ChartType, TData = Defau
115124
}
116125

117126
public chartRender() {
118-
if (!this.canvasElement) {
127+
if (!this.canvasElement?.nativeElement || !this.ctx) {
119128
return;
120129
}
121130

122-
const ctx: CanvasRenderingContext2D = this.canvasElement.nativeElement.getContext('2d');
123-
124131
this.ngZone.runOutsideAngular(() => {
125132
const config = this.chartConfig();
126133
if (config) {
127134
setTimeout(() => {
128-
this.chart = new Chart(ctx, config);
135+
this.chart = new Chart(this.ctx, config);
129136
this.renderer.setStyle(this.canvasElement.nativeElement, 'display', 'block');
130137
this.changeDetectorRef.markForCheck();
131138
this.chartRef.emit(this.chart);

0 commit comments

Comments
 (0)