From 9933195a8e572cee64618f8297219a99920e092f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D0=B0=D1=83=D1=84=20=D0=9B=D0=B0=D1=82=D1=8B=D0=BF?= =?UTF-8?q?=D0=BE=D0=B2?= Date: Wed, 25 Jun 2025 13:43:22 +0300 Subject: [PATCH] SUPPORT-9216: fix for parsing of local string formatted number value --- .../component/chart/ErvuChartV2.ts | 12 +++---- .../DigitDependentTooltipLabelProvider.ts | 32 ++++++++----------- .../chart/tooltip/TooltipCallbacksProvider.ts | 2 +- .../chart/tooltip/ValueBeforeDataTooltip.ts | 4 +-- 4 files changed, 22 insertions(+), 28 deletions(-) diff --git a/frontend/src/ts/ervu_business_metrics/component/chart/ErvuChartV2.ts b/frontend/src/ts/ervu_business_metrics/component/chart/ErvuChartV2.ts index c260193..405b3ed 100644 --- a/frontend/src/ts/ervu_business_metrics/component/chart/ErvuChartV2.ts +++ b/frontend/src/ts/ervu_business_metrics/component/chart/ErvuChartV2.ts @@ -262,19 +262,19 @@ export class ErvuChartV2 extends Control implements Filterable { } }; - const tooltipLabelCallback: (label: string, value) => string + const tooltipLabelCallback: (label: string, formattedValue: string, raw?: unknown) => string = this.dataTooltip ? this.dataTooltip.provideTooltipLabelCallback() - : ((label: string, value) => label + ' : ' + value); + : ((label: string, formattedValue: string) => label + ' : ' + formattedValue); chartOptions.plugins.tooltip.callbacks = { label: function (tooltipItem) { const dataset = tooltipItem.dataset; let label: string; - let value; + let raw: unknown; if (dataset.type == 'bar' || dataset.type == 'line') { label = dataset.label; - value = dataset.data[tooltipItem.dataIndex].x.toLocaleString(); + raw = tooltipItem.raw.x; } else { const dataLabels = tooltipItem.chart.config.data.dataLabels; @@ -282,9 +282,9 @@ export class ErvuChartV2 extends Control implements Filterable { label = dataLabels[tooltipItem.datasetIndex][tooltipItem.dataIndex]; } label = label ? label : tooltipItem.label; - value = dataset.data[tooltipItem.dataIndex].toLocaleString(); + raw = tooltipItem.raw; } - return tooltipLabelCallback(label, value); + return tooltipLabelCallback(label, tooltipItem.formattedValue, raw); } }; diff --git a/frontend/src/ts/ervu_business_metrics/component/chart/tooltip/DigitDependentTooltipLabelProvider.ts b/frontend/src/ts/ervu_business_metrics/component/chart/tooltip/DigitDependentTooltipLabelProvider.ts index 3ce5d75..031d3ba 100644 --- a/frontend/src/ts/ervu_business_metrics/component/chart/tooltip/DigitDependentTooltipLabelProvider.ts +++ b/frontend/src/ts/ervu_business_metrics/component/chart/tooltip/DigitDependentTooltipLabelProvider.ts @@ -4,35 +4,29 @@ import {TooltipCallbacksProvider} from "./TooltipCallbacksProvider"; export class DigitDependentTooltipLabelProvider implements TooltipCallbacksProvider { public templates: DigitDependentLabelTemplate[] = []; - provideTooltipLabelCallback(): (label: string, value: string) => string { + provideTooltipLabelCallback(): (label: string, formattedValue: string, raw: number) => string { const templates: DigitDependentLabelTemplate[] = this.templates; const excludedNumbers: number[] = [11, 12, 13, 14]; - return function (label: string, value: string) { - if (value) { + return function (label: string, formattedValue: string, raw: number) { + if (raw) { const template: DigitDependentLabelTemplate = templates .find(element => element.initialLabel === label); if (template) { - const number: number = Number.parseInt(value); - const lastDigit = Math.abs(number) % 10; - const lastTwoDigits = Math.abs(number) % 100; + const lastDigit = Math.abs(raw) % 10; + const lastTwoDigits = Math.abs(raw) % 100; - return value + " " + (excludedNumbers.includes(lastTwoDigits) - ? template.otherDigitLabel - : lastDigit == 1 - ? template.oneDigitLabel - : lastDigit > 1 && lastDigit < 5 - ? template.fromTwoToFourDigitLabel - : template.otherDigitLabel); - } - else { - return value + " " + label; + return formattedValue + " " + (excludedNumbers.includes(lastTwoDigits) + ? template.otherDigitLabel + : lastDigit == 1 + ? template.oneDigitLabel + : lastDigit > 1 && lastDigit < 5 + ? template.fromTwoToFourDigitLabel + : template.otherDigitLabel); } } - else { - return label; - } + return formattedValue ? formattedValue + " " + label : label; } } } diff --git a/frontend/src/ts/ervu_business_metrics/component/chart/tooltip/TooltipCallbacksProvider.ts b/frontend/src/ts/ervu_business_metrics/component/chart/tooltip/TooltipCallbacksProvider.ts index cd13192..80707fd 100644 --- a/frontend/src/ts/ervu_business_metrics/component/chart/tooltip/TooltipCallbacksProvider.ts +++ b/frontend/src/ts/ervu_business_metrics/component/chart/tooltip/TooltipCallbacksProvider.ts @@ -1,3 +1,3 @@ export interface TooltipCallbacksProvider { - provideTooltipLabelCallback(): (label: string, value: string) => string; + provideTooltipLabelCallback(): (label: string, formattedValue: string, raw?: unknown) => string; } diff --git a/frontend/src/ts/ervu_business_metrics/component/chart/tooltip/ValueBeforeDataTooltip.ts b/frontend/src/ts/ervu_business_metrics/component/chart/tooltip/ValueBeforeDataTooltip.ts index 91732b1..d0b9579 100644 --- a/frontend/src/ts/ervu_business_metrics/component/chart/tooltip/ValueBeforeDataTooltip.ts +++ b/frontend/src/ts/ervu_business_metrics/component/chart/tooltip/ValueBeforeDataTooltip.ts @@ -1,7 +1,7 @@ import {TooltipCallbacksProvider} from "./TooltipCallbacksProvider"; export class ValueBeforeDataTooltip implements TooltipCallbacksProvider { - provideTooltipLabelCallback(): (label: string, value: string) => string { - return (label: string, value: string) => value + " " + label; + provideTooltipLabelCallback(): (label: string, formattedValue: string) => string { + return (label: string, formattedValue: string) => formattedValue + " " + label; } }