Skip to content

Commit 018fdaa

Browse files
DominikB2014claude
andauthored
fix(chartcuterie): Format y-axis labels in Explore unfurl charts (#112719)
Explore unfurl charts were showing raw numbers on the y-axis (e.g. `300,000`) instead of abbreviated values (`300K`), and duration fields were missing units (showing `5` instead of `5ms`). Adds a y-axis formatter using `formatYAxisValue` — the same function the Explore page uses — which reads `valueType` and `valueUnit` from the timeseries metadata to format labels appropriately for integers, durations, sizes, rates, and percentages. Fixes DAIN-1496 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent a290948 commit 018fdaa

1 file changed

Lines changed: 25 additions & 0 deletions

File tree

static/app/chartcuterie/explore.tsx

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,31 @@ import type {Theme} from '@emotion/react';
22
import type {BarSeriesOption, LineSeriesOption} from 'echarts';
33

44
import {XAxis} from 'sentry/components/charts/components/xAxis';
5+
import {YAxis} from 'sentry/components/charts/components/yAxis';
56
import {AreaSeries} from 'sentry/components/charts/series/areaSeries';
67
import {BarSeries} from 'sentry/components/charts/series/barSeries';
78
import {LineSeries} from 'sentry/components/charts/series/lineSeries';
89
import {timeSeriesItemToEChartsDataPoint} from 'sentry/utils/timeSeries/timeSeriesItemToEChartsDataPoint';
910
import {DisplayType} from 'sentry/views/dashboards/types';
1011
import type {TimeSeries} from 'sentry/views/dashboards/widgets/common/types';
1112
import {formatTimeSeriesLabel} from 'sentry/views/dashboards/widgets/timeSeriesWidget/formatters/formatTimeSeriesLabel';
13+
import {formatYAxisValue} from 'sentry/views/dashboards/widgets/timeSeriesWidget/formatters/formatYAxisValue';
1214

1315
import {DEFAULT_FONT_FAMILY, makeSlackChartDefaults, slackChartSize} from './slack';
1416
import type {RenderDescriptor} from './types';
1517
import {ChartType} from './types';
1618

19+
/**
20+
* Builds a y-axis axisLabel formatter from the first timeseries metadata.
21+
*/
22+
function makeYAxisFormatter(timeSeries: TimeSeries[]) {
23+
const firstSeries = timeSeries[0];
24+
const valueType = firstSeries?.meta?.valueType ?? 'number';
25+
const valueUnit = firstSeries?.meta?.valueUnit;
26+
27+
return (value: number) => formatYAxisValue(value, valueType, valueUnit ?? undefined);
28+
}
29+
1730
type ExploreChartData = {
1831
timeSeries: TimeSeries[];
1932
type?: DisplayType;
@@ -67,6 +80,16 @@ export const makeExploreCharts = (theme: Theme): Array<RenderDescriptor<ChartTyp
6780
};
6881
}
6982

83+
const exploreYAxis = YAxis({
84+
theme,
85+
splitNumber: 3,
86+
axisLabel: {
87+
fontSize: 11,
88+
fontFamily: DEFAULT_FONT_FAMILY,
89+
formatter: makeYAxisFormatter(timeSeries),
90+
},
91+
});
92+
7093
const hasGroups = timeSeries.some(ts => ts.groupBy && ts.groupBy.length > 0);
7194

7295
if (!hasGroups) {
@@ -81,6 +104,7 @@ export const makeExploreCharts = (theme: Theme): Array<RenderDescriptor<ChartTyp
81104

82105
return {
83106
...slackChartDefaults,
107+
yAxis: exploreYAxis,
84108
xAxis: exploreXAxis,
85109
useUTC: true,
86110
color,
@@ -110,6 +134,7 @@ export const makeExploreCharts = (theme: Theme): Array<RenderDescriptor<ChartTyp
110134

111135
return {
112136
...slackChartDefaults,
137+
yAxis: exploreYAxis,
113138
xAxis: exploreXAxis,
114139
useUTC: true,
115140
color,

0 commit comments

Comments
 (0)