diff --git a/packages/charts/src/components/BarChart/BarChart.tsx b/packages/charts/src/components/BarChart/BarChart.tsx index 9ba67b0e19d..eed456a2b02 100644 --- a/packages/charts/src/components/BarChart/BarChart.tsx +++ b/packages/charts/src/components/BarChart/BarChart.tsx @@ -33,6 +33,7 @@ const BarChart: FC = forwardRef((props: BarChartProps, ref: Ref = forwardRef((props: BarChartProps, ref: Ref(ref); - const currentDataKeys = useResolveDataKeys(dataKeys, labelKey, dataset); + const currentDataKeys = useResolveDataKeys(dataKeys, labelKey, dataset, secondaryDimensionKey); const onItemLegendClick = useLegendItemClick(onLegendClick); @@ -121,8 +122,6 @@ const BarChart: FC = forwardRef((props: BarChartProps, ref: Ref = forwardRef((props: BarChartProps, ref: Ref - {secondaryDimension && ( + {secondaryDimensionKey && ( ( onDataPointClick={action('onDataPointClick')} dataset={secondaryDimensionDataSet} labelKey={'name'} - color={'red'} + secondaryDimensionKey={'dimension'} + color={'lightblue'} width={text('width', '95%')} height={text('height', '70vh')} chartConfig={{ dataLabel: true, barSize: 20 }} diff --git a/packages/charts/src/components/ColumnChart/ColumnChart.tsx b/packages/charts/src/components/ColumnChart/ColumnChart.tsx index d78b6a86ccd..1e21312f2ba 100644 --- a/packages/charts/src/components/ColumnChart/ColumnChart.tsx +++ b/packages/charts/src/components/ColumnChart/ColumnChart.tsx @@ -33,6 +33,7 @@ const ColumnChart: FC = forwardRef((props: ColumnChartProps, r color, loading, labelKey = 'name', + secondaryDimensionKey, width = '100%', height = '300px', dataset, @@ -83,7 +84,7 @@ const ColumnChart: FC = forwardRef((props: ColumnChartProps, r const chartRef = useConsolidatedRef(ref); - const currentDataKeys = useResolveDataKeys(dataKeys, labelKey, dataset); + const currentDataKeys = useResolveDataKeys(dataKeys, labelKey, dataset, secondaryDimensionKey); const colorSecondY = useMemo( () => (chartConfig.secondYAxis ? currentDataKeys.findIndex((key) => key === chartConfig.secondYAxis.dataKey) : 0), @@ -122,11 +123,16 @@ const ColumnChart: FC = forwardRef((props: ColumnChartProps, r const SecondaryDimensionLabel = useSecondaryDimensionLabel(); - const secondaryDimension = dataset && dataset[0].hasOwnProperty('dimension'); + const XAxisLabel = useAxisLabel(xAxisFormatter, chartConfig.xAxisUnit); - const XAxisLabel = useAxisLabel(xAxisFormatter, chartConfig.xAxisUnit, secondaryDimension); - - const marginChart = useChartMargin(dataset, labelKey, yAxisFormatter, chartConfig.margin, false, secondaryDimension); + const marginChart = useChartMargin( + dataset, + labelKey, + yAxisFormatter, + chartConfig.margin, + false, + secondaryDimensionKey + ); return ( = forwardRef((props: ColumnChartProps, r stroke={chartConfig.gridStroke ?? ThemingParameters.sapList_BorderColor} /> {(chartConfig.xAxisVisible ?? true) && } - {secondaryDimension && ( + {secondaryDimensionKey && ( ( ( ( + +); + +withSecondaryDimension.story = { + name: 'With secondary dimension' +}; + export const renderComposedChartPlaceholder = () => ( = forwardRef((props: ComposedChartPr loading, dataset, labelKey = 'name', + secondaryDimensionKey, onDataPointClick, noLegend = false, xAxisFormatter = (el) => el, @@ -173,9 +174,14 @@ const ComposedChart: FC = forwardRef((props: ComposedChartPr const XAxisLabel = useAxisLabel(xAxisFormatter, chartConfig.xAxisUnit); const SecondaryDimensionLabel = useSecondaryDimensionLabel(); - const secondaryDimension = dataset && dataset[0].hasOwnProperty('dimension'); - - const marginChart = useChartMargin(dataset, yAxisFormatter, labelKey, chartConfig.margin); + const marginChart = useChartMargin( + dataset, + yAxisFormatter, + labelKey, + chartConfig.margin, + false, + secondaryDimensionKey + ); return ( = forwardRef((props: ComposedChartPr xAxisId={0} /> )} - {secondaryDimension && ( + {secondaryDimensionKey && ( = forwardRef((props: LineChartProps, ref: Re color, loading, labelKey = 'name', + secondaryDimensionKey, width = '100%', height = '500px', dataset, @@ -79,7 +80,7 @@ const LineChart: FC = forwardRef((props: LineChartProps, ref: Re const chartRef = useConsolidatedRef(ref); - const currentDataKeys = useResolveDataKeys(dataKeys, labelKey, dataset); + const currentDataKeys = useResolveDataKeys(dataKeys, labelKey, dataset, secondaryDimensionKey); const colorSecondY = useMemo( () => (chartConfig.secondYAxis ? currentDataKeys.findIndex((key) => key === chartConfig.secondYAxis.dataKey) : 0), @@ -109,9 +110,14 @@ const LineChart: FC = forwardRef((props: LineChartProps, ref: Re const XAxisLabel = useAxisLabel(xAxisFormatter, chartConfig.xAxisUnit); const SecondaryDimensionLabel = useSecondaryDimensionLabel(); - const secondaryDimension = dataset && dataset[0].hasOwnProperty('dimension'); - - const marginChart = useChartMargin(dataset, yAxisFormatter, labelKey, chartConfig.margin); + const marginChart = useChartMargin( + dataset, + yAxisFormatter, + labelKey, + chartConfig.margin, + false, + secondaryDimensionKey + ); return ( = forwardRef((props: LineChartProps, ref: Re stroke={chartConfig.gridStroke ?? ThemingParameters.sapList_BorderColor} /> {(chartConfig.xAxisVisible ?? true) && } - {secondaryDimension && ( + {secondaryDimensionKey && ( ( + +); + +withSecondaryDimension.story = { + name: 'With secondary dimension' +}; + export const renderLabelStory = () => { return ( { +export const useResolveDataKeys = (dataKeys, labelKey, dataset, secondaryDimensionKey): string[] => { return useMemo(() => { if (dataKeys) { // manually provided, let the user decide return dataKeys; } if (dataset && dataset[0]) { - return Object.keys(dataset[0]).filter((key) => key !== labelKey && key !== 'dimension'); + return Object.keys(dataset[0]).filter((key) => key !== labelKey && key !== secondaryDimensionKey); } return []; }, [dataKeys, labelKey, dataset]); diff --git a/packages/charts/src/interfaces/RechartBaseProps.ts b/packages/charts/src/interfaces/RechartBaseProps.ts index eae22e3281c..6fc8d6a1991 100644 --- a/packages/charts/src/interfaces/RechartBaseProps.ts +++ b/packages/charts/src/interfaces/RechartBaseProps.ts @@ -4,6 +4,7 @@ import { ChartContainerProps } from './ChartContainerProps'; export interface RechartBaseProps extends ChartContainerProps { labelKey?: string; + secondaryDimensionKey?: string; dataKeys?: string[]; noLegend?: boolean; onDataPointClick?: (event: CustomEvent) => void; diff --git a/packages/charts/src/internal/CustomElements.tsx b/packages/charts/src/internal/CustomElements.tsx index 9214391f95a..14092893bfe 100644 --- a/packages/charts/src/internal/CustomElements.tsx +++ b/packages/charts/src/internal/CustomElements.tsx @@ -10,7 +10,7 @@ export const XAxisTicks = (props, formatter, unit = '', rotate) => { ? formatter(payload.value).length > 10 ? `${formatter(payload.value).slice(0, 8)}...` : formatter(payload.value) - : payload.value; + : formatter(payload.value); return (