import { Component } from '@angular/core'; import { ChartModule } from 'primeng/chart'; import { CommonModule } from '@angular/common'; import { debounceTime, Subscription } from 'rxjs'; import { LayoutService } from '@/src/service/layout/layout.service'; import { FluidModule } from 'primeng/fluid'; @Component({ standalone:true, imports: [ CommonModule, ChartModule, FluidModule ], template: `
Linear
Bar
Pie
Doughnut
Polar Area
Radar
`, }) export class ChartDoc { lineData: any; barData: any; pieData: any; polarData: any; radarData: any; lineOptions: any; barOptions: any; pieOptions: any; polarOptions: any; radarOptions: any; subscription: Subscription; constructor(private layoutService: LayoutService) { this.subscription = this.layoutService.configUpdate$ .pipe(debounceTime(25)) .subscribe(() => { this.initCharts(); }); } ngOnInit() { this.initCharts(); } initCharts() { const documentStyle = getComputedStyle(document.documentElement); const textColor = documentStyle.getPropertyValue('--p-text-color'); const textColorSecondary = documentStyle.getPropertyValue('--p-text-muted-color'); const surfaceBorder = documentStyle.getPropertyValue('--p-content-border-color'); this.barData = { labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], datasets: [ { label: 'My First dataset', backgroundColor: documentStyle.getPropertyValue('--p-primary-500'), borderColor: documentStyle.getPropertyValue('--p-primary-500'), data: [65, 59, 80, 81, 56, 55, 40] }, { label: 'My Second dataset', backgroundColor: documentStyle.getPropertyValue('--p-primary-200'), borderColor: documentStyle.getPropertyValue('--p-primary-200'), data: [28, 48, 40, 19, 86, 27, 90] } ] }; this.barOptions = { plugins: { legend: { labels: { fontColor: textColor } } }, scales: { x: { ticks: { color: textColorSecondary, font: { weight: 500 } }, grid: { display: false, drawBorder: false } }, y: { ticks: { color: textColorSecondary }, grid: { color: surfaceBorder, drawBorder: false } }, } }; this.pieData = { labels: ['A', 'B', 'C'], datasets: [ { data: [540, 325, 702], backgroundColor: [ documentStyle.getPropertyValue('--p-indigo-500'), documentStyle.getPropertyValue('--p-purple-500'), documentStyle.getPropertyValue('--p-teal-500') ], hoverBackgroundColor: [ documentStyle.getPropertyValue('--p-indigo-400'), documentStyle.getPropertyValue('--p-purple-400'), documentStyle.getPropertyValue('--p-teal-400') ] }] }; this.pieOptions = { plugins: { legend: { labels: { usePointStyle: true, color: textColor } } } }; this.lineData = { labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], datasets: [ { label: 'First Dataset', data: [65, 59, 80, 81, 56, 55, 40], fill: false, backgroundColor: documentStyle.getPropertyValue('--p-primary-500'), borderColor: documentStyle.getPropertyValue('--p-primary-500'), tension: .4 }, { label: 'Second Dataset', data: [28, 48, 40, 19, 86, 27, 90], fill: false, backgroundColor: documentStyle.getPropertyValue('--p-primary-200'), borderColor: documentStyle.getPropertyValue('--p-primary-200'), tension: .4 } ] }; this.lineOptions = { plugins: { legend: { labels: { fontColor: textColor } } }, scales: { x: { ticks: { color: textColorSecondary }, grid: { color: surfaceBorder, drawBorder: false } }, y: { ticks: { color: textColorSecondary }, grid: { color: surfaceBorder, drawBorder: false } }, } }; this.polarData = { datasets: [{ data: [ 11, 16, 7, 3 ], backgroundColor: [ documentStyle.getPropertyValue('--p-indigo-500'), documentStyle.getPropertyValue('--p-purple-500'), documentStyle.getPropertyValue('--p-teal-500'), documentStyle.getPropertyValue('--p-orange-500') ], label: 'My dataset' }], labels: [ 'Indigo', 'Purple', 'Teal', 'Orange' ] }; this.polarOptions = { plugins: { legend: { labels: { color: textColor } } }, scales: { r: { grid: { color: surfaceBorder } } } }; this.radarData = { labels: ['Eating', 'Drinking', 'Sleeping', 'Designing', 'Coding', 'Cycling', 'Running'], datasets: [ { label: 'My First dataset', borderColor: documentStyle.getPropertyValue('--p-indigo-400'), pointBackgroundColor: documentStyle.getPropertyValue('--p-indigo-400'), pointBorderColor: documentStyle.getPropertyValue('--p-indigo-400'), pointHoverBackgroundColor: textColor, pointHoverBorderColor: documentStyle.getPropertyValue('--p-indigo-400'), data: [65, 59, 90, 81, 56, 55, 40] }, { label: 'My Second dataset', borderColor: documentStyle.getPropertyValue('--p-purple-400'), pointBackgroundColor: documentStyle.getPropertyValue('--p-purple-400'), pointBorderColor: documentStyle.getPropertyValue('--p-purple-400'), pointHoverBackgroundColor: textColor, pointHoverBorderColor: documentStyle.getPropertyValue('--p-purple-400'), data: [28, 48, 40, 19, 96, 27, 100] } ] }; this.radarOptions = { plugins: { legend: { labels: { fontColor: textColor } } }, scales: { r: { grid: { color: textColorSecondary } } } }; } ngOnDestroy() { if (this.subscription) { this.subscription.unsubscribe(); } } }