375 lines
9.5 KiB
TypeScript
Executable File
375 lines
9.5 KiB
TypeScript
Executable File
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();
|
|
}
|
|
}
|
|
}
|