From d7a5d8ab85f0e5c75f6f4153839ad3372e1f8b9e Mon Sep 17 00:00:00 2001 From: Krist Wongsuphasawat Date: Fri, 24 May 2019 14:34:43 -0700 Subject: [PATCH] feat: allow overriding ChartLegend, its style and LegendGroup style (#112) * feat: support overriding maximum legend height and legend item alignment * feat: allow overriding ChartLegend, its style and LegendGroup style --- .../superset-ui-preset-chart-xy/src/Line/Line.tsx | 10 ++++++++-- .../src/components/legend/ChartLegend.tsx | 15 ++++++++++++--- .../src/components/legend/DefaultLegendGroup.tsx | 10 +++++++++- .../src/components/legend/types.ts | 2 ++ .../src/utils/selectors/createMarginSelector.tsx | 2 +- 5 files changed, 32 insertions(+), 7 deletions(-) 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 bdbb555181ee..1fb7b4dad4f4 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 @@ -16,7 +16,10 @@ import { WithLegend } from '@superset-ui/chart-composition'; import { createSelector } from 'reselect'; import Encoder, { ChannelTypes, Encoding, Outputs } from './Encoder'; import { Dataset, PlainObject } from '../encodeable/types/Data'; -import ChartLegend, { Hooks as LegendHooks } from '../components/legend/ChartLegend'; +import ChartLegend, { + Props as LegendProps, + Hooks as LegendHooks, +} from '../components/legend/ChartLegend'; import { PartialSpec } from '../encodeable/types/Specification'; import DefaultTooltipRenderer from './DefaultTooltipRenderer'; import createMarginSelector, { DEFAULT_MARGIN } from '../utils/selectors/createMarginSelector'; @@ -38,6 +41,7 @@ const defaultProps = { className: '', margin: DEFAULT_MARGIN, theme: chartTheme, + LegendRenderer: ChartLegend, TooltipRenderer: DefaultTooltipRenderer, }; @@ -48,6 +52,7 @@ export type FormDataProps = { } & PartialSpec; export type HookProps = { + LegendRenderer?: React.ComponentType>; TooltipRenderer?: React.ComponentType; } & LegendHooks; @@ -281,6 +286,7 @@ export default class LineChart extends PureComponent { renderLegend() { const { data, + LegendRenderer, LegendGroupRenderer, LegendItemRenderer, LegendItemLabelRenderer, @@ -290,7 +296,7 @@ export default class LineChart extends PureComponent { const encoder = this.createEncoder(this.props); return ( - + = { export type Props = { data: Dataset; encoder: Encoder; + style?: CSSProperties; } & Hooks; export default class ChartLegend< @@ -53,13 +57,18 @@ export default class ChartLegend< LegendItemRenderer, LegendItemMarkRenderer, LegendItemLabelRenderer, + style, } = this.props; const LegendGroup = typeof LegendGroupRenderer === 'undefined' ? DefaultLegendGroup : LegendGroupRenderer; + const combinedStyle = + typeof style === 'undefined' + ? LEGEND_CONTAINER_STYLE + : { ...LEGEND_CONTAINER_STYLE, ...style }; return ( -
+
{encoder.getLegendInfos(data).map(items => ( ({ @@ -14,11 +18,15 @@ export default function DefaultLegendGroupRenderer({ ItemRenderer, ItemMarkRenderer, ItemLabelRenderer, + style, }: LegendGroupRendererProps) { const LegendItem = typeof ItemRenderer === 'undefined' ? DefaultLegendItem : ItemRenderer; + const combinedStyle = + typeof style === 'undefined' ? LEGEND_GROUP_STYLE : { ...LEGEND_GROUP_STYLE, ...style }; + return ( -
+
{items.map(item => ( = { ItemRenderer?: LegendItemRendererType; ItemMarkRenderer?: LegendItemMarkRendererType; ItemLabelRenderer?: LegendItemLabelRendererType; + style?: CSSProperties; }; export type LegendGroupRendererType = React.ComponentType< diff --git a/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-preset-chart-xy/src/utils/selectors/createMarginSelector.tsx b/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-preset-chart-xy/src/utils/selectors/createMarginSelector.tsx index 4f3110dbe13d..9a886d6c6a2c 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-preset-chart-xy/src/utils/selectors/createMarginSelector.tsx +++ b/superset-frontend/temporary_superset_ui/superset-ui/plugins/superset-ui-plugins/packages/superset-ui-preset-chart-xy/src/utils/selectors/createMarginSelector.tsx @@ -1,7 +1,7 @@ import { createSelector } from 'reselect'; import { Margin } from '@superset-ui/dimension'; -export const DEFAULT_MARGIN = { bottom: 20, left: 20, right: 20, top: 20 }; +export const DEFAULT_MARGIN = { bottom: 16, left: 16, right: 16, top: 16 }; export default function createMarginSelector(defaultMargin: Margin = DEFAULT_MARGIN) { return createSelector(