Skip to content

Commit 3379e6e

Browse files
fix(dashboards): Fix custom metrics not displaying with units correctly in widget viewer(#37807)
Fixes issue where columns with units weren't displaying properly in widget viewer.
1 parent e8395aa commit 3379e6e

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed

static/app/components/modals/widgetViewerModal/widgetViewerTableCell.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,13 +174,15 @@ export const renderGridBodyCell =
174174
if (!tableData || !tableData.meta) {
175175
return dataRow[column.key];
176176
}
177+
const unit = tableData.meta.units?.[column.key];
177178
cell = getFieldRenderer(
178179
columnKey,
179180
tableData.meta,
180181
isAlias
181182
)(dataRow, {
182183
organization,
183184
location,
185+
unit,
184186
});
185187

186188
const fieldName = getAggregateAlias(columnKey);

static/app/utils/fields/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ export enum FieldValueType {
107107
PERCENTAGE = 'percentage',
108108
STRING = 'string',
109109
NEVER = 'never',
110+
SIZE = 'size',
110111
}
111112

112113
export enum WebVital {

tests/js/spec/components/modals/widgetViewerModal.spec.tsx

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,6 +1130,71 @@ describe('Modals -> WidgetViewerModal', function () {
11301130
userEvent.click(screen.getByText('Open in Discover'));
11311131
expect(initialData.router.push).not.toHaveBeenCalled();
11321132
});
1133+
1134+
it('displays table data with units correctly', async function () {
1135+
const eventsMock = MockApiClient.addMockResponse({
1136+
url: '/organizations/org-slug/events/',
1137+
match: [MockApiClient.matchQuery({cursor: undefined})],
1138+
headers: {
1139+
Link:
1140+
'<http://localhost/api/0/organizations/org-slug/events/?cursor=0:0:1>; rel="previous"; results="false"; cursor="0:0:1",' +
1141+
'<http://localhost/api/0/organizations/org-slug/events/?cursor=0:10:0>; rel="next"; results="true"; cursor="0:10:0"',
1142+
},
1143+
body: {
1144+
data: [
1145+
{
1146+
'p75(measurements.custom.minute)': 94.87035966318831,
1147+
'p95(measurements.custom.ratio)': 0.9881980140455187,
1148+
'p75(measurements.custom.kibibyte)': 217.87035966318834,
1149+
},
1150+
],
1151+
meta: {
1152+
fields: {
1153+
'p75(measurements.custom.minute)': 'duration',
1154+
'p95(measurements.custom.ratio)': 'percentage',
1155+
'p75(measurements.custom.kibibyte)': 'size',
1156+
},
1157+
units: {
1158+
'p75(measurements.custom.minute)': 'minute',
1159+
'p95(measurements.custom.ratio)': null,
1160+
'p75(measurements.custom.kibibyte)': 'kibibyte',
1161+
},
1162+
isMetricsData: true,
1163+
tips: {},
1164+
},
1165+
},
1166+
});
1167+
await renderModal({
1168+
initialData: initialDataWithFlag,
1169+
widget: {
1170+
title: 'Custom Widget',
1171+
displayType: 'table',
1172+
queries: [
1173+
{
1174+
fields: [
1175+
'p75(measurements.custom.kibibyte)',
1176+
'p75(measurements.custom.minute)',
1177+
'p95(measurements.custom.ratio)',
1178+
],
1179+
aggregates: [
1180+
'p75(measurements.custom.kibibyte)',
1181+
'p75(measurements.custom.minute)',
1182+
'p95(measurements.custom.ratio)',
1183+
],
1184+
columns: [],
1185+
orderby: '-p75(measurements.custom.kibibyte)',
1186+
},
1187+
],
1188+
widgetType: 'discover',
1189+
},
1190+
});
1191+
await waitFor(() => {
1192+
expect(eventsMock).toHaveBeenCalled();
1193+
});
1194+
expect(screen.getByText('217.9 KiB')).toBeInTheDocument();
1195+
expect(screen.getByText('1.58hr')).toBeInTheDocument();
1196+
expect(screen.getByText('98.82%')).toBeInTheDocument();
1197+
});
11331198
});
11341199
});
11351200
});

0 commit comments

Comments
 (0)