import { Component, OnDestroy, OnInit } from '@angular/core'; import { Subscription } from 'rxjs'; import { LayoutService } from 'src/app/layout/service/app.layout.service'; @Component({ templateUrl: './charts.component.html' }) export class ChartsComponent implements OnInit, OnDestroy { lineData: any; barData: any; pieData: any; polarData: any; radarData: any; lineOptions: any; barOptions: any; pieOptions: any; polarOptions: any; radarOptions: any; subscription!: Subscription; constructor(public layoutService: LayoutService) { this.subscription = this.layoutService.configUpdate$.subscribe(() => { this.initCharts(); }); } ngOnInit() { this.initCharts(); } initCharts() { const documentStyle = getComputedStyle(document.documentElement); const textColor = documentStyle.getPropertyValue('--text-color'); const textColorSecondary = documentStyle.getPropertyValue('--text-color-secondary'); const surfaceBorder = documentStyle.getPropertyValue('--surface-border'); this.barData = { labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], datasets: [ { label: 'My First dataset', backgroundColor: documentStyle.getPropertyValue('--primary-500'), borderColor: documentStyle.getPropertyValue('--primary-700'), data: [65, 59, 80, 81, 56, 55, 40] }, { label: 'My Second dataset', backgroundColor: documentStyle.getPropertyValue('--bluegray-500'), borderColor: documentStyle.getPropertyValue('--bluegray-500'), data: [28, 48, 40, 19, 86, 27, 90] } ] }; this.barOptions = { plugins: { legend: { labels: { color: textColor } } }, scales: { x: { ticks: { color: textColorSecondary, font: { weight: 500 } }, grid: { color:[surfaceBorder], 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('--yellow-500'), documentStyle.getPropertyValue('--blue-500'), documentStyle.getPropertyValue('--pink-500') ], hoverBackgroundColor: [ documentStyle.getPropertyValue('--yellow-400'), documentStyle.getPropertyValue('--blue-400'), documentStyle.getPropertyValue('--red-400') ], borderColor: [surfaceBorder] }] }; 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('--primary-700'), borderColor: documentStyle.getPropertyValue('--primary-700'), tension: .4 }, { label: 'Second Dataset', data: [28, 48, 40, 19, 86, 27, 90], fill: false, backgroundColor: documentStyle.getPropertyValue('--bluegray-600'), borderColor: documentStyle.getPropertyValue('--bluegray-600'), tension: .4 } ] }; this.lineOptions = { plugins: { legend: { labels: { color: 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('--red-500'), documentStyle.getPropertyValue('--blue-500'), documentStyle.getPropertyValue('--yellow-500'), documentStyle.getPropertyValue('--green-500') ], label: 'My dataset' }], labels: [ 'Red', 'Blue', 'Yellow', 'Green' ] }; 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('--red-500'), pointBackgroundColor: documentStyle.getPropertyValue('--red-500'), pointBorderColor: documentStyle.getPropertyValue('--red-500'), pointHoverBackgroundColor: textColor, pointHoverBorderColor: documentStyle.getPropertyValue('--red-500'), data: [65, 59, 90, 81, 56, 55, 40] }, { label: 'My Second dataset', borderColor: documentStyle.getPropertyValue('--bluegray-500'), pointBackgroundColor: documentStyle.getPropertyValue('--bluegray-500'), pointBorderColor: documentStyle.getPropertyValue('--bluegray-500'), pointHoverBackgroundColor: textColor, pointHoverBorderColor: documentStyle.getPropertyValue('--bluegray-500'), data: [28, 48, 40, 19, 96, 27, 100] } ] }; this.radarOptions = { plugins: { legend: { labels: { color: textColor } } }, scales: { r: { pointLabels: { color: textColor }, grid: { color:[surfaceBorder], drawBorder: false } } } }; } ngOnDestroy() { if (this.subscription) { this.subscription.unsubscribe(); } } }