From de0e6d0fce4b5d8f6114b658e021e8ee986d363a Mon Sep 17 00:00:00 2001 From: Drew Slobodnjak <60050885+drew08t@users.noreply.github.com> Date: Thu, 15 Aug 2024 13:15:49 -0700 Subject: [PATCH] PanelInspect: Handle field type frame for csv export (#91983) PanelInspect: Handle field type frame --- packages/grafana-data/src/utils/csv.test.ts | 20 ++++++++++++++++++++ packages/grafana-data/src/utils/csv.ts | 6 +++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/grafana-data/src/utils/csv.test.ts b/packages/grafana-data/src/utils/csv.test.ts index 52c36beb651..eb776cc1e6d 100644 --- a/packages/grafana-data/src/utils/csv.test.ts +++ b/packages/grafana-data/src/utils/csv.test.ts @@ -5,6 +5,7 @@ import { MutableDataFrame } from '../dataframe/MutableDataFrame'; import { getDataFrameRow, toDataFrameDTO } from '../dataframe/processDataFrame'; import { getDisplayProcessor } from '../field/displayProcessor'; import { createTheme } from '../themes/createTheme'; +import { FieldType } from '../types/dataFrame'; import { CSVHeaderStyle, readCSV, toCSV } from './csv'; @@ -159,4 +160,23 @@ describe('DataFrame to CSV', () => { 1589455688623,2020-05-14 11:28:08" `); }); + + it('should handle field type frame', () => { + const dataFrame = new MutableDataFrame({ + fields: [ + { name: 'Time', values: [1589455688623] }, + { + name: 'Value', + type: FieldType.frame, + values: [{ value: '1234' }], + }, + ], + }); + + const csv = toCSV([dataFrame]); + expect(csv).toMatchInlineSnapshot(` + ""Time","Value" + 1589455688623,1234" + `); + }); }); diff --git a/packages/grafana-data/src/utils/csv.ts b/packages/grafana-data/src/utils/csv.ts index 766c3680ee8..2b2c48fddd1 100644 --- a/packages/grafana-data/src/utils/csv.ts +++ b/packages/grafana-data/src/utils/csv.ts @@ -309,7 +309,11 @@ export function toCSV(data: DataFrame[], config?: CSVConfig): string { csv = csv + config.delimiter; } - const v = fields[j].values[i]; + let v = fields[j].values[i]; + // For FieldType frame, use value if it exists to prevent exporting [object object] + if (fields[j].type === FieldType.frame && fields[j].values[i].value) { + v = fields[j].values[i].value; + } if (v !== null) { csv = csv + writers[j](v); }