-
+jest.mock('../style_panel/standard_options/standard_options_panel', () => ({
+ StandardOptionsPanel: jest.fn(({ min, onMinChange, max, onMaxChange, unit, onUnitChange }) => (
+
)),
}));
@@ -173,9 +183,9 @@ describe('MetricVisStyleControls', () => {
expect(titleInput).toHaveValue('');
});
- it('renders unit panel', () => {
+ it('renders standard panel', () => {
render(
);
- expect(screen.getByTestId('mockMetricUnitPanel')).toBeInTheDocument();
+ expect(screen.getByTestId('mockStandardPanel')).toBeInTheDocument();
});
it('calls onStyleChange when unit is changed', () => {
diff --git a/src/plugins/explore/public/components/visualizations/metric/metric_vis_options.tsx b/src/plugins/explore/public/components/visualizations/metric/metric_vis_options.tsx
index adc72a084d71..da5070a551a1 100644
--- a/src/plugins/explore/public/components/visualizations/metric/metric_vis_options.tsx
+++ b/src/plugins/explore/public/components/visualizations/metric/metric_vis_options.tsx
@@ -15,7 +15,6 @@ import { StyleAccordion } from '../style_panel/style_accordion';
import { AxesSelectPanel } from '../style_panel/axes/axes_selector';
import { ValueCalculationSelector } from '../style_panel/value/value_calculation_selector';
import { PercentageSelector } from '../style_panel/percentage/percentage_selector';
-import { UnitPanel } from '../style_panel/unit/unit_panel';
import { ThresholdPanel } from '../style_panel/threshold/threshold_panel';
import { StandardOptionsPanel } from '../style_panel/standard_options/standard_options_panel';
@@ -79,12 +78,6 @@ export const MetricVisStyleControls: React.FC
= ({
-
- updateStyleOption('unitId', value)}
- />
-
= ({
max={styleOptions.max}
onMinChange={(value) => updateStyleOption('min', value)}
onMaxChange={(value) => updateStyleOption('max', value)}
+ unit={styleOptions.unitId}
+ onUnitChange={(value) => updateStyleOption('unitId', value)}
/>
diff --git a/src/plugins/explore/public/components/visualizations/rule_repository.ts b/src/plugins/explore/public/components/visualizations/rule_repository.ts
index 7ddb3c030603..1cce04a0f97e 100644
--- a/src/plugins/explore/public/components/visualizations/rule_repository.ts
+++ b/src/plugins/explore/public/components/visualizations/rule_repository.ts
@@ -45,6 +45,7 @@ import { GaugeChartStyle } from './gauge/gauge_vis_config';
import { LineChartStyle } from './line/line_vis_config';
import { MetricChartStyle } from './metric/metric_vis_config';
import { PieChartStyle } from './pie/pie_vis_config';
+import { BarGaugeChartStyle } from './bar_gauge/bar_gauge_vis_config';
import { ScatterChartStyle } from './scatter/scatter_vis_config';
import { HeatmapChartStyle } from './heatmap/heatmap_vis_config';
import { StateTimeLineChartStyle } from './state_timeline/state_timeline_config';
@@ -53,6 +54,7 @@ import {
createCategoricalStateTimeline,
createSingleCategoricalStateTimeline,
} from './state_timeline/to_expression';
+import { createBarGaugeSpec } from './bar_gauge/to_expression';
type RuleMatchIndex = [number, number, number];
@@ -479,9 +481,10 @@ const oneMetricOneCateRule: VisualizationRule = {
compare([1, 1, 0], [numerical.length, categorical.length, date.length]),
chartTypes: [
{ ...CHART_METADATA.bar, priority: 100 },
- { ...CHART_METADATA.pie, priority: 80 },
- { ...CHART_METADATA.line, priority: 60 },
- { ...CHART_METADATA.area, priority: 40 },
+ { ...CHART_METADATA.bar_gauge, priority: 80 },
+ { ...CHART_METADATA.pie, priority: 60 },
+ { ...CHART_METADATA.line, priority: 40 },
+ { ...CHART_METADATA.area, priority: 20 },
],
toSpec: (
transformedData,
@@ -493,6 +496,15 @@ const oneMetricOneCateRule: VisualizationRule = {
axisColumnMappings
) => {
switch (chartType) {
+ case 'bar_gauge':
+ return createBarGaugeSpec(
+ transformedData,
+ numericalColumns,
+ categoricalColumns,
+ dateColumns,
+ styleOptions as BarGaugeChartStyle,
+ axisColumnMappings
+ );
case 'bar':
return createBarSpec(
transformedData,
diff --git a/src/plugins/explore/public/components/visualizations/style_panel/standard_options/standard_options_panel.tsx b/src/plugins/explore/public/components/visualizations/style_panel/standard_options/standard_options_panel.tsx
index 48470506a5e3..b960dcd95c93 100644
--- a/src/plugins/explore/public/components/visualizations/style_panel/standard_options/standard_options_panel.tsx
+++ b/src/plugins/explore/public/components/visualizations/style_panel/standard_options/standard_options_panel.tsx
@@ -5,14 +5,19 @@
import React from 'react';
import { i18n } from '@osd/i18n';
+import { EuiFlexGroup, EuiFlexItem, EuiFormRow } from '@elastic/eui';
+
import { MinMaxControls } from './min_max_control';
import { StyleAccordion } from '../style_accordion';
+import { UnitPanel } from '../unit/unit_panel';
export interface StandardOptionsPanelProps {
min?: number;
max?: number;
onMinChange: (min: number | undefined) => void;
onMaxChange: (max: number | undefined) => void;
+ unit?: string;
+ onUnitChange: (unit: string | undefined) => void;
}
export const StandardOptionsPanel = ({
@@ -20,6 +25,8 @@ export const StandardOptionsPanel = ({
max,
onMaxChange,
onMinChange,
+ unit,
+ onUnitChange,
}: StandardOptionsPanelProps) => {
return (
// TODO add unit panel to standardOptions panel
@@ -28,9 +35,17 @@ export const StandardOptionsPanel = ({
accordionLabel={i18n.translate('explore.stylePanel.threshold', {
defaultMessage: 'Standard options',
})}
- initialIsOpen={true}
+ initialIsOpen={false}
>
-
+
+
+ {' '}
+
+
+
+
+
+
);
};
diff --git a/src/plugins/explore/public/components/visualizations/style_panel/unit/unit_panel.tsx b/src/plugins/explore/public/components/visualizations/style_panel/unit/unit_panel.tsx
index 659b07e80d7f..5aa3ef151183 100644
--- a/src/plugins/explore/public/components/visualizations/style_panel/unit/unit_panel.tsx
+++ b/src/plugins/explore/public/components/visualizations/style_panel/unit/unit_panel.tsx
@@ -106,32 +106,29 @@ export const UnitPanel = ({ unit, onUnitChange }: UnitPanelProps) => {
}, [handleChangeUnit]);
return (
-
-
- setPopover(false)}
- panelPaddingSize="none"
- anchorPosition="downLeft"
- hasArrow={false}
- >
-
-
-
-
+ setPopover(false)}
+ panelPaddingSize="none"
+ anchorPosition="downLeft"
+ hasArrow={false}
+ >
+
+
+
);
};
diff --git a/src/plugins/explore/public/components/visualizations/theme/default_colors.ts b/src/plugins/explore/public/components/visualizations/theme/default_colors.ts
index 3543ad508553..2a52b9bf59cc 100644
--- a/src/plugins/explore/public/components/visualizations/theme/default_colors.ts
+++ b/src/plugins/explore/public/components/visualizations/theme/default_colors.ts
@@ -21,6 +21,7 @@ export const getColors = () => {
statusRed: '#DB0000',
text: '#FFF',
grid: '#27252C',
+ backgroundShade: '#27252C',
categories: [
'#7598FF',
'#A669E2',
@@ -43,6 +44,7 @@ export const getColors = () => {
statusRed: '#DB0000',
text: '#313131',
grid: '#F5F7FF',
+ backgroundShade: '#f1f1f1ff',
categories: [
'#5C7FFF',
'#A669E2',
@@ -66,6 +68,7 @@ export const getColors = () => {
statusRed: '#DB0000',
text: euiThemeVars.euiTextColor,
grid: euiThemeVars.euiColorChartLines,
+ backgroundShade: darkMode ? '#27252C' : '#f1f1f1ff',
categories: euiPaletteColorBlind(),
};
};
diff --git a/src/plugins/explore/public/components/visualizations/utils/use_visualization_types.ts b/src/plugins/explore/public/components/visualizations/utils/use_visualization_types.ts
index 8bf98cf86770..6c9875dca170 100644
--- a/src/plugins/explore/public/components/visualizations/utils/use_visualization_types.ts
+++ b/src/plugins/explore/public/components/visualizations/utils/use_visualization_types.ts
@@ -21,6 +21,7 @@ import {
StateTimeLineChartStyle,
StateTimeLineChartStyleOptions,
} from '../state_timeline/state_timeline_config';
+import { BarGaugeChartStyle, BarGaugeChartStyleOptions } from '../bar_gauge/bar_gauge_vis_config';
export type ChartType =
| 'line'
@@ -32,7 +33,8 @@ export type ChartType =
| 'area'
| 'table'
| 'gauge'
- | 'state_timeline';
+ | 'state_timeline'
+ | 'bar_gauge';
export interface ChartStylesMapping {
line: LineChartStyle;
@@ -45,6 +47,7 @@ export interface ChartStylesMapping {
table: TableChartStyle;
gauge: GaugeChartStyle;
state_timeline: StateTimeLineChartStyle;
+ bar_gauge: BarGaugeChartStyle;
}
export type StyleOptions =
@@ -57,7 +60,8 @@ export type StyleOptions =
| AreaChartStyleOptions
| TableChartStyleOptions
| GaugeChartStyleOptions
- | StateTimeLineChartStyleOptions;
+ | StateTimeLineChartStyleOptions
+ | BarGaugeChartStyleOptions;
export type ChartStyles = ChartStylesMapping[ChartType];
diff --git a/src/plugins/explore/public/components/visualizations/visualization_registry.ts b/src/plugins/explore/public/components/visualizations/visualization_registry.ts
index a96b020d80d4..cf9cda960f5a 100644
--- a/src/plugins/explore/public/components/visualizations/visualization_registry.ts
+++ b/src/plugins/explore/public/components/visualizations/visualization_registry.ts
@@ -25,6 +25,7 @@ import { ChartType } from './utils/use_visualization_types';
import { getColumnsByAxesMapping } from './visualization_builder_utils';
import { createGaugeConfig } from './gauge/gauge_vis_config';
import { createStateTimelineConfig } from './state_timeline/state_timeline_config';
+import { createBarGaugeConfig } from './bar_gauge/bar_gauge_vis_config';
/**
* Registry for visualization rules and configurations.
@@ -169,6 +170,8 @@ export class VisualizationRegistry {
return createGaugeConfig();
case 'state_timeline':
return createStateTimelineConfig();
+ case 'bar_gauge':
+ return createBarGaugeConfig();
default:
return;
}