Feature/improve labels of allocation chart by symbol (#353)

* Improve labels

* Update changelog
pull/354/head
Thomas Kaul 3 years ago committed by GitHub
parent 9c9ca4ab1e
commit 9ed82ac82b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Unreleased
### Added
- Added labels to the allocation chart by symbol on desktop
## 1.48.0 - 07.09.2021 ## 1.48.0 - 07.09.2021
### Added ### Added

@ -17,7 +17,6 @@ import { ArcElement } from 'chart.js';
import { DoughnutController } from 'chart.js'; import { DoughnutController } from 'chart.js';
import { Chart } from 'chart.js'; import { Chart } from 'chart.js';
import ChartDataLabels from 'chartjs-plugin-datalabels'; import ChartDataLabels from 'chartjs-plugin-datalabels';
import { sum } from 'lodash';
import * as Color from 'color'; import * as Color from 'color';
@Component({ @Component({
@ -34,7 +33,7 @@ export class PortfolioProportionChartComponent
@Input() keys: string[]; @Input() keys: string[];
@Input() locale: string; @Input() locale: string;
@Input() maxItems?: number; @Input() maxItems?: number;
@Input() showLabels: boolean; @Input() showLabels = false;
@Input() positions: { @Input() positions: {
[symbol: string]: Pick<PortfolioPosition, 'type'> & { value: number }; [symbol: string]: Pick<PortfolioPosition, 'type'> & { value: number };
}; };
@ -51,7 +50,13 @@ export class PortfolioProportionChartComponent
}; };
public constructor() { public constructor() {
Chart.register(ArcElement, DoughnutController, LinearScale, Tooltip, ChartDataLabels); Chart.register(
ArcElement,
ChartDataLabels,
DoughnutController,
LinearScale,
Tooltip
);
} }
public ngOnInit() {} public ngOnInit() {}
@ -229,8 +234,6 @@ export class PortfolioProportionChartComponent
labels labels
}; };
const showLabels = this.showLabels || false;
if (this.chartCanvas) { if (this.chartCanvas) {
if (this.chart) { if (this.chart) {
this.chart.data = data; this.chart.data = data;
@ -239,11 +242,31 @@ export class PortfolioProportionChartComponent
this.chart = new Chart(this.chartCanvas.nativeElement, { this.chart = new Chart(this.chartCanvas.nativeElement, {
data, data,
options: { options: {
cutout: '70%',
layout: { layout: {
padding: 60, padding: this.showLabels === true ? 100 : 0
}, },
cutout: '70%',
plugins: { plugins: {
datalabels: {
color: (context) => {
return this.getColorPalette()[
context.dataIndex % this.getColorPalette().length
];
},
display: this.showLabels === true ? 'auto' : false,
labels: {
index: {
align: 'end',
anchor: 'end',
formatter: (value, context) => {
return value > 0
? context.chart.data.labels[context.dataIndex]
: '';
},
offset: 8
}
}
},
legend: { display: false }, legend: { display: false },
tooltip: { tooltip: {
callbacks: { callbacks: {
@ -265,27 +288,6 @@ 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,
}
}
} }
} }
}, },

@ -68,7 +68,6 @@
<gf-portfolio-proportion-chart <gf-portfolio-proportion-chart
[baseCurrency]="user?.settings?.baseCurrency" [baseCurrency]="user?.settings?.baseCurrency"
[isInPercent]="true" [isInPercent]="true"
[showLabels]="true"
[keys]="['currency']" [keys]="['currency']"
[locale]="user?.settings?.locale" [locale]="user?.settings?.locale"
[positions]="positions" [positions]="positions"
@ -92,10 +91,10 @@
class="mx-auto" class="mx-auto"
[baseCurrency]="user?.settings?.baseCurrency" [baseCurrency]="user?.settings?.baseCurrency"
[isInPercent]="false" [isInPercent]="false"
[showLabels]="true"
[keys]="['name']" [keys]="['name']"
[locale]="user?.settings?.locale" [locale]="user?.settings?.locale"
[positions]="symbols" [positions]="symbols"
[showLabels]="deviceType !== 'mobile'"
></gf-portfolio-proportion-chart> ></gf-portfolio-proportion-chart>
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>

@ -1,7 +1,7 @@
:host { :host {
.allocations-by-symbol { .allocations-by-symbol {
gf-portfolio-proportion-chart { gf-portfolio-proportion-chart {
max-width: 67vh; max-width: 80vh;
} }
} }

@ -81,7 +81,7 @@
"cache-manager-redis-store": "2.0.0", "cache-manager-redis-store": "2.0.0",
"chart.js": "3.5.0", "chart.js": "3.5.0",
"chartjs-adapter-date-fns": "2.0.0", "chartjs-adapter-date-fns": "2.0.0",
"chartjs-plugin-datalabels": "^2.0.0", "chartjs-plugin-datalabels": "2.0.0",
"cheerio": "1.0.0-rc.6", "cheerio": "1.0.0-rc.6",
"class-transformer": "0.3.2", "class-transformer": "0.3.2",
"class-validator": "0.13.1", "class-validator": "0.13.1",

@ -6112,7 +6112,7 @@ chartjs-adapter-date-fns@2.0.0:
resolved "https://registry.yarnpkg.com/chartjs-adapter-date-fns/-/chartjs-adapter-date-fns-2.0.0.tgz#5e53b2f660b993698f936f509c86dddf9ed44c6b" resolved "https://registry.yarnpkg.com/chartjs-adapter-date-fns/-/chartjs-adapter-date-fns-2.0.0.tgz#5e53b2f660b993698f936f509c86dddf9ed44c6b"
integrity sha512-rmZINGLe+9IiiEB0kb57vH3UugAtYw33anRiw5kS2Tu87agpetDDoouquycWc9pRsKtQo5j+vLsYHyr8etAvFw== integrity sha512-rmZINGLe+9IiiEB0kb57vH3UugAtYw33anRiw5kS2Tu87agpetDDoouquycWc9pRsKtQo5j+vLsYHyr8etAvFw==
chartjs-plugin-datalabels@^2.0.0: chartjs-plugin-datalabels@2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/chartjs-plugin-datalabels/-/chartjs-plugin-datalabels-2.0.0.tgz#caacefb26803d968785071eab012dde8746c5939" resolved "https://registry.yarnpkg.com/chartjs-plugin-datalabels/-/chartjs-plugin-datalabels-2.0.0.tgz#caacefb26803d968785071eab012dde8746c5939"
integrity sha512-WBsWihphzM0Y8fmQVm89+iy99mmgejmj5/jcsYqwxSioLRL/zqJ4Scv/eXq5ZqvG3TpojlGzZLeaOaSvDm7fwA== integrity sha512-WBsWihphzM0Y8fmQVm89+iy99mmgejmj5/jcsYqwxSioLRL/zqJ4Scv/eXq5ZqvG3TpojlGzZLeaOaSvDm7fwA==

Loading…
Cancel
Save