import { Component, OnDestroy, OnInit } from '@angular/core'; import { Subscription } from 'rxjs'; import { AppConfig } from 'src/app/api/appconfig'; import { ConfigService } from 'src/app/service/app.config.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; config: AppConfig; subscription: Subscription; constructor(public configService: ConfigService) { } ngOnInit() { this.config = this.configService.config; this.subscription = this.configService.configUpdate$.subscribe(config => { this.config = config; this.updateChartOptions(); }); 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: '#2f4860', borderColor: '#2f4860', tension: .4 }, { label: 'Second Dataset', data: [28, 48, 40, 19, 86, 27, 90], fill: false, backgroundColor: '#00bb7e', borderColor: '#00bb7e', tension: .4 } ] }; this.barData = { labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], datasets: [ { label: 'My First dataset', backgroundColor: '#2f4860', data: [65, 59, 80, 81, 56, 55, 40] }, { label: 'My Second dataset', backgroundColor: '#00bb7e', data: [28, 48, 40, 19, 86, 27, 90] } ] }; this.pieData = { labels: ['A', 'B', 'C'], datasets: [ { data: [300, 50, 100], backgroundColor: [ "#FF6384", "#36A2EB", "#FFCE56" ], hoverBackgroundColor: [ "#FF6384", "#36A2EB", "#FFCE56" ] } ] }; this.polarData = { datasets: [{ data: [ 11, 16, 7, 3, 14 ], backgroundColor: [ "#FF6384", "#4BC0C0", "#FFCE56", "#E7E9ED", "#36A2EB" ], label: 'My dataset' }], labels: [ "Red", "Green", "Yellow", "Grey", "Blue" ] }; this.radarData = { labels: ['Eating', 'Drinking', 'Sleeping', 'Designing', 'Coding', 'Cycling', 'Running'], datasets: [ { label: 'My First dataset', backgroundColor: 'rgba(179,181,198,0.2)', borderColor: 'rgba(179,181,198,1)', pointBackgroundColor: 'rgba(179,181,198,1)', pointBorderColor: '#fff', pointHoverBackgroundColor: '#fff', pointHoverBorderColor: 'rgba(179,181,198,1)', data: [65, 59, 90, 81, 56, 55, 40] }, { label: 'My Second dataset', backgroundColor: 'rgba(255,99,132,0.2)', borderColor: 'rgba(255,99,132,1)', pointBackgroundColor: 'rgba(255,99,132,1)', pointBorderColor: '#fff', pointHoverBackgroundColor: '#fff', pointHoverBorderColor: 'rgba(255,99,132,1)', data: [28, 48, 40, 19, 96, 27, 100] } ] }; this.updateChartOptions(); } updateChartOptions() { if (this.config.dark) this.applyDarkTheme(); else this.applyLightTheme(); } applyLightTheme() { this.lineOptions = { plugins: { legend: { labels: { color: '#495057' } } }, scales: { x: { ticks: { color: '#495057' }, grid: { color: '#ebedef', } }, y: { ticks: { color: '#495057' }, grid: { color: '#ebedef', } }, } }; this.barOptions = { plugins: { legend: { labels: { color: '#495057' } } }, scales: { x: { ticks: { color: '#495057' }, grid: { color: '#ebedef', } }, y: { ticks: { color: '#495057' }, grid: { color: '#ebedef', } }, } }; this.pieOptions = { plugins: { legend: { labels: { color: '#495057' } } } }; this.polarOptions = { plugins: { legend: { labels: { color: '#495057' } } }, scales: { r: { grid: { color: '#ebedef' } } } }; this.radarOptions = { plugins: { legend: { labels: { color: '#495057' } } }, scales: { r: { grid: { color: '#ebedef' } } } }; } applyDarkTheme() { this.lineOptions = { plugins: { legend: { labels: { color: '#ebedef' } } }, scales: { x: { ticks: { color: '#ebedef' }, grid: { color: 'rgba(160, 167, 181, .3)', } }, y: { ticks: { color: '#ebedef' }, grid: { color: 'rgba(160, 167, 181, .3)', } }, } }; this.barOptions = { plugins: { legend: { labels: { color: '#ebedef' } } }, scales: { x: { ticks: { color: '#ebedef' }, grid: { color: 'rgba(160, 167, 181, .3)', } }, y: { ticks: { color: '#ebedef' }, grid: { color: 'rgba(160, 167, 181, .3)', } }, } }; this.pieOptions = { plugins: { legend: { labels: { color: '#ebedef' } } } }; this.polarOptions = { plugins: { legend: { labels: { color: '#ebedef' } } }, scales: { r: { grid: { color: 'rgba(160, 167, 181, .3)' } } } }; this.radarOptions = { plugins: { legend: { labels: { color: '#ebedef' } } }, scales: { r: { grid: { color: 'rgba(160, 167, 181, .3)' } } } }; } ngOnDestroy() { if (this.subscription) { this.subscription.unsubscribe(); } } }