|
|
|
@ -16,6 +16,8 @@ import { LinearScale } from 'chart.js';
|
|
|
|
|
import { ArcElement } from 'chart.js';
|
|
|
|
|
import { DoughnutController } from 'chart.js';
|
|
|
|
|
import { Chart } from 'chart.js';
|
|
|
|
|
import ChartDataLabels from 'chartjs-plugin-datalabels';
|
|
|
|
|
import { sum } from 'lodash';
|
|
|
|
|
import * as Color from 'color';
|
|
|
|
|
|
|
|
|
|
@Component({
|
|
|
|
@ -32,6 +34,7 @@ export class PortfolioProportionChartComponent
|
|
|
|
|
@Input() keys: string[];
|
|
|
|
|
@Input() locale: string;
|
|
|
|
|
@Input() maxItems?: number;
|
|
|
|
|
@Input() showLabels: boolean;
|
|
|
|
|
@Input() positions: {
|
|
|
|
|
[symbol: string]: Pick<PortfolioPosition, 'type'> & { value: number };
|
|
|
|
|
};
|
|
|
|
@ -48,7 +51,7 @@ export class PortfolioProportionChartComponent
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
public constructor() {
|
|
|
|
|
Chart.register(ArcElement, DoughnutController, LinearScale, Tooltip);
|
|
|
|
|
Chart.register(ArcElement, DoughnutController, LinearScale, Tooltip, ChartDataLabels);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ngOnInit() {}
|
|
|
|
@ -226,6 +229,8 @@ export class PortfolioProportionChartComponent
|
|
|
|
|
labels
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const showLabels = this.showLabels || false;
|
|
|
|
|
|
|
|
|
|
if (this.chartCanvas) {
|
|
|
|
|
if (this.chart) {
|
|
|
|
|
this.chart.data = data;
|
|
|
|
@ -234,6 +239,9 @@ export class PortfolioProportionChartComponent
|
|
|
|
|
this.chart = new Chart(this.chartCanvas.nativeElement, {
|
|
|
|
|
data,
|
|
|
|
|
options: {
|
|
|
|
|
layout: {
|
|
|
|
|
padding: 60,
|
|
|
|
|
},
|
|
|
|
|
cutout: '70%',
|
|
|
|
|
plugins: {
|
|
|
|
|
legend: { display: false },
|
|
|
|
@ -257,6 +265,27 @@ export class PortfolioProportionChartComponent
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
datalabels: {
|
|
|
|
|
display: function(ctx) {
|
|
|
|
|
const value = ctx.dataset.data[ctx.dataIndex];
|
|
|
|
|
return showLabels === true && ctx.datasetIndex === 0 && value > sum(ctx.dataset.data) / 10;
|
|
|
|
|
},
|
|
|
|
|
font: {
|
|
|
|
|
weight: 'bold',
|
|
|
|
|
},
|
|
|
|
|
color: this.getColorPalette()[0],
|
|
|
|
|
labels: {
|
|
|
|
|
index: {
|
|
|
|
|
align: 'end',
|
|
|
|
|
anchor: 'end',
|
|
|
|
|
font: {size: 18},
|
|
|
|
|
formatter: function(value, ctx) {
|
|
|
|
|
return ctx.chart.data.labels[ctx.dataIndex];
|
|
|
|
|
},
|
|
|
|
|
offset: 8,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|