Browse Source

feat(lib): improve chart type safety

pull/6264/head
KenTandrian 2 days ago
parent
commit
a70e206d4e
  1. 21
      libs/ui/src/lib/fire-calculator/fire-calculator.component.ts
  2. 11
      libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts

21
libs/ui/src/lib/fire-calculator/fire-calculator.component.ts

@ -38,8 +38,11 @@ import {
BarElement, BarElement,
CategoryScale, CategoryScale,
Chart, Chart,
type ChartData,
type ChartDataset,
LinearScale, LinearScale,
Tooltip Tooltip,
type TooltipOptions
} from 'chart.js'; } from 'chart.js';
import 'chartjs-adapter-date-fns'; import 'chartjs-adapter-date-fns';
import Color from 'color'; import Color from 'color';
@ -320,7 +323,7 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy {
return label; return label;
} }
} }
} } as TooltipOptions<'bar'>
}, },
responsive: true, responsive: true,
scales: { scales: {
@ -353,7 +356,7 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy {
this.isLoading = false; this.isLoading = false;
} }
private getChartData() { private getChartData(): ChartData<'bar'> {
const currentYear = new Date().getFullYear(); const currentYear = new Date().getFullYear();
const labels: number[] = []; const labels: number[] = [];
@ -380,29 +383,29 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy {
labels.push(year); labels.push(year);
} }
const datasetDeposit = { const datasetDeposit: ChartDataset<'bar'> = {
backgroundColor: `rgb(${primaryColorRgb.r}, ${primaryColorRgb.g}, ${primaryColorRgb.b})`, backgroundColor: `rgb(${primaryColorRgb.r}, ${primaryColorRgb.g}, ${primaryColorRgb.b})`,
data: [] as number[], data: [],
label: $localize`Deposit` label: $localize`Deposit`
}; };
const datasetInterest = { const datasetInterest: ChartDataset<'bar'> = {
backgroundColor: Color( backgroundColor: Color(
`rgb(${primaryColorRgb.r}, ${primaryColorRgb.g}, ${primaryColorRgb.b})` `rgb(${primaryColorRgb.r}, ${primaryColorRgb.g}, ${primaryColorRgb.b})`
) )
.lighten(0.5) .lighten(0.5)
.hex(), .hex(),
data: [] as number[], data: [],
label: $localize`Interest` label: $localize`Interest`
}; };
const datasetSavings = { const datasetSavings: ChartDataset<'bar'> = {
backgroundColor: Color( backgroundColor: Color(
`rgb(${primaryColorRgb.r}, ${primaryColorRgb.g}, ${primaryColorRgb.b})` `rgb(${primaryColorRgb.r}, ${primaryColorRgb.g}, ${primaryColorRgb.b})`
) )
.lighten(0.25) .lighten(0.25)
.hex(), .hex(),
data: [] as number[], data: [],
label: $localize`Savings` label: $localize`Savings`
}; };

11
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts

@ -29,8 +29,10 @@ import {
type ChartDataset, type ChartDataset,
DoughnutController, DoughnutController,
LinearScale, LinearScale,
type Plugin,
Tooltip, Tooltip,
type TooltipItem type TooltipItem,
type TooltipOptions
} from 'chart.js'; } from 'chart.js';
import ChartDataLabels from 'chartjs-plugin-datalabels'; import ChartDataLabels from 'chartjs-plugin-datalabels';
import { isUUID } from 'class-validator'; import { isUUID } from 'class-validator';
@ -408,7 +410,7 @@ export class GfPortfolioProportionChartComponent
tooltip: this.getTooltipPluginConfiguration(data) tooltip: this.getTooltipPluginConfiguration(data)
} }
}, },
plugins: [ChartDataLabels], plugins: [ChartDataLabels as Plugin<'doughnut'>],
type: 'doughnut' type: 'doughnut'
}); });
} }
@ -434,13 +436,16 @@ export class GfPortfolioProportionChartComponent
]; ];
} }
private getTooltipPluginConfiguration(data: ChartData<'doughnut'>) { private getTooltipPluginConfiguration(
data: ChartData<'doughnut'>
): Partial<TooltipOptions<'doughnut'>> {
return { return {
...getTooltipOptions({ ...getTooltipOptions({
colorScheme: this.colorScheme, colorScheme: this.colorScheme,
currency: this.baseCurrency, currency: this.baseCurrency,
locale: this.locale locale: this.locale
}), }),
// @ts-ignore
callbacks: { callbacks: {
label: (context: TooltipItem<'doughnut'>) => { label: (context: TooltipItem<'doughnut'>) => {
const labelIndex = const labelIndex =

Loading…
Cancel
Save