From fe3aefed30dad26ba700ee7046f79d93e17700da Mon Sep 17 00:00:00 2001 From: Nick Partridge Date: Sun, 19 Nov 2023 19:33:53 -0700 Subject: [PATCH] fix(metric): add option to set empty cell background color (#2247) [61.0.x] (#2250) --- ...missing-background-colors-chrome-linux.png | Bin 0 -> 53255 bytes e2e/tests/metric_stories.test.ts | 5 +++++ packages/charts/api/charts.api.md | 2 ++ .../chart_types/metric/renderer/dom/index.tsx | 19 +++++++++++++----- .../charts/src/utils/themes/dark_theme.ts | 1 + .../src/utils/themes/legacy_dark_theme.ts | 1 + .../src/utils/themes/legacy_light_theme.ts | 1 + .../charts/src/utils/themes/light_theme.ts | 1 + packages/charts/src/utils/themes/theme.ts | 1 + storybook/parameters.ts | 1 + storybook/stories/metric/2_grid.story.tsx | 8 +++++++- 11 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 e2e/screenshots/metric_stories.test.ts-snapshots/metric/should-render-with-empty-and-missing-background-colors-chrome-linux.png diff --git a/e2e/screenshots/metric_stories.test.ts-snapshots/metric/should-render-with-empty-and-missing-background-colors-chrome-linux.png b/e2e/screenshots/metric_stories.test.ts-snapshots/metric/should-render-with-empty-and-missing-background-colors-chrome-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..975fe00ac37ab70a667c9b83914372b7cf431d40 GIT binary patch literal 53255 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

XnIZfK#A53Y#wO1&9Co498)~`D%8p#`& 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
gT$j+$>%Qkf~88y9Y>fFCbB~-`N=g7qHn05 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 { 'http://localhost:9001/?path=/story/metric-alpha--basic&globals=theme:light&knob-title=Network out&knob-subtitle=host: 1dc4e&knob-progress or trend=trend&knob-progress bar direction=vertical&knob-trend data points=30&knob-trend shape=area&knob-trend a11y title=The Cluster CPU Usage trend&knob-trend a11y description=The trend shows a peak of CPU usage in the last 5 minutes&knob-extra=last 5m&knob-progress max=100&knob-is numeric metric=true&knob-value=55.23&knob-value prefix=&knob-value postfix=GB&knob-color=rgba(255, 255, 255, 1)&knob-use value color=true&knob-value color=rgba(189, 0, 0, 1)&knob-show icon=true&knob-EUI icon glyph name=warning&knob-show value icon=true&knob-EUI value icon glyph name=sortUp', ); }); + test('should render with empty and missing background colors', async ({ page }) => { + await common.expectChartAtUrlToMatchScreenshot(page)( + 'http://localhost:9001/?path=/story/metric-alpha--grid&globals=theme:light;background:gray&knob-empty background=white&knob-number of columns=3', + ); + }); pwEach.describe(['trend', 'bar', 'none'])( (v) => `Metric - ${v} type`, diff --git a/packages/charts/api/charts.api.md b/packages/charts/api/charts.api.md index c1f4855648..5d426febd9 100644 --- a/packages/charts/api/charts.api.md +++ b/packages/charts/api/charts.api.md @@ -1875,6 +1875,8 @@ export interface MetricStyle { // (undocumented) border: Color; // (undocumented) + emptyBackground: Color; + // (undocumented) minHeight: Pixels; // (undocumented) nonFiniteText: string; diff --git a/packages/charts/src/chart_types/metric/renderer/dom/index.tsx b/packages/charts/src/chart_types/metric/renderer/dom/index.tsx index f3524603d0..b991457cba 100644 --- a/packages/charts/src/chart_types/metric/renderer/dom/index.tsx +++ b/packages/charts/src/chart_types/metric/renderer/dom/index.tsx @@ -15,8 +15,8 @@ import { connect } from 'react-redux'; import { bindActionCreators, Dispatch } from 'redux'; import { Metric as MetricComponent } from './metric'; -import { ColorContrastOptions, highContrastColor } from '../../../../common/color_calcs'; -import { colorToRgba } from '../../../../common/color_library_wrappers'; +import { ColorContrastOptions, highContrastColor, combineColors } from '../../../../common/color_calcs'; +import { colorToRgba, RGBATupleToString } from '../../../../common/color_library_wrappers'; import { getResolvedBackgroundColor } from '../../../../common/fill_text_color'; import { BasicListener, ElementClickListener, ElementOverListener, settingsBuildProps } from '../../../../specs'; import { onChartRendered } from '../../../../state/actions/chart'; @@ -100,7 +100,10 @@ class Component extends React.Component { lightColor: colorToRgba(style.text.lightColor), darkColor: colorToRgba(style.text.darkColor), }; - const { color: emptyForegroundColor } = highContrastColor(colorToRgba(backgroundColor), undefined, contrastOptions); + + const emptyBackgroundRGBA = combineColors(colorToRgba(style.emptyBackground), colorToRgba(backgroundColor)); + const emptyBackground = RGBATupleToString(emptyBackgroundRGBA); + const { color: emptyForegroundColor } = highContrastColor(emptyBackgroundRGBA, undefined, contrastOptions); return ( // eslint-disable-next-line jsx-a11y/no-redundant-roles @@ -125,7 +128,10 @@ class Component extends React.Component { }); return !datum ? (
  • -
    +
  • @@ -160,7 +166,10 @@ class Component extends React.Component { }); return (
  • -
    +
  • ); }), diff --git a/packages/charts/src/utils/themes/dark_theme.ts b/packages/charts/src/utils/themes/dark_theme.ts index ef83eb9cf9..ce123f640a 100644 --- a/packages/charts/src/utils/themes/dark_theme.ts +++ b/packages/charts/src/utils/themes/dark_theme.ts @@ -419,6 +419,7 @@ export const DARK_THEME: Theme = { }, border: DARK_BASE_COLORS.lightShade, barBackground: DARK_BASE_COLORS.lightShade, + emptyBackground: Colors.Transparent.keyword, nonFiniteText: 'N/A', minHeight: 64, }, diff --git a/packages/charts/src/utils/themes/legacy_dark_theme.ts b/packages/charts/src/utils/themes/legacy_dark_theme.ts index 3648d762d3..a761a47630 100644 --- a/packages/charts/src/utils/themes/legacy_dark_theme.ts +++ b/packages/charts/src/utils/themes/legacy_dark_theme.ts @@ -415,6 +415,7 @@ export const LEGACY_DARK_THEME: Theme = { }, border: '#343741', barBackground: '#343741', + emptyBackground: Colors.Transparent.keyword, nonFiniteText: 'N/A', minHeight: 64, }, diff --git a/packages/charts/src/utils/themes/legacy_light_theme.ts b/packages/charts/src/utils/themes/legacy_light_theme.ts index b4a40e3991..fb5f48ad2f 100644 --- a/packages/charts/src/utils/themes/legacy_light_theme.ts +++ b/packages/charts/src/utils/themes/legacy_light_theme.ts @@ -414,6 +414,7 @@ export const LEGACY_LIGHT_THEME: Theme = { }, border: '#EDF0F5', barBackground: '#EDF0F5', + emptyBackground: Colors.Transparent.keyword, nonFiniteText: 'N/A', minHeight: 64, }, diff --git a/packages/charts/src/utils/themes/light_theme.ts b/packages/charts/src/utils/themes/light_theme.ts index 6bbb716065..b3b125646b 100644 --- a/packages/charts/src/utils/themes/light_theme.ts +++ b/packages/charts/src/utils/themes/light_theme.ts @@ -418,6 +418,7 @@ export const LIGHT_THEME: Theme = { }, border: '#EDF0F5', // LIGHT_BASE_COLORS.lightShade, barBackground: '#EDF0F5', // LIGHT_BASE_COLORS.lightShade, + emptyBackground: Colors.Transparent.keyword, nonFiniteText: 'N/A', minHeight: 64, }, diff --git a/packages/charts/src/utils/themes/theme.ts b/packages/charts/src/utils/themes/theme.ts index a4138a981c..71c6b37878 100644 --- a/packages/charts/src/utils/themes/theme.ts +++ b/packages/charts/src/utils/themes/theme.ts @@ -327,6 +327,7 @@ export interface MetricStyle { }; border: Color; barBackground: Color; + emptyBackground: Color; nonFiniteText: string; minHeight: Pixels; } diff --git a/storybook/parameters.ts b/storybook/parameters.ts index 9209899570..c5b02c0743 100644 --- a/storybook/parameters.ts +++ b/storybook/parameters.ts @@ -81,6 +81,7 @@ export const storybookParameters: Parameters = { { id: 'blue', title: 'Blue', color: '#14abf5' }, { id: 'yellow', title: 'Yellow', color: '#fec709' }, { id: 'green', title: 'Green', color: '#00c1b4' }, + { id: 'gray', title: 'Gray', color: 'rgb(237, 240, 245)' }, ], }, toggles: { diff --git a/storybook/stories/metric/2_grid.story.tsx b/storybook/stories/metric/2_grid.story.tsx index 3c3ee4052f..2e1c647763 100644 --- a/storybook/stories/metric/2_grid.story.tsx +++ b/storybook/stories/metric/2_grid.story.tsx @@ -8,7 +8,7 @@ import { EuiIcon } from '@elastic/eui'; import { action } from '@storybook/addon-actions'; -import { select, number, boolean, button } from '@storybook/addon-knobs'; +import { select, number, boolean, button, color } from '@storybook/addon-knobs'; import React, { useState } from 'react'; import { @@ -45,6 +45,7 @@ export const Example: ChartsStory = (_, { title, description }) => { const progressBarDirection = select('progress bar direction', ['horizontal', 'vertical'], 'vertical'); const maxDataPoints = number('max trend data points', 30, { min: 0, max: 50, step: 1 }); + const emptyBackground = color('empty background', 'transparent'); const defaultValueFormatter = (d: number) => `${d}`; const data: (MetricBase | MetricWProgress | MetricWTrend | undefined)[] = [ @@ -194,6 +195,11 @@ export const Example: ChartsStory = (_, { title, description }) => { .join(' ')}