From 83919ffe294257839d360b589ce10f405e04af5b Mon Sep 17 00:00:00 2001 From: Nick Partridge Date: Wed, 30 Sep 2020 16:39:29 -0500 Subject: [PATCH] feat: debug state flag added to chart status (#834) --- api/charts.api.md | 50 +++- ...ns-basic-visually-looks-correct-1-snap.png | Bin 0 -> 26625 bytes ...ug-state-visually-looks-correct-1-snap.png | Bin 0 -> 57616 bytes .../goal_chart/state/chart_state.tsx | 6 + .../partition_chart/state/chart_state.tsx | 6 + .../xy_chart/rendering/rendering.ts | 1 + .../xy_chart/state/chart_state.tsx | 5 + .../state/selectors/get_debug_state.ts | 254 ++++++++++++++++++ src/chart_types/xy_chart/state/utils/spec.ts | 5 +- src/components/chart_status.tsx | 31 ++- src/index.ts | 10 +- src/specs/settings.tsx | 11 + src/state/chart_state.ts | 7 + src/state/selectors/get_debug_state.ts | 33 +++ src/state/types.ts | 92 +++++++ src/utils/accessor.ts | 14 +- src/utils/themes/theme.ts | 2 +- stories/debug/1_basic.tsx | 65 +++++ stories/debug/2_debug_state.tsx | 108 ++++++++ stories/debug/debug.stories.tsx | 30 +++ 20 files changed, 712 insertions(+), 18 deletions(-) create mode 100644 integration/tests/__image_snapshots__/all-test-ts-baseline-visual-tests-for-all-stories-debug-options-basic-visually-looks-correct-1-snap.png create mode 100644 integration/tests/__image_snapshots__/all-test-ts-baseline-visual-tests-for-all-stories-debug-options-debug-state-visually-looks-correct-1-snap.png create mode 100644 src/chart_types/xy_chart/state/selectors/get_debug_state.ts create mode 100644 src/state/selectors/get_debug_state.ts create mode 100644 src/state/types.ts create mode 100644 stories/debug/1_basic.tsx create mode 100644 stories/debug/2_debug_state.tsx create mode 100644 stories/debug/debug.stories.tsx diff --git a/api/charts.api.md b/api/charts.api.md index 7e5eb22536..e28fb00276 100644 --- a/api/charts.api.md +++ b/api/charts.api.md @@ -8,9 +8,18 @@ import { $Values } from 'utility-types'; import { ComponentType } from 'react'; import React from 'react'; +// @public +export type Accessor = AccessorObjectKey | AccessorArrayIndex; + +// @public +export type AccessorArrayIndex = number; + // @public export type AccessorFn = UnaryAccessorFn; +// @public +export type AccessorObjectKey = string; + // @public export type AnnotationDomainType = $Values; @@ -149,8 +158,6 @@ export interface AxisSpec extends Spec { export interface AxisStyle { // (undocumented) axisLine: StrokeStyle & Visible; - // Warning: (ae-forgotten-export) The symbol "Visible" needs to be exported by the entry point index.d.ts - // // (undocumented) axisTitle: TextStyle & Visible; // (undocumented) @@ -486,6 +493,32 @@ export interface DataSeriesDatum { // @public (undocumented) export type Datum = any; +// Warning: (ae-missing-release-tag) "DebugState" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface DebugState { + // Warning: (ae-forgotten-export) The symbol "DebugStateArea" needs to be exported by the entry point index.d.ts + // + // (undocumented) + areas?: DebugStateArea[]; + // Warning: (ae-forgotten-export) The symbol "DebugStateAxes" needs to be exported by the entry point index.d.ts + // + // (undocumented) + axes?: DebugStateAxes; + // Warning: (ae-forgotten-export) The symbol "DebugStateBar" needs to be exported by the entry point index.d.ts + // + // (undocumented) + bars?: DebugStateBar[]; + // Warning: (ae-forgotten-export) The symbol "DebugStateLegend" needs to be exported by the entry point index.d.ts + // + // (undocumented) + legend?: DebugStateLegend; + // Warning: (ae-forgotten-export) The symbol "DebugStateLine" needs to be exported by the entry point index.d.ts + // + // (undocumented) + lines?: DebugStateLine[]; +} + // Warning: (ae-missing-release-tag) "DEFAULT_ANNOTATION_LINE_STYLE" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -1218,7 +1251,6 @@ export interface SeriesAccessors { markSizeAccessor?: Accessor | AccessorFn; splitSeriesAccessors?: Accessor[]; stackAccessors?: Accessor[]; - // Warning: (ae-forgotten-export) The symbol "Accessor" needs to be exported by the entry point index.d.ts xAccessor: Accessor | AccessorFn; y0Accessors?: Accessor[]; yAccessors: Accessor[]; @@ -1330,9 +1362,10 @@ export interface SettingsSpec extends Spec { animateData: boolean; baseTheme?: Theme; brushAxis?: BrushAxis; - // (undocumented) debug: boolean; // @alpha + debugState?: boolean; + // @alpha externalPointerEvents: ExternalPointerEventsSettings; flatLegend?: boolean; hideDuplicateAxes: boolean; @@ -1340,7 +1373,6 @@ export interface SettingsSpec extends Spec { // (undocumented) legendColorPicker?: LegendColorPicker; legendMaxDepth?: number; - // (undocumented) legendPosition: Position; minBrushDelta?: number; // (undocumented) @@ -1614,6 +1646,14 @@ export const VerticalAlignment: Readonly<{ // @public export type VerticalAlignment = $Values; +// Warning: (ae-missing-release-tag) "Visible" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface Visible { + // (undocumented) + visible: boolean; +} + // Warning: (ae-missing-release-tag) "XYBrushArea" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) diff --git a/integration/tests/__image_snapshots__/all-test-ts-baseline-visual-tests-for-all-stories-debug-options-basic-visually-looks-correct-1-snap.png b/integration/tests/__image_snapshots__/all-test-ts-baseline-visual-tests-for-all-stories-debug-options-basic-visually-looks-correct-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..31caf02a666f64de076c64c1a1eef2e27c7b54e2 GIT binary patch literal 26625 zcmbrmWmr{hyDki(f;5P9h)8!gNTZY}(k0#9snXpb-QC?SC0)|p-5vA0r_a0Iz4lsr zul?iu@f^=QWH82HjQhT>v#uHNQC0#45g!o-1_tH5r06FYm?t|hFtA1l&%wX!w(0MI z|H0aRk`RU|86pHfc@6VkR7k-oX@9|4UE$)f=VXeG$&AJ9cSaty1sCGsPx5+w43q4| zLi=&Lx$2-;{n*8cie$w~H5Fr5)z~WoW5v}c`akQx(&YL7$fshZ8DQ$ac@UBjEKPuW zVu&j++~d^)x9PT(G`u~Kbaj(*bVD4HL4_!cKW>Z?lm8eq7Q2 z|NBXl-t}ydb7!WK(spa;OCuIIElRZJ!4q%vRbheaWjGdA*5O7ze*R<$689=%+FR4n z(b1pM6slE5=?>K3*6^ub?0}n_DpFyMjEsb#qNZNyjUe;(_8zG*SA$WlG0Qh_HpJsF z!|n7%`P_&MJ^fE{c`UJmH{R$SpBY>4S%R?X-;k60C}}!B`_}1)cD5SCczQN0s9QN> zG*v=$HE)a7*VhL#Z$G7Re?BfZ@3aj^Ji~nn7{{V=>e5FE|+tv@f?}V zygdK$T)CHcczqjjT0`r7Q7=$Y4G!n)-A=l2g7Mh{cgAxob-EA@1{1^@9S)S6oS4D& zSF5Kqb$|I|3?y+!Ei^iw4X_TEnNBez$x?#9Hkgn*lEAX5ToZBt-UAyU3xx*4Xqrl~ z;$hR7Y|G6i0eBWdA3h)^a$0T<@g8NRr7Z{7^vBX?%B2d}9n8ke&#ULirFsn6rwF(w ze9o1%9%P@g+AFSIJvtg5%a&3p(}sn)T5u#8Oyo4&8OtuxY);rpaYYpr6xz#iith*dXA!VcX_bC)SCLISS_`D2%BE@ zxQ{Xw{9gHtnceP0KyWa!jjb�wSW$<^IgP$KAnU8f4h>F$%m}+doFts<8fnfgO4* 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 { + const seriesNameMap = getSeriesNameMap(legend); + + return { + legend: getLegendState(legend), + axes: getAxes(axes, axesSpecs), + areas: geometries.areas.map(getAreaState(seriesNameMap)), + lines: geometries.lines.map(getLineState(seriesNameMap)), + bars: getBarsState(seriesNameMap, geometries.bars), + }; + }, +)(getChartIdSelector); + +const getAxes = (ticks: AxisVisibleTicks, axesSpecs: AxisSpec[]): DebugStateAxes | undefined => { + if (axesSpecs.length === 0) { + return; + } + + return axesSpecs.reduce( + (acc, { position, title, id }) => { + const axisTicks = ticks.axisVisibleTicks.get(id) ?? []; + const labels = axisTicks.map(({ label }) => label); + const values = axisTicks.map(({ value }) => value); + const grids = ticks.axisGridLinesPositions.get(id) ?? []; + const gridlines = grids.map(([x, y]) => ({ x, y })); + + if (isVerticalAxis(position)) { + acc.y.push({ + id, + title, + position, + // reverse for bottom/up coordinates + labels: labels.reverse(), + values: values.reverse(), + gridlines: gridlines.reverse(), + }); + } else { + acc.x.push({ + id, + title, + position, + labels, + values, + gridlines, + }); + } + + return acc; + }, + { + y: [], + x: [], + }, + ); +}; + +const getBarsState = (seriesNameMap: Map, barGeometries: BarGeometry[]): DebugStateBar[] => { + const buckets = new Map(); + + barGeometries.forEach( + ({ + color, + seriesIdentifier: { key }, + seriesStyle: { rect, rectBorder }, + value: { x, y, mark }, + displayValue, + }: BarGeometry) => { + const label = displayValue?.text; + const name = seriesNameMap.get(key) ?? ''; + const bucket: DebugStateBar = buckets.get(key) ?? { + key, + name, + color, + bars: [], + labels: [], + visible: hasVisibleStyle(rect) || hasVisibleStyle(rectBorder), + }; + + bucket.bars.push({ x, y, mark }); + + if (label) { + bucket.labels.push(label); + } + + buckets.set(key, bucket); + + return buckets; + }, + ); + + return [...buckets.values()]; +}; + +const getLineState = (seriesNameMap: Map) => ({ + line: path, + points, + color, + seriesIdentifier: { key }, + seriesLineStyle, + seriesPointStyle, +}: LineGeometry): DebugStateLine => { + const name = seriesNameMap.get(key) ?? ''; + + return { + path, + color, + key, + name, + visible: hasVisibleStyle(seriesLineStyle), + visiblePoints: hasVisibleStyle(seriesPointStyle), + points: points.map(({ value: { x, y, mark } }) => ({ x, y, mark })), + }; +}; + +const getAreaState = (seriesNameMap: Map) => ({ + area: path, + lines, + points, + color, + seriesIdentifier: { key }, + seriesAreaStyle, + seriesPointStyle, + seriesAreaLineStyle, +}: AreaGeometry): DebugStateArea => { + const [y1Path, y0Path] = lines; + const linePoints = points.reduce<{ + y0: DebugStateValue[]; + y1: DebugStateValue[]; + }>( + (acc, { value: { accessor, ...value } }) => { + if (accessor === BandedAccessorType.Y0) { + acc.y0.push(value); + } else { + acc.y1.push(value); + } + + return acc; + }, + { + y0: [], + y1: [], + }, + ); + const lineVisible = hasVisibleStyle(seriesAreaLineStyle); + const visiblePoints = hasVisibleStyle(seriesPointStyle); + const name = seriesNameMap.get(key) ?? ''; + + return { + path, + color, + key, + name, + visible: hasVisibleStyle(seriesAreaStyle), + lines: { + y0: y0Path + ? { + visible: lineVisible, + path: y0Path, + points: linePoints.y0, + visiblePoints, + } + : undefined, + y1: { + visible: lineVisible, + path: y1Path, + points: linePoints.y1, + visiblePoints, + }, + }, + }; +}; + +/** + * returns series key to name mapping + */ +function getSeriesNameMap(legendItems: LegendItem[]): Map { + return legendItems.reduce((acc, { label: name, seriesIdentifier: { key } }) => { + acc.set(key, name); + return acc; + }, new Map()); +} + +function getLegendState(legendItems: LegendItem[]): DebugStateLegend { + const items = legendItems + .filter(({ isSeriesHidden }) => !isSeriesHidden) + .map(({ label: name, color, seriesIdentifier: { key } }) => ({ + key, + name, + color, + })); + + return { items }; +} + +/** + * Returns true for styles if they are visible + * Serves as a catchall for multiple style types + */ +function hasVisibleStyle({ + visible = true, + fill = '#fff', + stroke = '#fff', + strokeWidth = 1, + opacity = 1, +}: Partial): boolean { + return Boolean(visible && opacity > 0 && strokeWidth > 0 && fill && stroke); +} diff --git a/src/chart_types/xy_chart/state/utils/spec.ts b/src/chart_types/xy_chart/state/utils/spec.ts index a0ef591fad..da23d7d0f5 100644 --- a/src/chart_types/xy_chart/state/utils/spec.ts +++ b/src/chart_types/xy_chart/state/utils/spec.ts @@ -28,8 +28,8 @@ export function getSpecsById(specs: T[], id: string): T | undefi /** @internal */ export function getAxesSpecForSpecId(axesSpecs: AxisSpec[], groupId: GroupId) { - let xAxis; - let yAxis; + let xAxis: AxisSpec | undefined; + let yAxis: AxisSpec | undefined; // eslint-disable-next-line no-restricted-syntax for (const axisSpec of axesSpecs) { if (axisSpec.groupId !== groupId) { @@ -41,6 +41,7 @@ export function getAxesSpecForSpecId(axesSpecs: AxisSpec[], groupId: GroupId) { xAxis = axisSpec; } } + return { xAxis, yAxis, diff --git a/src/components/chart_status.tsx b/src/components/chart_status.tsx index 81496eee06..e68d88573a 100644 --- a/src/components/chart_status.tsx +++ b/src/components/chart_status.tsx @@ -22,12 +22,15 @@ import { connect } from 'react-redux'; import { RenderChangeListener } from '../specs'; import { GlobalChartState } from '../state/chart_state'; +import { getDebugStateSelector } from '../state/selectors/get_debug_state'; import { getSettingsSpecSelector } from '../state/selectors/get_settings_specs'; +import { DebugState } from '../state/types'; interface ChartStatusStateProps { rendered: boolean; renderedCount: number; onRenderChange?: RenderChangeListener; + debugState: DebugState | null; } class ChartStatusComponent extends React.Component { componentDidMount() { @@ -48,16 +51,30 @@ class ChartStatusComponent extends React.Component { }; render() { - const { rendered, renderedCount } = this.props; - return

; + const { rendered, renderedCount, debugState } = this.props; + const debugStateString: string | null = debugState && JSON.stringify(debugState); + + return ( +
+ ); } } -const mapStateToProps = (state: GlobalChartState): ChartStatusStateProps => ({ - rendered: state.chartRendered, - renderedCount: state.chartRenderedCount, - onRenderChange: getSettingsSpecSelector(state).onRenderChange, -}); +const mapStateToProps = (state: GlobalChartState): ChartStatusStateProps => { + const settings = getSettingsSpecSelector(state); + + return { + rendered: state.chartRendered, + renderedCount: state.chartRenderedCount, + onRenderChange: settings.onRenderChange, + debugState: settings.debugState ? getDebugStateSelector(state) : null, + }; +}; /** @internal */ export const ChartStatus = connect(mapStateToProps)(ChartStatusComponent); diff --git a/src/index.ts b/src/index.ts index b6eb816f89..5ddc96bd6c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -26,6 +26,7 @@ export { SpecId, GroupId, AxisId, AnnotationId } from './utils/ids'; // Everything related to the specs types and react-components export * from './specs'; +export { DebugState } from './state/types'; export { CurveType } from './utils/curves'; export { SimplePadding } from './utils/dimensions'; export { timeFormatter, niceTimeFormatter, niceTimeFormatByDay } from './utils/data/formatters'; @@ -41,7 +42,14 @@ export { } from './chart_types/partition_chart/layout/types/config_types'; export { Layer as PartitionLayer } from './chart_types/partition_chart/specs/index'; export * from './chart_types/goal_chart/specs/index'; -export { AccessorFn, IndexedAccessorFn, UnaryAccessorFn } from './utils/accessor'; +export { + Accessor, + AccessorFn, + IndexedAccessorFn, + UnaryAccessorFn, + AccessorObjectKey, + AccessorArrayIndex, +} from './utils/accessor'; export { CustomTooltip, TooltipInfo } from './components/tooltip/types'; // scales diff --git a/src/specs/settings.tsx b/src/specs/settings.tsx index f61fb569cb..a1f8df78c2 100644 --- a/src/specs/settings.tsx +++ b/src/specs/settings.tsx @@ -290,7 +290,18 @@ export interface SettingsSpec extends Spec { * @alpha */ externalPointerEvents: ExternalPointerEventsSettings; + /** + * Show debug shadow elements on chart + */ debug: boolean; + /** + * Show debug render state on `ChartStatus` component + * @alpha + */ + debugState?: boolean; + /** + * Set legend position + */ legendPosition: Position; /** * Show an extra parameter on each legend item defined by the chart type diff --git a/src/state/chart_state.ts b/src/state/chart_state.ts index d46123181f..0d018fe656 100644 --- a/src/state/chart_state.ts +++ b/src/state/chart_state.ts @@ -42,6 +42,7 @@ import { interactionsReducer } from './reducers/interactions'; import { getInternalIsInitializedSelector, InitStatus } from './selectors/get_internal_is_intialized'; import { getLegendItemsSelector } from './selectors/get_legend_items'; import { LegendItemLabel } from './selectors/get_legend_items_labels'; +import { DebugState } from './types'; import { getInitialPointerState } from './utils'; export type BackwardRef = () => React.RefObject; @@ -140,6 +141,12 @@ export interface InternalChartState { * @param globalState */ getBrushArea(globalState: GlobalChartState): Dimensions | null; + + /** + * Get debug state of chart + * @param globalState + */ + getDebugState(globalState: GlobalChartState): DebugState; } /** @internal */ diff --git a/src/state/selectors/get_debug_state.ts b/src/state/selectors/get_debug_state.ts new file mode 100644 index 0000000000..f71421ea43 --- /dev/null +++ b/src/state/selectors/get_debug_state.ts @@ -0,0 +1,33 @@ +/* + * 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 { GlobalChartState } from '../chart_state'; +import { DebugState } from '../types'; +import { getChartContainerDimensionsSelector } from './get_chart_container_dimensions'; + +/** @internal */ +export const getDebugStateSelector = (state: GlobalChartState): DebugState => { + if (state.internalChartState) { + const { height, width } = getChartContainerDimensionsSelector(state); + if (height * width > 0) { + return state.internalChartState.getDebugState(state); + } + } + return {}; +}; diff --git a/src/state/types.ts b/src/state/types.ts new file mode 100644 index 0000000000..2ee5b5d6a9 --- /dev/null +++ b/src/state/types.ts @@ -0,0 +1,92 @@ +/* + * 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 { Position } from '../utils/commons'; +import { GeometryValue } from '../utils/geometry'; + +export interface DebugStateAxis { + id: string; + position: Position; + title?: string; + labels: string[]; + values: any[]; + gridlines: { + y: number; + x: number; + }[]; +} + +export interface DebugStateAxes { + x: DebugStateAxis[]; + y: DebugStateAxis[]; +} + +export interface DebugStateLegendItem { + key: string; + name: string; + color: string; +} + +export interface DebugStateLegend { + items: DebugStateLegendItem[]; +} + +interface DebugStateBase { + key: string; + name: string; + color: string; +} + +export type DebugStateValue = Pick; + +interface DebugStateLineConfig { + visible: boolean; + path: string; + points: DebugStateValue[]; + visiblePoints: boolean; +} + +export interface DebugStateLine extends DebugStateBase, DebugStateLineConfig {} + +export type DebugStateArea = Omit & { + path: string; + lines: { + y0?: DebugStateLineConfig; + y1: DebugStateLineConfig; + }; +}; + +export type DebugStateBar = DebugStateBase & { + visible: boolean; + bars: DebugStateValue[]; + labels: any[]; +}; + +/** + * Describes _visible_ chart state for use in functional tests + * + * TODO: add other chart types to debug state + */ +export interface DebugState { + legend?: DebugStateLegend; + axes?: DebugStateAxes; + areas?: DebugStateArea[]; + lines?: DebugStateLine[]; + bars?: DebugStateBar[]; +} diff --git a/src/utils/accessor.ts b/src/utils/accessor.ts index 1230d24abd..175c8ad9c8 100644 --- a/src/utils/accessor.ts +++ b/src/utils/accessor.ts @@ -45,8 +45,18 @@ export type AccessorFn = UnaryAccessorFn; * @public */ export type IndexedAccessorFn = UnaryAccessorFn | BinaryAccessorFn; -type AccessorObjectKey = string; -type AccessorArrayIndex = number; + +/** + * A key accessor string + * @public + */ +export type AccessorObjectKey = string; + +/** + * An index accessor number + * @public + */ +export type AccessorArrayIndex = number; /** * A datum accessor in form of object key accessor string/number diff --git a/src/utils/themes/theme.ts b/src/utils/themes/theme.ts index ad87e556bb..451d80b976 100644 --- a/src/utils/themes/theme.ts +++ b/src/utils/themes/theme.ts @@ -28,7 +28,7 @@ import { import { Margins, SimplePadding } from '../dimensions'; import { LIGHT_THEME } from './light_theme'; -interface Visible { +export interface Visible { visible: boolean; } diff --git a/stories/debug/1_basic.tsx b/stories/debug/1_basic.tsx new file mode 100644 index 0000000000..245644b343 --- /dev/null +++ b/stories/debug/1_basic.tsx @@ -0,0 +1,65 @@ +/* + * 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 { boolean } from '@storybook/addon-knobs'; +import React from 'react'; + +import { Chart, ScaleType, Settings, Position, Axis, BarSeries, AreaSeries, CurveType } from '../../src'; + +export const Example = () => { + const debug = boolean('debug', true); + + return ( + + + + Number(d).toFixed(2)} /> + + Number(d).toFixed(2)} /> + + + + ); +}; diff --git a/stories/debug/2_debug_state.tsx b/stories/debug/2_debug_state.tsx new file mode 100644 index 0000000000..6866fe5042 --- /dev/null +++ b/stories/debug/2_debug_state.tsx @@ -0,0 +1,108 @@ +/* + * 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 { action } from '@storybook/addon-actions'; +import { boolean, number } from '@storybook/addon-knobs'; +import React from 'react'; +import { debounce } from 'ts-debounce'; + +import { + Chart, + LineSeries, + ScaleType, + CurveType, + AreaSeries, + BarSeries, + Settings, + Axis, + Position, + SeriesNameFn, + DebugState, +} from '../../src'; +import { SeededDataGenerator } from '../../src/mocks/utils'; + +export const Example = () => { + const debug = boolean('debug', false); + const debugState = boolean('debugState', true); + const line = boolean('show line', true); + const area = boolean('show area', true); + const bar = boolean('show bar', true); + const groupCount = number('number of groups', 1, { min: 1 }); + const splitSeriesAccessors = groupCount > 1 ? ['g'] : undefined; + const naming: SeriesNameFn | undefined = + groupCount === 1 ? undefined : ({ specId, seriesKeys }) => `${specId} | ${seriesKeys[0]}`; + + const dg = new SeededDataGenerator(); + const lineData = dg.generateGroupedSeries(40, groupCount); + const areaData = dg.generateGroupedSeries(40, groupCount); + const barData = dg.generateGroupedSeries(40, groupCount); + + const dataStateAction = action('DataState'); + const logDebugstate = debounce(() => { + const statusEl = document.querySelector('.echChartStatus'); + + if (statusEl) { + const dataState = statusEl.dataset.echDebugState + ? (JSON.parse(statusEl.dataset.echDebugState) as DebugState) + : null; + dataStateAction(dataState); + } + }, 100); + + return ( + + + + Number(d).toFixed(2)} /> + + {line && ( + + )} + {area && ( + + )} + + {bar && ( + + )} + + ); +}; diff --git a/stories/debug/debug.stories.tsx b/stories/debug/debug.stories.tsx new file mode 100644 index 0000000000..837488be72 --- /dev/null +++ b/stories/debug/debug.stories.tsx @@ -0,0 +1,30 @@ +/* + * 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 { SB_SOURCE_PANEL } from '../utils/storybook'; + +export default { + title: 'Debug Options', + parameters: { + options: { selectedPanel: SB_SOURCE_PANEL }, + }, +}; + +export { Example as basic } from './1_basic'; +export { Example as debugState } from './2_debug_state';