From 813b9153a5b56b0699343b870754f61c8e7970ac Mon Sep 17 00:00:00 2001 From: Nick Partridge Date: Fri, 4 Sep 2020 11:27:48 -0500 Subject: [PATCH] feat(tooltip): series tick formatters (#802) * feat(tooltip): series tick formatters * test: add tests for new custom formatting * test: remove only --- packages/osd-charts/api/charts.api.md | 3 +- ...ormatter-visually-looks-correct-1-snap.png | Bin 0 -> 19328 bytes ...-use-all-custom-tick-formatters-1-snap.png | Bin 0 -> 29232 bytes ...atter-nor-series-tick-formatter-1-snap.png | Bin 0 -> 21249 bytes ...ter-with-no-axis-tick-formatter-1-snap.png | Bin 0 -> 29232 bytes ...r-missing-series-tick-formatter-1-snap.png | Bin 0 -> 29008 bytes ...formatting-show-synced-tooltips-1-snap.png | Bin 0 -> 29232 bytes .../integration/tests/interactions.test.ts | 30 +++ .../src/chart_types/xy_chart/legend/legend.ts | 6 +- .../src/chart_types/xy_chart/specs/axis.tsx | 8 +- .../state/chart_state.timescales.test.ts | 36 +-- .../compute_axis_ticks_dimensions.ts | 14 +- .../selectors/compute_axis_visible_ticks.ts | 8 +- .../chart_types/xy_chart/state/utils/utils.ts | 6 +- .../xy_chart/tooltip/tooltip.test.ts | 57 ++++- .../chart_types/xy_chart/tooltip/tooltip.ts | 6 +- .../xy_chart/utils/axis_utils.test.ts | 214 ++++++++++++++++-- .../chart_types/xy_chart/utils/axis_utils.ts | 33 ++- .../src/chart_types/xy_chart/utils/specs.ts | 14 +- .../axes/6a_different_tooltip_formatter.tsx | 96 ++++++++ .../osd-charts/stories/axes/axes.stories.tsx | 1 + 21 files changed, 471 insertions(+), 61 deletions(-) create mode 100644 packages/osd-charts/integration/tests/__image_snapshots__/all-test-ts-baseline-visual-tests-for-all-stories-axes-different-tooltip-formatter-visually-looks-correct-1-snap.png create mode 100644 packages/osd-charts/integration/tests/__image_snapshots__/interactions-test-ts-interactions-tooltip-formatting-should-use-all-custom-tick-formatters-1-snap.png create mode 100644 packages/osd-charts/integration/tests/__image_snapshots__/interactions-test-ts-interactions-tooltip-formatting-should-use-default-tick-formatter-with-no-axis-tick-formatter-nor-series-tick-formatter-1-snap.png create mode 100644 packages/osd-charts/integration/tests/__image_snapshots__/interactions-test-ts-interactions-tooltip-formatting-should-use-series-tick-formatter-with-no-axis-tick-formatter-1-snap.png create mode 100644 packages/osd-charts/integration/tests/__image_snapshots__/interactions-test-ts-interactions-tooltip-formatting-should-use-series-tick-formatter-with-no-axis-tick-formatter-missing-series-tick-formatter-1-snap.png create mode 100644 packages/osd-charts/integration/tests/__image_snapshots__/interactions-test-ts-interactions-tooltip-formatting-show-synced-tooltips-1-snap.png create mode 100644 packages/osd-charts/stories/axes/6a_different_tooltip_formatter.tsx diff --git a/packages/osd-charts/api/charts.api.md b/packages/osd-charts/api/charts.api.md index 93f03128391..be941bc314f 100644 --- a/packages/osd-charts/api/charts.api.md +++ b/packages/osd-charts/api/charts.api.md @@ -138,7 +138,7 @@ export interface AxisSpec extends Spec { // (undocumented) specType: typeof SpecTypes.Axis; style?: RecursivePartial>; - tickFormat: TickFormatter; + tickFormat?: TickFormatter; ticks?: number; title?: string; } @@ -1262,6 +1262,7 @@ export interface SeriesSpec extends Spec { sortIndex?: number; // (undocumented) specType: typeof SpecTypes.Series; + tickFormat?: TickFormatter; useDefaultGroupDomain?: boolean; // Warning: (ae-forgotten-export) The symbol "AccessorFormat" needs to be exported by the entry point index.d.ts y0AccessorFormat?: AccessorFormat; diff --git a/packages/osd-charts/integration/tests/__image_snapshots__/all-test-ts-baseline-visual-tests-for-all-stories-axes-different-tooltip-formatter-visually-looks-correct-1-snap.png b/packages/osd-charts/integration/tests/__image_snapshots__/all-test-ts-baseline-visual-tests-for-all-stories-axes-different-tooltip-formatter-visually-looks-correct-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..9077e825b614b654a5a31f47cb4c31f51effe5bb GIT binary patch literal 19328 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 NFyeCevhL`;_&@fItXKd5 literal 0 HcmV?d00001 diff --git a/packages/osd-charts/integration/tests/__image_snapshots__/interactions-test-ts-interactions-tooltip-formatting-should-use-all-custom-tick-formatters-1-snap.png b/packages/osd-charts/integration/tests/__image_snapshots__/interactions-test-ts-interactions-tooltip-formatting-should-use-all-custom-tick-formatters-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..0748b824220ba8a7d1ef7ef192eeb8f0515d38a4 GIT binary patch literal 29232 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

E^B9oeD_dKiQD5efN)IvjiF_@>@fzoOAjYuz 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

  • |_q>{f_K;t-I;m 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 literal 0 HcmV?d00001 diff --git a/packages/osd-charts/integration/tests/__image_snapshots__/interactions-test-ts-interactions-tooltip-formatting-should-use-default-tick-formatter-with-no-axis-tick-formatter-nor-series-tick-formatter-1-snap.png b/packages/osd-charts/integration/tests/__image_snapshots__/interactions-test-ts-interactions-tooltip-formatting-should-use-default-tick-formatter-with-no-axis-tick-formatter-nor-series-tick-formatter-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..d77d1b0cb6591ad9ab836963d1dfe7c55f9da95e GIT binary patch literal 21249 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 nUF(N;h=d{`DbfuB(#-}@5u_Vwq`N!k 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

    E^B9oeD_dKiQD5efN)IvjiF_@>@fzoOAjYuz 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

  • |_q>{f_K;t-I;m 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 literal 0 HcmV?d00001 diff --git a/packages/osd-charts/integration/tests/__image_snapshots__/interactions-test-ts-interactions-tooltip-formatting-should-use-series-tick-formatter-with-no-axis-tick-formatter-missing-series-tick-formatter-1-snap.png b/packages/osd-charts/integration/tests/__image_snapshots__/interactions-test-ts-interactions-tooltip-formatting-should-use-series-tick-formatter-with-no-axis-tick-formatter-missing-series-tick-formatter-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..f96564b5a0666b777db1432032d93bd484f9748a GIT binary patch literal 29008 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 literal 0 HcmV?d00001 diff --git a/packages/osd-charts/integration/tests/__image_snapshots__/interactions-test-ts-interactions-tooltip-formatting-show-synced-tooltips-1-snap.png b/packages/osd-charts/integration/tests/__image_snapshots__/interactions-test-ts-interactions-tooltip-formatting-show-synced-tooltips-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..0748b824220ba8a7d1ef7ef192eeb8f0515d38a4 GIT binary patch literal 29232 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

    E^B9oeD_dKiQD5efN)IvjiF_@>@fzoOAjYuz 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

  • |_q>{f_K;t-I;m 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 literal 0 HcmV?d00001 diff --git a/packages/osd-charts/integration/tests/interactions.test.ts b/packages/osd-charts/integration/tests/interactions.test.ts index b32e3b0986f..fbc8368e2b7 100644 --- a/packages/osd-charts/integration/tests/interactions.test.ts +++ b/packages/osd-charts/integration/tests/interactions.test.ts @@ -228,4 +228,34 @@ describe('Interactions', () => { ); }); }); + + describe('Tooltip formatting', () => { + it('should use all custom tick formatters', async () => { + await common.expectChartWithMouseAtUrlToMatchScreenshot( + 'http://localhost:9001/?path=/story/axes--different-tooltip-formatter&knob-Show%20legend=true&knob-Disable%20Y%20Axis%20tickFormat=&knob-Y%20Axis%20value%20format=0[.]0&knob-Y%20Axis%20unit=pets&knob-Disable%20dog%20line%20tickFormat=&knob-Dog%20line%20unit=dogs&knob-Disable%20cat%20line%20tickFormat=&knob-Cat%20line%20unit=cats', + { left: 280, top: 80 }, + ); + }); + + it('should use series tick formatter with no axis tick formatter', async () => { + await common.expectChartWithMouseAtUrlToMatchScreenshot( + 'http://localhost:9001/?path=/story/axes--different-tooltip-formatter&knob-Show%20legend=true&knob-Disable%20Y%20Axis%20tickFormat=&knob-Y%20Axis%20value%20format=0[.]0&knob-Y%20Axis%20unit=pets&knob-Disable%20dog%20line%20tickFormat=&knob-Dog%20line%20unit=dogs&knob-Disable%20cat%20line%20tickFormat=&knob-Cat%20line%20unit=cats', + { left: 280, top: 80 }, + ); + }); + + it('should use series tick formatter with no axis tick formatter, missing series tick formatter', async () => { + await common.expectChartWithMouseAtUrlToMatchScreenshot( + 'http://localhost:9001/?path=/story/axes--different-tooltip-formatter&knob-Show%20legend=true&knob-Disable%20Y%20Axis%20tickFormat=true&knob-Y%20Axis%20value%20format=0[.]0&knob-Y%20Axis%20unit=pets&knob-Disable%20dog%20line%20tickFormat=true&knob-Dog%20line%20unit=dogs&knob-Disable%20cat%20line%20tickFormat=&knob-Cat%20line%20unit=cats', + { left: 280, top: 80 }, + ); + }); + + it('should use default tick formatter with no axis tick formatter, nor series tick formatter', async () => { + await common.expectChartWithMouseAtUrlToMatchScreenshot( + 'http://localhost:9001/?path=/story/axes--different-tooltip-formatter&knob-Show%20legend=true&knob-Disable%20Y%20Axis%20tickFormat=true&knob-Y%20Axis%20value%20format=0[.]0&knob-Y%20Axis%20unit=pets&knob-Disable%20dog%20line%20tickFormat=true&knob-Dog%20line%20unit=dogs&knob-Disable%20cat%20line%20tickFormat=true&knob-Cat%20line%20unit=cats', + { left: 280, top: 80 }, + ); + }); + }); }); diff --git a/packages/osd-charts/src/chart_types/xy_chart/legend/legend.ts b/packages/osd-charts/src/chart_types/xy_chart/legend/legend.ts index 30a1b53942c..d630edc48ea 100644 --- a/packages/osd-charts/src/chart_types/xy_chart/legend/legend.ts +++ b/packages/osd-charts/src/chart_types/xy_chart/legend/legend.ts @@ -19,10 +19,11 @@ import { LegendItem } from '../../../commons/legend'; import { SeriesKey, SeriesIdentifier } from '../../../commons/series_id'; -import { identity, Color } from '../../../utils/commons'; +import { Color } from '../../../utils/commons'; import { BandedAccessorType } from '../../../utils/geometry'; import { getAxesSpecForSpecId, getSpecsById } from '../state/utils/spec'; import { Y0_ACCESSOR_POSTFIX, Y1_ACCESSOR_POSTFIX } from '../tooltip/tooltip'; +import { defaultTickFormatter } from '../utils/axis_utils'; import { SeriesCollectionValue, getSeriesIndex, @@ -66,6 +67,7 @@ export function computeLegend( ): LegendItem[] { const legendItems: LegendItem[] = []; const sortedCollection = getSortedDataSeriesColorsValuesMap(seriesCollection); + const fallbackTickFormatter = specs.find(({ tickFormat }) => tickFormat)?.tickFormat ?? defaultTickFormatter; sortedCollection.forEach((series, key) => { const { banded, lastValue, seriesIdentifier } = series; @@ -83,7 +85,7 @@ export function computeLegend( // Use this to get axis spec w/ tick formatter const { yAxis } = getAxesSpecForSpecId(axesSpecs, spec.groupId); - const formatter = yAxis ? yAxis.tickFormat : identity; + const formatter = yAxis?.tickFormat ?? fallbackTickFormatter; const { hideInLegend } = spec; legendItems.push({ diff --git a/packages/osd-charts/src/chart_types/xy_chart/specs/axis.tsx b/packages/osd-charts/src/chart_types/xy_chart/specs/axis.tsx index ee224dbca74..5ab2716c8d4 100644 --- a/packages/osd-charts/src/chart_types/xy_chart/specs/axis.tsx +++ b/packages/osd-charts/src/chart_types/xy_chart/specs/axis.tsx @@ -33,15 +33,13 @@ const defaultProps = { showOverlappingTicks: false, showOverlappingLabels: false, position: Position.Left, - tickFormat: (tick: any) => `${tick}`, }; type SpecRequired = Pick; type SpecOptionals = Partial>; export const Axis: React.FunctionComponent = getConnect()( - specComponentFactory< - AxisSpec, - 'groupId' | 'hide' | 'showOverlappingTicks' | 'showOverlappingLabels' | 'position' | 'tickFormat' - >(defaultProps), + specComponentFactory( + defaultProps, + ), ); diff --git a/packages/osd-charts/src/chart_types/xy_chart/state/chart_state.timescales.test.ts b/packages/osd-charts/src/chart_types/xy_chart/state/chart_state.timescales.test.ts index eca86a8c02f..6143d6d9cea 100644 --- a/packages/osd-charts/src/chart_types/xy_chart/state/chart_state.timescales.test.ts +++ b/packages/osd-charts/src/chart_types/xy_chart/state/chart_state.timescales.test.ts @@ -91,18 +91,18 @@ describe('Render chart', () => { store.dispatch(onPointerMove({ x: 15, y: 10 }, 0)); // check first valid tooltip let tooltip = getTooltipInfoSelector(store.getState()); expect(tooltip.values.length).toBe(1); - expect(tooltip.header?.value).toBe(day1); - expect(tooltip.values[0].value).toBe(10); + expect(tooltip.header?.value).toBe(`${day1}`); + expect(tooltip.values[0].value).toBe(`${10}`); store.dispatch(onPointerMove({ x: 35, y: 10 }, 1)); // check second valid tooltip tooltip = getTooltipInfoSelector(store.getState()); expect(tooltip.values.length).toBe(1); - expect(tooltip.header?.value).toBe(day2); - expect(tooltip.values[0].value).toBe(22); + expect(tooltip.header?.value).toBe(`${day2}`); + expect(tooltip.values[0].value).toBe(`${22}`); store.dispatch(onPointerMove({ x: 76, y: 10 }, 2)); // check third valid tooltip tooltip = getTooltipInfoSelector(store.getState()); expect(tooltip.values.length).toBe(1); - expect(tooltip.header?.value).toBe(day3); - expect(tooltip.values[0].value).toBe(6); + expect(tooltip.header?.value).toBe(`${day3}`); + expect(tooltip.values[0].value).toBe(`${6}`); }); }); describe('line, utc-time, 5m interval', () => { @@ -159,18 +159,18 @@ describe('Render chart', () => { store.dispatch(onPointerMove({ x: 15, y: 10 }, 0)); // check first valid tooltip let tooltip = getTooltipInfoSelector(store.getState()); expect(tooltip.values.length).toBe(1); - expect(tooltip.header?.value).toBe(date1); - expect(tooltip.values[0].value).toBe(10); + expect(tooltip.header?.value).toBe(`${date1}`); + expect(tooltip.values[0].value).toBe(`${10}`); store.dispatch(onPointerMove({ x: 35, y: 10 }, 1)); // check second valid tooltip tooltip = getTooltipInfoSelector(store.getState()); expect(tooltip.values.length).toBe(1); - expect(tooltip.header?.value).toBe(date2); - expect(tooltip.values[0].value).toBe(22); + expect(tooltip.header?.value).toBe(`${date2}`); + expect(tooltip.values[0].value).toBe(`${22}`); store.dispatch(onPointerMove({ x: 76, y: 10 }, 2)); // check third valid tooltip tooltip = getTooltipInfoSelector(store.getState()); expect(tooltip.values.length).toBe(1); - expect(tooltip.header?.value).toBe(date3); - expect(tooltip.values[0].value).toBe(6); + expect(tooltip.header?.value).toBe(`${date3}`); + expect(tooltip.values[0].value).toBe(`${6}`); }); }); describe('line, non utc-time, 5m + 1s interval', () => { @@ -245,18 +245,18 @@ describe('Render chart', () => { store.dispatch(onPointerMove({ x: 15, y: 10 }, 0)); // check first valid tooltip let tooltip = getTooltipInfoSelector(store.getState()); expect(tooltip.values.length).toBe(1); - expect(tooltip.header?.value).toBe(date1); - expect(tooltip.values[0].value).toBe(10); + expect(tooltip.header?.value).toBe(`${date1}`); + expect(tooltip.values[0].value).toBe(`${10}`); store.dispatch(onPointerMove({ x: 35, y: 10 }, 1)); // check second valid tooltip tooltip = getTooltipInfoSelector(store.getState()); expect(tooltip.values.length).toBe(1); - expect(tooltip.header?.value).toBe(date2); - expect(tooltip.values[0].value).toBe(22); + expect(tooltip.header?.value).toBe(`${date2}`); + expect(tooltip.values[0].value).toBe(`${22}`); store.dispatch(onPointerMove({ x: 76, y: 10 }, 2)); // check third valid tooltip tooltip = getTooltipInfoSelector(store.getState()); expect(tooltip.values.length).toBe(1); - expect(tooltip.header?.value).toBe(date3); - expect(tooltip.values[0].value).toBe(6); + expect(tooltip.header?.value).toBe(`${date3}`); + expect(tooltip.values[0].value).toBe(`${6}`); }); }); }); diff --git a/packages/osd-charts/src/chart_types/xy_chart/state/selectors/compute_axis_ticks_dimensions.ts b/packages/osd-charts/src/chart_types/xy_chart/state/selectors/compute_axis_ticks_dimensions.ts index d901f82290f..1a1b78302e4 100644 --- a/packages/osd-charts/src/chart_types/xy_chart/state/selectors/compute_axis_ticks_dimensions.ts +++ b/packages/osd-charts/src/chart_types/xy_chart/state/selectors/compute_axis_ticks_dimensions.ts @@ -24,11 +24,16 @@ import { getChartThemeSelector } from '../../../../state/selectors/get_chart_the import { getSettingsSpecSelector } from '../../../../state/selectors/get_settings_specs'; import { CanvasTextBBoxCalculator } from '../../../../utils/bbox/canvas_text_bbox_calculator'; import { AxisId } from '../../../../utils/ids'; -import { computeAxisTicksDimensions, AxisTicksDimensions, isDuplicateAxis } from '../../utils/axis_utils'; +import { + computeAxisTicksDimensions, + AxisTicksDimensions, + isDuplicateAxis, + defaultTickFormatter, +} from '../../utils/axis_utils'; import { computeSeriesDomainsSelector } from './compute_series_domains'; import { countBarsInClusterSelector } from './count_bars_in_cluster'; import { getBarPaddingsSelector } from './get_bar_paddings'; -import { getAxisSpecsSelector } from './get_specs'; +import { getAxisSpecsSelector, getSeriesSpecsSelector } from './get_specs'; import { isHistogramModeEnabledSelector } from './is_histogram_mode_enabled'; /** @internal */ @@ -41,6 +46,7 @@ export const computeAxisTicksDimensionsSelector = createCachedSelector( getSettingsSpecSelector, computeSeriesDomainsSelector, countBarsInClusterSelector, + getSeriesSpecsSelector, ], ( barsPadding, @@ -50,9 +56,10 @@ export const computeAxisTicksDimensionsSelector = createCachedSelector( settingsSpec, seriesDomainsAndData, totalBarsInCluster, + seriesSpecs, ): Map => { const { xDomain, yDomain } = seriesDomainsAndData; - + const fallBackTickFormatter = seriesSpecs.find(({ tickFormat }) => tickFormat)?.tickFormat ?? defaultTickFormatter; const bboxCalculator = new CanvasTextBBoxCalculator(); const axesTicksDimensions: Map = new Map(); axesSpecs.forEach((axisSpec) => { @@ -65,6 +72,7 @@ export const computeAxisTicksDimensionsSelector = createCachedSelector( bboxCalculator, settingsSpec.rotation, chartTheme.axes, + fallBackTickFormatter, barsPadding, isHistogramMode, ); diff --git a/packages/osd-charts/src/chart_types/xy_chart/state/selectors/compute_axis_visible_ticks.ts b/packages/osd-charts/src/chart_types/xy_chart/state/selectors/compute_axis_visible_ticks.ts index 0e4c6496e38..8e764b03866 100644 --- a/packages/osd-charts/src/chart_types/xy_chart/state/selectors/compute_axis_visible_ticks.ts +++ b/packages/osd-charts/src/chart_types/xy_chart/state/selectors/compute_axis_visible_ticks.ts @@ -24,14 +24,14 @@ import { getChartThemeSelector } from '../../../../state/selectors/get_chart_the import { getSettingsSpecSelector } from '../../../../state/selectors/get_settings_specs'; import { Dimensions } from '../../../../utils/dimensions'; import { AxisId } from '../../../../utils/ids'; -import { getAxisTicksPositions, AxisTick, AxisLinePosition } from '../../utils/axis_utils'; +import { getAxisTicksPositions, AxisTick, AxisLinePosition, defaultTickFormatter } from '../../utils/axis_utils'; import { computeAxisTicksDimensionsSelector } from './compute_axis_ticks_dimensions'; import { computeChartDimensionsSelector } from './compute_chart_dimensions'; import { computeSeriesDomainsSelector } from './compute_series_domains'; import { countBarsInClusterSelector } from './count_bars_in_cluster'; import { getAxesStylesSelector } from './get_axis_styles'; import { getBarPaddingsSelector } from './get_bar_paddings'; -import { getAxisSpecsSelector } from './get_specs'; +import { getAxisSpecsSelector, getSeriesSpecsSelector } from './get_specs'; import { isHistogramModeEnabledSelector } from './is_histogram_mode_enabled'; /** @internal */ @@ -54,6 +54,7 @@ export const computeAxisVisibleTicksSelector = createCachedSelector( countBarsInClusterSelector, isHistogramModeEnabledSelector, getBarPaddingsSelector, + getSeriesSpecsSelector, ], ( chartDimensions, @@ -66,7 +67,9 @@ export const computeAxisVisibleTicksSelector = createCachedSelector( totalBarsInCluster, isHistogramMode, barsPadding, + seriesSpecs, ): AxisVisibleTicks => { + const fallBackTickFormatter = seriesSpecs.find(({ tickFormat }) => tickFormat)?.tickFormat ?? defaultTickFormatter; const { xDomain, yDomain } = seriesDomainsAndData; return getAxisTicksPositions( chartDimensions, @@ -79,6 +82,7 @@ export const computeAxisVisibleTicksSelector = createCachedSelector( yDomain, totalBarsInCluster, isHistogramMode, + fallBackTickFormatter, barsPadding, ); }, diff --git a/packages/osd-charts/src/chart_types/xy_chart/state/utils/utils.ts b/packages/osd-charts/src/chart_types/xy_chart/state/utils/utils.ts index d31ce8a4b5b..69ae6c137b8 100644 --- a/packages/osd-charts/src/chart_types/xy_chart/state/utils/utils.ts +++ b/packages/osd-charts/src/chart_types/xy_chart/state/utils/utils.ts @@ -20,7 +20,7 @@ import { SeriesKey, SeriesIdentifier } from '../../../../commons/series_id'; import { Scale } from '../../../../scales'; import { ScaleType } from '../../../../scales/constants'; -import { identity, mergePartial, Rotation, Color, isUniqueArray } from '../../../../utils/commons'; +import { mergePartial, Rotation, Color, isUniqueArray } from '../../../../utils/commons'; import { CurveType } from '../../../../utils/curves'; import { Dimensions } from '../../../../utils/dimensions'; import { Domain } from '../../../../utils/domain'; @@ -31,6 +31,7 @@ import { XDomain, YDomain } from '../../domains/types'; import { mergeXDomain } from '../../domains/x_domain'; import { mergeYDomain } from '../../domains/y_domain'; import { renderArea, renderBars, renderLine, renderBubble, isDatumFilled } from '../../rendering/rendering'; +import { defaultTickFormatter } from '../../utils/axis_utils'; import { fillSeries } from '../../utils/fill_series'; import { IndexedGeometryMap } from '../../utils/indexed_geometry_map'; import { computeXScale, computeYScales, countBarsInCluster } from '../../utils/scales'; @@ -483,6 +484,7 @@ function renderGeometries( const bubbles: BubbleGeometry[] = []; const indexedGeometryMap = new IndexedGeometryMap(); const isMixedChart = isUniqueArray(seriesSpecs, ({ seriesType }) => seriesType) && seriesSpecs.length > 1; + const fallBackTickFormatter = seriesSpecs.find(({ tickFormat }) => tickFormat)?.tickFormat ?? defaultTickFormatter; const geometriesCounts: GeometriesCounts = { points: 0, bars: 0, @@ -510,7 +512,7 @@ function renderGeometries( }); const { yAxis } = getAxesSpecForSpecId(axesSpecs, spec.groupId); - const valueFormatter = yAxis && yAxis.tickFormat ? yAxis.tickFormat : identity; + const valueFormatter = yAxis?.tickFormat ?? fallBackTickFormatter; const displayValueSettings = spec.displayValueSettings ? { valueFormatter, ...spec.displayValueSettings } diff --git a/packages/osd-charts/src/chart_types/xy_chart/tooltip/tooltip.test.ts b/packages/osd-charts/src/chart_types/xy_chart/tooltip/tooltip.test.ts index c69e0ad81cd..26f6af85472 100644 --- a/packages/osd-charts/src/chart_types/xy_chart/tooltip/tooltip.test.ts +++ b/packages/osd-charts/src/chart_types/xy_chart/tooltip/tooltip.test.ts @@ -23,7 +23,7 @@ import { SpecTypes } from '../../../specs/constants'; import { Position, RecursivePartial } from '../../../utils/commons'; import { BarGeometry } from '../../../utils/geometry'; import { AxisStyle } from '../../../utils/themes/theme'; -import { AxisSpec, BarSeriesSpec, SeriesTypes } from '../utils/specs'; +import { AxisSpec, BarSeriesSpec, SeriesTypes, TickFormatter } from '../utils/specs'; import { formatTooltip } from './tooltip'; const style: RecursivePartial = { @@ -274,4 +274,59 @@ describe('Tooltip formatting', () => { tooltipValue = formatTooltip(geometry, SPEC_1, true, true, false, YAXIS_SPEC); expect(tooltipValue.isHighlighted).toBe(false); }); + + it('should format ticks with custom formatter from spec', () => { + const axisTickFormatter: TickFormatter = (v) => `${v} axis`; + const tickFormatter: TickFormatter = (v) => `${v} spec`; + const axisSpec: AxisSpec = { + ...YAXIS_SPEC, + tickFormat: axisTickFormatter, + }; + const spec: BarSeriesSpec = { + ...SPEC_1, + tickFormat: tickFormatter, + }; + const tooltipValue = formatTooltip(indexedGeometry, spec, false, false, false, axisSpec); + expect(tooltipValue.value).toBe('10 spec'); + }); + + it('should format ticks with custom formatter from axis', () => { + const axisTickFormatter: TickFormatter = (v) => `${v} axis`; + const axisSpec: AxisSpec = { + ...YAXIS_SPEC, + tickFormat: axisTickFormatter, + }; + const tooltipValue = formatTooltip(indexedGeometry, SPEC_1, false, false, false, axisSpec); + expect(tooltipValue.value).toBe('10 axis'); + }); + + it('should format ticks with default formatter', () => { + const tooltipValue = formatTooltip(indexedGeometry, SPEC_1, false, false, false, YAXIS_SPEC); + expect(tooltipValue.value).toBe('10'); + }); + + it('should format header with custom formatter from axis', () => { + const axisTickFormatter: TickFormatter = (v) => `${v} axis`; + const tickFormatter: TickFormatter = (v) => `${v} spec`; + const axisSpec: AxisSpec = { + ...YAXIS_SPEC, + tickFormat: axisTickFormatter, + }; + const spec: BarSeriesSpec = { + ...SPEC_1, + tickFormat: tickFormatter, + }; + const tooltipValue = formatTooltip(indexedGeometry, spec, true, false, false, axisSpec); + expect(tooltipValue.value).toBe('1 axis'); + }); + + it('should format header with default formatter from axis', () => { + const tickFormatter: TickFormatter = (v) => `${v} spec`; + const spec: BarSeriesSpec = { + ...SPEC_1, + tickFormat: tickFormatter, + }; + const tooltipValue = formatTooltip(indexedGeometry, spec, true, false, false, YAXIS_SPEC); + expect(tooltipValue.value).toBe('1'); + }); }); diff --git a/packages/osd-charts/src/chart_types/xy_chart/tooltip/tooltip.ts b/packages/osd-charts/src/chart_types/xy_chart/tooltip/tooltip.ts index ed22408756b..c0c014e096b 100644 --- a/packages/osd-charts/src/chart_types/xy_chart/tooltip/tooltip.ts +++ b/packages/osd-charts/src/chart_types/xy_chart/tooltip/tooltip.ts @@ -21,8 +21,8 @@ import { LegendItemExtraValues } from '../../../commons/legend'; import { SeriesKey } from '../../../commons/series_id'; import { TooltipValue } from '../../../specs'; import { getAccessorFormatLabel } from '../../../utils/accessor'; -import { identity } from '../../../utils/commons'; import { IndexedGeometry, BandedAccessorType } from '../../../utils/geometry'; +import { defaultTickFormatter } from '../utils/axis_utils'; import { getSeriesName } from '../utils/series'; import { AxisSpec, @@ -84,12 +84,14 @@ export function formatTooltip( const value = isHeader ? x : y; const tickFormatOptions: TickFormatterOptions | undefined = spec.timeZone ? { timeZone: spec.timeZone } : undefined; + const tickFormatter = + (isHeader ? axisSpec?.tickFormat : spec.tickFormat ?? axisSpec?.tickFormat) ?? defaultTickFormatter; return { seriesIdentifier, valueAccessor: accessor, label, - value: axisSpec ? axisSpec.tickFormat(value, tickFormatOptions) : identity(value), + value: tickFormatter(value, tickFormatOptions), markValue: isHeader || mark === null ? null : mark, color, isHighlighted: isHeader ? false : isHighlighted, diff --git a/packages/osd-charts/src/chart_types/xy_chart/utils/axis_utils.test.ts b/packages/osd-charts/src/chart_types/xy_chart/utils/axis_utils.test.ts index 431b134f987..f4ff75f34e8 100644 --- a/packages/osd-charts/src/chart_types/xy_chart/utils/axis_utils.test.ts +++ b/packages/osd-charts/src/chart_types/xy_chart/utils/axis_utils.test.ts @@ -53,6 +53,7 @@ import { getVisibleTicks, isYDomain, enableDuplicatedTicks, + defaultTickFormatter, } from './axis_utils'; import { computeXScale } from './scales'; import { AxisSpec, DomainRange, DEFAULT_GLOBAL_ID, TickFormatter } from './specs'; @@ -118,7 +119,6 @@ describe('Axis computational utils', () => { showOverlappingLabels: false, position: Position.Left, style, - tickFormat: (value: any) => `${value}`, showGridLines: true, integersOnly: false, }; @@ -133,7 +133,6 @@ describe('Axis computational utils', () => { showOverlappingLabels: false, position: Position.Top, style, - tickFormat: (value: any) => `${value}`, integersOnly: false, }; @@ -148,7 +147,6 @@ describe('Axis computational utils', () => { showOverlappingLabels: false, position: Position.Left, style, - tickFormat: (value: any) => `${value}`, showGridLines: true, integersOnly: false, }; @@ -202,7 +200,16 @@ describe('Axis computational utils', () => { test('should compute axis dimensions', () => { const bboxCalculator = new SvgTextBBoxCalculator(); - const axisDimensions = computeAxisTicksDimensions(verticalAxisSpec, xDomain, [yDomain], 1, bboxCalculator, 0, axes); + const axisDimensions = computeAxisTicksDimensions( + verticalAxisSpec, + xDomain, + [yDomain], + 1, + bboxCalculator, + 0, + axes, + (v) => `${v}`, + ); expect(axisDimensions).toEqual(axis1Dims); const ungroupedAxisSpec = { ...verticalAxisSpec, groupId: 'foo' }; @@ -214,6 +221,7 @@ describe('Axis computational utils', () => { bboxCalculator, 0, axes, + (v) => `${v}`, undefined, false, ); @@ -226,7 +234,16 @@ describe('Axis computational utils', () => { test('should not compute axis dimensions when spec is configured to hide', () => { const bboxCalculator = new CanvasTextBBoxCalculator(); verticalAxisSpec.hide = true; - const axisDimensions = computeAxisTicksDimensions(verticalAxisSpec, xDomain, [yDomain], 1, bboxCalculator, 0, axes); + const axisDimensions = computeAxisTicksDimensions( + verticalAxisSpec, + xDomain, + [yDomain], + 1, + bboxCalculator, + 0, + axes, + (v) => `${v}`, + ); expect(axisDimensions).toBe(null); }); @@ -240,7 +257,16 @@ describe('Axis computational utils', () => { minInterval: 0, timeZone: 'utc', }; - let axisDimensions = computeAxisTicksDimensions(xAxisWithTime, xDomain, [yDomain], 1, bboxCalculator, 0, axes); + let axisDimensions = computeAxisTicksDimensions( + xAxisWithTime, + xDomain, + [yDomain], + 1, + bboxCalculator, + 0, + axes, + (v) => `${v}`, + ); expect(axisDimensions).not.toBeNull(); expect(axisDimensions?.tickLabels[0]).toBe('11:00:00'); expect(axisDimensions?.tickLabels[11]).toBe('11:55:00'); @@ -256,6 +282,7 @@ describe('Axis computational utils', () => { bboxCalculator, 0, axes, + (v) => `${v}`, ); expect(axisDimensions).not.toBeNull(); expect(axisDimensions?.tickLabels[0]).toBe('14:00:00'); @@ -272,6 +299,7 @@ describe('Axis computational utils', () => { bboxCalculator, 0, axes, + (v) => `${v}`, ); expect(axisDimensions).not.toBeNull(); expect(axisDimensions?.tickLabels[0]).toBe('08:00:00'); @@ -329,7 +357,7 @@ describe('Axis computational utils', () => { test('should compute to end of domain when histogram mode not enabled', () => { const enableHistogramMode = false; const scale = getScaleForAxisSpec(verticalAxisSpec, xDomain, [yDomain], 0, 0, 100, 0); - const axisPositions = getAvailableTicks(verticalAxisSpec, scale!, 0, enableHistogramMode); + const axisPositions = getAvailableTicks(verticalAxisSpec, scale!, 0, enableHistogramMode, (v) => `${v}`); const expectedAxisPositions = [ { label: '0', position: 100, value: 0 }, { label: '0.1', position: 90, value: 0.1 }, @@ -356,7 +384,13 @@ describe('Axis computational utils', () => { minInterval: 10, }; const xScale = getScaleForAxisSpec(horizontalAxisSpec, xBandDomain, [yDomain], 1, 0, 100, 0); - const histogramAxisPositions = getAvailableTicks(horizontalAxisSpec, xScale!, 1, enableHistogramMode); + const histogramAxisPositions = getAvailableTicks( + horizontalAxisSpec, + xScale!, + 1, + enableHistogramMode, + (v) => `${v}`, + ); const histogramTickLabels = histogramAxisPositions.map(({ label }: AxisTick) => label); expect(histogramTickLabels).toEqual(['0', '10', '20', '30', '40', '50', '60', '70', '80', '90', '100', '110']); }); @@ -371,7 +405,13 @@ describe('Axis computational utils', () => { minInterval: 90000, }; const xScale = getScaleForAxisSpec(horizontalAxisSpec, xBandDomain, [yDomain], 1, 0, 100, 0); - const histogramAxisPositions = getAvailableTicks(horizontalAxisSpec, xScale!, 1, enableHistogramMode); + const histogramAxisPositions = getAvailableTicks( + horizontalAxisSpec, + xScale!, + 1, + enableHistogramMode, + (v) => `${v}`, + ); const histogramTickValues = histogramAxisPositions.map(({ value }: AxisTick) => value); const expectedTickValues = [ @@ -403,7 +443,13 @@ describe('Axis computational utils', () => { minInterval: 90000, }; const xScale = getScaleForAxisSpec(horizontalAxisSpec, xBandDomain, [yDomain], 1, 0, 100, 0); - const histogramAxisPositions = getAvailableTicks(horizontalAxisSpec, xScale!, 1, enableHistogramMode); + const histogramAxisPositions = getAvailableTicks( + horizontalAxisSpec, + xScale!, + 1, + enableHistogramMode, + (v) => `${v}`, + ); const histogramTickValues = histogramAxisPositions.map(({ value }: AxisTick) => value); const expectedTickValues = [1560438420000, 1560438510000]; @@ -917,6 +963,7 @@ describe('Axis computational utils', () => { [yDomain], 1, false, + (v) => `${v}`, ); expect(axisTicksPosition.axisPositions.get(verticalAxisSpecWTitle.id)).toEqual({ @@ -944,6 +991,7 @@ describe('Axis computational utils', () => { [yDomain], 1, false, + (v) => `${v}`, ); expect(axisTicksPosition.axisPositions.get(verticalAxisSpecWTitle.id)).toEqual({ @@ -1143,6 +1191,7 @@ describe('Axis computational utils', () => { [yDomain], 1, false, + (v) => `${v}`, ); expect(axisTicksPosition.axisPositions.size).toBe(0); expect(axisTicksPosition.axisTicks.size).toBe(0); @@ -1172,6 +1221,7 @@ describe('Axis computational utils', () => { [yDomain], 1, false, + (v) => `${v}`, ); const expectedVerticalAxisGridLines = [ @@ -1204,6 +1254,7 @@ describe('Axis computational utils', () => { [yDomain], 1, false, + (v) => `${v}`, ); const expectedPositionWithTopLegend = { @@ -1232,6 +1283,7 @@ describe('Axis computational utils', () => { [yDomain], 1, false, + (v) => `${v}`, ); }; @@ -1478,7 +1530,7 @@ describe('Axis computational utils', () => { const scale: Scale = computeXScale({ xDomain: xDomainTime, totalBarsInCluster: 0, range: [0, 603.5] }); const offset = 0; const tickFormatOption = { timeZone: 'utc+1' }; - expect(enableDuplicatedTicks(axisSpec, scale, offset, tickFormatOption)).toEqual([ + expect(enableDuplicatedTicks(axisSpec, scale, offset, (v) => `${v}`, tickFormatOption)).toEqual([ { value: 1547208000000, label: '2019-01-11', position: 25.145833333333332 }, { value: 1547251200000, label: '2019-01-12', position: 85.49583333333334 }, { value: 1547337600000, label: '2019-01-13', position: 206.19583333333333 }, @@ -1514,7 +1566,7 @@ describe('Axis computational utils', () => { const scale: Scale = computeXScale({ xDomain: xDomainTime, totalBarsInCluster: 0, range: [0, 603.5] }); const offset = 0; const tickFormatOption = { timeZone: xDomainTime.timeZone }; - const ticks = enableDuplicatedTicks(axisSpec, scale, offset, tickFormatOption); + const ticks = enableDuplicatedTicks(axisSpec, scale, offset, (v) => `${v}`, tickFormatOption); const tickLabels = ticks.map(({ label }) => ({ label })); expect(tickLabels).toEqual([ { label: '12:00' }, @@ -1558,7 +1610,7 @@ describe('Axis computational utils', () => { const scale: Scale = computeXScale({ xDomain: xDomainTime, totalBarsInCluster: 0, range: [0, 603.5] }); const offset = 0; const tickFormatOption = { timeZone: 'utc+1' }; - expect(enableDuplicatedTicks(axisSpec, scale, offset, tickFormatOption)).toEqual([ + expect(enableDuplicatedTicks(axisSpec, scale, offset, (v) => `${v}`, tickFormatOption)).toEqual([ { value: 1547208000000, label: '2019-01-11', position: 25.145833333333332 }, { value: 1547251200000, label: '2019-01-12', position: 85.49583333333334 }, { value: 1547294400000, label: '2019-01-12', position: 145.84583333333333 }, @@ -1571,6 +1623,142 @@ describe('Axis computational utils', () => { { value: 1547596800000, label: '2019-01-16', position: 568.2958333333333 }, ]); }); + test('should use custom tick formatter', () => { + const now = DateTime.fromISO('2019-01-11T00:00:00.000') + .setZone('utc+1') + .toMillis(); + const oneDay = moment.duration(1, 'day'); + const formatter = niceTimeFormatter([now, oneDay.add(now).asMilliseconds() * 31]); + const axisSpec: AxisSpec = { + id: 'bottom', + position: 'bottom', + showDuplicatedTicks: true, + chartType: 'xy_axis', + specType: 'axis', + groupId: DEFAULT_GLOBAL_ID, + hide: false, + showOverlappingLabels: false, + showOverlappingTicks: false, + style, + tickFormat: formatter, + }; + const xDomainTime: XDomain = { + type: 'xDomain', + isBandScale: false, + domain: [1547190000000, 1547622000000], + minInterval: 86400000, + scaleType: ScaleType.Time, + }; + const scale: Scale = computeXScale({ xDomain: xDomainTime, totalBarsInCluster: 0, range: [0, 603.5] }); + const offset = 0; + const tickFormatOption = { timeZone: 'utc+1' }; + expect(enableDuplicatedTicks(axisSpec, scale, offset, (v) => `${v}`, tickFormatOption)).toEqual([ + { value: 1547208000000, label: '2019-01-11', position: 25.145833333333332 }, + { value: 1547251200000, label: '2019-01-12', position: 85.49583333333334 }, + { value: 1547294400000, label: '2019-01-12', position: 145.84583333333333 }, + { value: 1547337600000, label: '2019-01-13', position: 206.19583333333333 }, + { value: 1547380800000, label: '2019-01-13', position: 266.54583333333335 }, + { value: 1547424000000, label: '2019-01-14', position: 326.8958333333333 }, + { value: 1547467200000, label: '2019-01-14', position: 387.24583333333334 }, + { value: 1547510400000, label: '2019-01-15', position: 447.59583333333336 }, + { value: 1547553600000, label: '2019-01-15', position: 507.9458333333333 }, + { value: 1547596800000, label: '2019-01-16', position: 568.2958333333333 }, + ]); + }); + + describe('Custom formatting', () => { + it('should get custom labels for y axis', () => { + const customFotmatter = (v: any) => `${v} custom`; + const axisSpecs = [verticalAxisSpec]; + const axesStyles = new Map(); + const axisDims = new Map(); + axisDims.set(verticalAxisSpec.id, axis1Dims); + + const axisTicksPosition = getAxisTicksPositions( + { + chartDimensions: chartDim, + leftMargin: 0, + }, + LIGHT_THEME, + 0, + axisSpecs, + axisDims, + axesStyles, + xDomain, + [yDomain], + 1, + false, + customFotmatter, + ); + + const expected = axis1Dims.tickValues + .slice() + .reverse() + .map(customFotmatter); + expect(axisTicksPosition.axisTicks.get(verticalAxisSpec.id)!.map(({ label }) => label)).toEqual(expected); + }); + + it('should not use custom formatter with x axis', () => { + const customFotmatter = (v: any) => `${v} custom`; + const axisSpecs = [horizontalAxisSpec]; + const axesStyles = new Map(); + const axisDims = new Map(); + axisDims.set(horizontalAxisSpec.id, axis1Dims); + + const axisTicksPosition = getAxisTicksPositions( + { + chartDimensions: chartDim, + leftMargin: 0, + }, + LIGHT_THEME, + 0, + axisSpecs, + axisDims, + axesStyles, + xDomain, + [yDomain], + 1, + false, + customFotmatter, + ); + + const expected = axis1Dims.tickValues.slice().map(defaultTickFormatter); + expect(axisTicksPosition.axisTicks.get(horizontalAxisSpec.id)!.map(({ label }) => label)).toEqual(expected); + }); + + it('should use custom axis tick formatter to get labels for x axis', () => { + const customFotmatter = (v: any) => `${v} custom`; + const customAxisFotmatter = (v: any) => `${v} custom`; + const spec: AxisSpec = { + ...horizontalAxisSpec, + tickFormat: customAxisFotmatter, + }; + const axisSpecs = [spec]; + const axesStyles = new Map(); + const axisDims = new Map(); + axisDims.set(spec.id, axis1Dims); + + const axisTicksPosition = getAxisTicksPositions( + { + chartDimensions: chartDim, + leftMargin: 0, + }, + LIGHT_THEME, + 0, + axisSpecs, + axisDims, + axesStyles, + xDomain, + [yDomain], + 1, + false, + customFotmatter, + ); + + const expected = axis1Dims.tickValues.slice().map(customAxisFotmatter); + expect(axisTicksPosition.axisTicks.get(spec.id)!.map(({ label }) => label)).toEqual(expected); + }); + }); }); it.todo('Test alignment calculations'); diff --git a/packages/osd-charts/src/chart_types/xy_chart/utils/axis_utils.ts b/packages/osd-charts/src/chart_types/xy_chart/utils/axis_utils.ts index 2cf210cbdd3..44b9ef88f3c 100644 --- a/packages/osd-charts/src/chart_types/xy_chart/utils/axis_utils.ts +++ b/packages/osd-charts/src/chart_types/xy_chart/utils/axis_utils.ts @@ -67,6 +67,8 @@ export interface TickLabelProps { verticalAlign: Extract; } +export const defaultTickFormatter = (tick: any) => `${tick}`; + /** * Compute the ticks values and identify max width and height of the labels * so we can compute the max space occupied by the axis component. @@ -86,6 +88,7 @@ export function computeAxisTicksDimensions( bboxCalculator: BBoxCalculator, chartRotation: Rotation, { gridLine, tickLabel }: AxisStyle, + fallBackTickFormatter: TickFormatter, barsPadding?: number, enableHistogramMode?: boolean, ): AxisTicksDimensions | null { @@ -113,7 +116,7 @@ export function computeAxisTicksDimensions( const dimensions = computeTickDimensions( scale, - axisSpec.labelFormat ?? axisSpec.tickFormat, + axisSpec.labelFormat ?? axisSpec.tickFormat ?? fallBackTickFormatter, bboxCalculator, tickLabel, { timeZone: xDomain.timeZone }, @@ -507,6 +510,7 @@ export function getAvailableTicks( scale: Scale, totalBarsInCluster: number, enableHistogramMode: boolean, + fallBackTickFormatter: TickFormatter, tickFormatOptions?: TickFormatterOptions, ): AxisTick[] { const ticks = scale.ticks(); @@ -531,25 +535,26 @@ export function getAvailableTicks( const band = scale.bandwidth / (1 - scale.barsPadding); const halfPadding = (band - scale.bandwidth) / 2; const offset = enableHistogramMode ? -halfPadding : (scale.bandwidth * shift) / 2; + const tickFormatter = axisSpec.tickFormat ?? fallBackTickFormatter; if (isSingleValueScale && hasAdditionalTicks) { - const firstTickValue = ticks[0]; + const [firstTickValue] = ticks; const firstTick = { value: firstTickValue, - label: axisSpec.tickFormat(firstTickValue, tickFormatOptions), + label: tickFormatter(firstTickValue, tickFormatOptions), position: (scale.scale(firstTickValue) ?? 0) + offset, }; const lastTickValue = firstTickValue + scale.minInterval; const lastTick = { value: lastTickValue, - label: axisSpec.tickFormat(lastTickValue, tickFormatOptions), + label: tickFormatter(lastTickValue, tickFormatOptions), position: scale.bandwidth + halfPadding * 2, }; return [firstTick, lastTick]; } - return enableDuplicatedTicks(axisSpec, scale, offset, tickFormatOptions); + return enableDuplicatedTicks(axisSpec, scale, offset, fallBackTickFormatter, tickFormatOptions); } /** @internal */ @@ -557,13 +562,14 @@ export function enableDuplicatedTicks( axisSpec: AxisSpec, scale: Scale, offset: number, + fallBackTickFormatter: TickFormatter, tickFormatOptions?: TickFormatterOptions, -) { +): AxisTick[] { const ticks = scale.ticks(); const allTicks: AxisTick[] = ticks.map((tick) => ({ value: tick, // TODO handle empty string tick formatting - label: axisSpec.tickFormat(tick, tickFormatOptions), + label: (axisSpec.tickFormat ?? fallBackTickFormatter)(tick, tickFormatOptions), position: (scale.scale(tick) ?? 0) + offset, })); @@ -685,6 +691,7 @@ export function getAxisTicksPositions( yDomain: YDomain[], totalGroupsCount: number, enableHistogramMode: boolean, + fallBackTickFormatter: TickFormatter, barsPadding?: number, ): { axisPositions: Map; @@ -731,9 +738,17 @@ export function getAxisTicksPositions( timeZone: xDomain.timeZone, }; const { axisTitle, tickLine, tickLabel, gridLine } = axesStyles.get(id) ?? sharedAxesStyle; - const allTicks = getAvailableTicks(axisSpec, scale, totalGroupsCount, enableHistogramMode, tickFormatOptions); - const visibleTicks = getVisibleTicks(allTicks, axisSpec, axisDim); const isVertical = isVerticalAxis(axisSpec.position); + const allTicks = getAvailableTicks( + axisSpec, + scale, + totalGroupsCount, + enableHistogramMode, + isVertical ? fallBackTickFormatter : defaultTickFormatter, + tickFormatOptions, + ); + + const visibleTicks = getVisibleTicks(allTicks, axisSpec, axisDim); const axisSpecConfig = axisSpec.gridLine; const gridLineThemeStyles = isVertical ? gridLine.vertical : gridLine.horizontal; const gridLineStyles = axisSpecConfig ? mergePartial(gridLineThemeStyles, axisSpecConfig) : gridLineThemeStyles; diff --git a/packages/osd-charts/src/chart_types/xy_chart/utils/specs.ts b/packages/osd-charts/src/chart_types/xy_chart/utils/specs.ts index 32d37ecfb56..7d4625d57d7 100644 --- a/packages/osd-charts/src/chart_types/xy_chart/utils/specs.ts +++ b/packages/osd-charts/src/chart_types/xy_chart/utils/specs.ts @@ -382,6 +382,11 @@ export interface SeriesSpec extends Spec { * Hide series in tooltip */ filterSeriesInTooltip?: FilterPredicate; + /** + * A function called to format every value label. + * Uses axis `tickFormat` when not provided. + */ + tickFormat?: TickFormatter; } export interface Postfixes { @@ -621,11 +626,14 @@ export interface AxisSpec extends Spec { /** Where the axis appear on the chart */ position: Position; /** - * A function called to format every single tick label (includes tooltip) + * A function called to format every tick value label. + * Uses first series spec `tickFormat` when not provided. + * + * used in tooltip when no `tickFormat` is provided from series spec */ - tickFormat: TickFormatter; + tickFormat?: TickFormatter; /** - * A function called to format every single label (excludes tooltip) + * A function called to format every label (excludes tooltip) * * overrides tickFormat for axis labels */ diff --git a/packages/osd-charts/stories/axes/6a_different_tooltip_formatter.tsx b/packages/osd-charts/stories/axes/6a_different_tooltip_formatter.tsx new file mode 100644 index 00000000000..62cdd2ac170 --- /dev/null +++ b/packages/osd-charts/stories/axes/6a_different_tooltip_formatter.tsx @@ -0,0 +1,96 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { text, boolean } from '@storybook/addon-knobs'; +import numeral from 'numeral'; +import React from 'react'; + +import { Axis, Chart, LineSeries, Position, ScaleType, Settings } from '../../src'; +import { SB_SOURCE_PANEL } from '../utils/storybook'; + +export const Example = () => { + const showLegend = boolean('Show legend', true); + const disableAxisFormat = boolean('Disable Y Axis tickFormat', false); + const axisFormat = text('Y Axis value format', '0[.]0'); + const axisUnit = text('Y Axis unit', 'pets'); + const disableDogLineFormat = boolean('Disable dog line tickFormat', false); + const dogLineFormat = text('Dog line unit', 'dogs'); + const disableCatLineFormat = boolean('Disable cat line tickFormat', false); + const catLineFormat = text('Cat line unit', 'cats'); + + return ( + + + + `${numeral(d).format(axisFormat)}${axisUnit ? ` ${axisUnit}` : ''}` + } + /> + `${Number(d).toFixed(2)} ${dogLineFormat}`} + data={[ + { x: 'USA', y: 8 }, + { x: 'Canada', y: 7 }, + { x: 'Mexico', y: 18 }, + ]} + /> + `${Number(d).toFixed(2)} ${catLineFormat}`} + data={[ + { x: 'USA', y: 14 }, + { x: 'Canada', y: 15 }, + { x: 'Mexico', y: 14 }, + ]} + /> + + ); +}; + +// storybook configuration +Example.story = { + parameters: { + options: { selectedPanel: SB_SOURCE_PANEL }, + info: { + text: 'Using a single axis with different unit types is discouraged. ', + }, + }, +}; diff --git a/packages/osd-charts/stories/axes/axes.stories.tsx b/packages/osd-charts/stories/axes/axes.stories.tsx index 18318051506..8b9f826468e 100644 --- a/packages/osd-charts/stories/axes/axes.stories.tsx +++ b/packages/osd-charts/stories/axes/axes.stories.tsx @@ -32,6 +32,7 @@ export { Example as with4Axes } from './3_axis_4_axes'; export { Example as multiAxes } from './4_multi_axis'; export { Example as barsAndLines } from './5_multi_axis_bar_lines'; export { Example as differentTooltip } from './6_different_tooltip'; +export { Example as differentTooltipFormatter } from './6a_different_tooltip_formatter'; export { Example as manyTickLabels } from './7_many_tick_labels'; export { Example as customDomain } from './8_custom_domain'; export { Example as customMixed } from './9_custom_mixed_domain';