From bd7285a9e39ae797eee12218f0ec0a95e0855e51 Mon Sep 17 00:00:00 2001 From: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> Date: Wed, 24 Mar 2021 19:01:23 +0100 Subject: [PATCH] Explore: Show all dataFrames in data tab in Inspector (#32161) * Add option to show/download all data * Add test * Address feedback --- .../inspector/InspectDataTab.test.tsx | 65 +++++++++++++++++++ .../app/features/inspector/InspectDataTab.tsx | 21 ++---- 2 files changed, 72 insertions(+), 14 deletions(-) create mode 100644 public/app/features/inspector/InspectDataTab.test.tsx diff --git a/public/app/features/inspector/InspectDataTab.test.tsx b/public/app/features/inspector/InspectDataTab.test.tsx new file mode 100644 index 00000000000..8e33e9742de --- /dev/null +++ b/public/app/features/inspector/InspectDataTab.test.tsx @@ -0,0 +1,65 @@ +import React, { ComponentProps } from 'react'; +import { FieldType } from '@grafana/data'; +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { InspectDataTab } from './InspectDataTab'; + +const createProps = (propsOverride?: Partial>) => { + const defaultProps = { + isLoading: false, + options: { + withTransforms: false, + withFieldConfig: false, + }, + data: [ + { + name: 'First data frame', + fields: [ + { name: 'time', type: FieldType.time, values: [100, 200, 300] }, + { name: 'name', type: FieldType.string, values: ['uniqueA', 'b', 'c'] }, + { name: 'value', type: FieldType.number, values: [1, 2, 3] }, + ], + length: 3, + }, + { + name: 'Second data frame', + fields: [ + { name: 'time', type: FieldType.time, values: [400, 500, 600] }, + { name: 'name', type: FieldType.string, values: ['d', 'e', 'g'] }, + { name: 'value', type: FieldType.number, values: [4, 5, 6] }, + ], + length: 3, + }, + ], + }; + + return Object.assign(defaultProps, propsOverride) as ComponentProps; +}; + +describe('InspectDataTab', () => { + describe('when panel is not passed as prop (Explore)', () => { + it('should render InspectDataTab', () => { + render(); + expect(screen.getByLabelText(/Panel inspector Data content/i)).toBeInTheDocument(); + }); + it('should render Data Option row', () => { + render(); + expect(screen.getByText(/Data options/i)).toBeInTheDocument(); + }); + it('should show available options', () => { + render(); + const dataOptions = screen.getByText(/Data options/i); + userEvent.click(dataOptions); + expect(screen.getByText(/Show data frame/i)).toBeInTheDocument(); + expect(screen.getByText(/Download for Excel/i)).toBeInTheDocument(); + }); + it('should show available dataFrame options', () => { + render(); + const dataOptions = screen.getByText(/Data options/i); + userEvent.click(dataOptions); + const dataFrameInput = screen.getByRole('textbox', { name: /Select dataframe/i }); + userEvent.click(dataFrameInput); + expect(screen.getByText(/Second data frame/i)).toBeInTheDocument(); + }); + }); +}); diff --git a/public/app/features/inspector/InspectDataTab.tsx b/public/app/features/inspector/InspectDataTab.tsx index 70c5132a2fd..eecd0bc5e87 100644 --- a/public/app/features/inspector/InspectDataTab.tsx +++ b/public/app/features/inspector/InspectDataTab.tsx @@ -167,18 +167,14 @@ export class InspectDataTab extends PureComponent { renderDataOptions(dataFrames: DataFrame[]) { const { options, onOptionsChange, panel, data } = this.props; - if (!panel || !onOptionsChange) { - return null; - } const { transformId, transformationOptions, selectedDataFrame } = this.state; const styles = getPanelInspectorStyles(); - const panelTransformations = panel.getTransformations(); + const panelTransformations = panel?.getTransformations(); const showPanelTransformationsOption = - panelTransformations && panelTransformations.length > 0 && (transformId as any) !== 'join by time'; - const showFieldConfigsOption = !panel.plugin?.fieldConfigRegistry.isEmpty(); - const showDataOptions = showPanelTransformationsOption || showFieldConfigsOption; + Boolean(panelTransformations?.length) && (transformId as any) !== 'join by time'; + const showFieldConfigsOption = panel && !panel.plugin?.fieldConfigRegistry.isEmpty(); let dataSelect = dataFrames; if (selectedDataFrame === DataTransformerID.seriesToColumns) { @@ -194,10 +190,6 @@ export class InspectDataTab extends PureComponent { const selectableOptions = [...transformationOptions, ...choices]; - if (!showDataOptions) { - return null; - } - return ( { headerElement={{this.getActiveString()}} isOpen={false} > -
+
{data!.length > 1 && ( @@ -215,12 +207,13 @@ export class InspectDataTab extends PureComponent { value={selectedDataFrame} onChange={this.onDataFrameChange} width={30} + aria-label="Select dataframe" /> )} - {showPanelTransformationsOption && ( + {showPanelTransformationsOption && onOptionsChange && ( { /> )} - {showFieldConfigsOption && ( + {showFieldConfigsOption && onOptionsChange && (