From 7b3f3d8af0fffb1fdd7a14c507347370e685f7cf Mon Sep 17 00:00:00 2001 From: Krist Wongsuphasawat Date: Mon, 1 Apr 2019 13:56:13 -0700 Subject: [PATCH] feat: update tooltip and use selector (#31) --- .../preset-chart-xy/Line/stories/missing.tsx | 2 +- .../superset-ui-plugins-demo/tsconfig.json | 23 ++++++++++------- .../src/Line/Line.tsx | 19 +++++++++++--- .../src/Line/createTooltip.tsx | 25 ++++++++++++++----- .../src/components/tooltip/TooltipTable.tsx | 13 +++++----- 5 files changed, 56 insertions(+), 26 deletions(-) diff --git a/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-plugins-demo/storybook/stories/preset-chart-xy/Line/stories/missing.tsx b/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-plugins-demo/storybook/stories/preset-chart-xy/Line/stories/missing.tsx index 1f383eabdd02..1da18ec62ed0 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-plugins-demo/storybook/stories/preset-chart-xy/Line/stories/missing.tsx +++ b/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-plugins-demo/storybook/stories/preset-chart-xy/Line/stories/missing.tsx @@ -8,7 +8,7 @@ const missingData = { keys: data.keys, values: data.values.map(({ y, ...rest }) => ({ ...rest, - y: Math.random() < 0.05 ? null : y, + y: Math.random() < 0.25 ? null : y, })), }; diff --git a/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-plugins-demo/tsconfig.json b/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-plugins-demo/tsconfig.json index 422d28d50110..63dc06f7c881 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-plugins-demo/tsconfig.json +++ b/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-plugins-demo/tsconfig.json @@ -1,23 +1,28 @@ { "compilerOptions": { + "allowJs": true, + "allowSyntheticDefaultImports": true, "baseUrl": ".", "outDir": "./dist", - "module": "commonjs", - "target": "es5", - "lib": ["es6", "dom"], - "sourceMap": true, - "allowJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "importHelpers": true, "jsx": "react", + "lib": ["dom", "esnext"], + "module": "commonjs", "moduleResolution": "node", - "forceConsistentCasingInFileNames": true, + "noEmitOnError": true, "noImplicitReturns": true, "noImplicitThis": true, "noImplicitAny": true, - "importHelpers": true, + "noUnusedLocals": true, + "pretty": true, + "removeComments": false, "strictNullChecks": true, "suppressImplicitAnyIndexErrors": true, - "noUnusedLocals": true, - "skipLibCheck": true + "skipLibCheck": true, + "sourceMap": true, + "target": "esnext" }, "include": ["./storybook/stories/**/*", "../superset-ui-*/src/**/*", "./src/**/*", "./spec/**/*"] } diff --git a/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-preset-chart-xy/src/Line/Line.tsx b/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-preset-chart-xy/src/Line/Line.tsx index 26d5113ab7c5..481d94a10b46 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-preset-chart-xy/src/Line/Line.tsx +++ b/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-preset-chart-xy/src/Line/Line.tsx @@ -12,6 +12,7 @@ import { import { chartTheme, ChartTheme } from '@data-ui/theme'; import { Margin, Dimension } from '@superset-ui/dimension'; import { groupBy, flatMap, uniqueId, values } from 'lodash'; +import { createSelector } from 'reselect'; import createTooltip from './createTooltip'; import XYChartLayout from '../utils/XYChartLayout'; import WithLegend from '../components/WithLegend'; @@ -59,13 +60,22 @@ class LineChart extends PureComponent { constructor(props: Props) { super(props); - const { encoding } = this.props; - this.encoder = new Encoder({ encoding }); + const createEncoder = createSelector( + (enc: Encoding) => enc, + (enc: Encoding) => new Encoder({ encoding: enc }), + ); + + this.createEncoder = () => { + this.encoder = createEncoder(this.props.encoding); + }; + + this.encoder = createEncoder(this.props.encoding); this.renderChart = this.renderChart.bind(this); } encoder: Encoder; + private createEncoder: () => void; renderChart(dim: Dimension) { const { width, height } = dim; @@ -113,6 +123,7 @@ class LineChart extends PureComponent { />, { } render() { - const { className, data, width, height, encoding } = this.props; + const { className, data, width, height } = this.props; - this.encoder = new Encoder({ encoding }); + this.createEncoder(); const renderLegend = this.encoder.hasLegend() ? // eslint-disable-next-line react/jsx-props-no-multi-spaces () => data={data} encoder={this.encoder} /> diff --git a/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-preset-chart-xy/src/Line/createTooltip.tsx b/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-preset-chart-xy/src/Line/createTooltip.tsx index 86f077f0d83e..d1de33e0d939 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-preset-chart-xy/src/Line/createTooltip.tsx +++ b/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-preset-chart-xy/src/Line/createTooltip.tsx @@ -6,6 +6,8 @@ import TooltipTable from '../components/tooltip/TooltipTable'; import { Series, SeriesValue } from './Line'; import Encoder from './Encoder'; +const MARK_STYLE = { marginRight: 4 }; + export default function createTooltip(encoder: Encoder, allSeries: Series[]) { function LineTooltip({ datum, @@ -31,13 +33,24 @@ export default function createTooltip(encoder: Encoder, allSeries: Series[]) { .filter(({ key }) => series[key]) .concat() .sort((a, b) => series[b.key].y - series[a.key].y) - .map(({ key, color }) => ({ + .map(({ key, color, strokeDasharray }) => ({ key, - keyStyle: { - color, - fontWeight: series[key] === datum ? 600 : 200, - }, - value: encoder.channels.y.formatValue(series[key].y), + keyColumn: ( + <> + + + + {series[key] === datum ? {key} : key} + + ), + valueColumn: encoder.channels.y.formatValue(series[key].y), }))} /> )} diff --git a/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-preset-chart-xy/src/components/tooltip/TooltipTable.tsx b/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-preset-chart-xy/src/components/tooltip/TooltipTable.tsx index 6d7ddfa5ee2c..b106a876b5cb 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-preset-chart-xy/src/components/tooltip/TooltipTable.tsx +++ b/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-preset-chart-xy/src/components/tooltip/TooltipTable.tsx @@ -1,11 +1,12 @@ -import React, { CSSProperties, PureComponent } from 'react'; +import React, { CSSProperties, PureComponent, ReactNode } from 'react'; type Props = { className?: string; data: { - key: string; + key: string | number; + keyColumn: ReactNode; keyStyle?: CSSProperties; - value: string | number; + valueColumn: ReactNode; valueStyle?: CSSProperties; }[]; }; @@ -24,11 +25,11 @@ export default class TooltipTable extends PureComponent { return ( - {data.map(({ key, keyStyle, value, valueStyle }) => ( + {data.map(({ key, keyColumn, keyStyle, valueColumn, valueStyle }, i) => ( - + ))}
{key}{keyColumn} - {value} + {valueColumn}