Skip to content

Commit e511cfd

Browse files
[charts-pro] Allow registering preview plots from higher tier packages (#20716)
1 parent a0c174a commit e511cfd

File tree

7 files changed

+43
-25
lines changed

7 files changed

+43
-25
lines changed

packages/x-charts-pro/src/ChartZoomSlider/internals/ChartAxisZoomSliderPreviewContent.tsx

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
import * as React from 'react';
22
import { type AxisId, selectorChartSeriesProcessed, useStore } from '@mui/x-charts/internals';
3-
import { LinePreviewPlot } from './previews/LinePreviewPlot';
4-
import { AreaPreviewPlot } from './previews/AreaPreviewPlot';
5-
import { BarPreviewPlot } from './previews/BarPreviewPlot';
6-
import { ScatterPreviewPlot } from './previews/ScatterPreviewPlot';
3+
import { seriesPreviewPlotMap } from './seriesPreviewPlotMap';
74

8-
interface ChartAxisZoomSliderPreviewContentProps {
5+
export interface ChartAxisZoomSliderPreviewContentProps {
96
axisId: AxisId;
107
x: number;
118
y: number;
@@ -22,24 +19,12 @@ export function ChartAxisZoomSliderPreviewContent(props: ChartAxisZoomSliderPrev
2219
const children: React.JSX.Element[] = [];
2320
const clipId = `zoom-preview-mask-${axisId}`;
2421

25-
const hasLineSeries = (processedSeries.line?.seriesOrder?.length ?? 0) > 0;
26-
const hasBarSeries = (processedSeries.bar?.seriesOrder?.length ?? 0) > 0;
27-
const hasScatterSeries = (processedSeries.scatter?.seriesOrder?.length ?? 0) > 0;
22+
for (const [seriesType, Component] of seriesPreviewPlotMap) {
23+
const hasSeries = (processedSeries[seriesType]?.seriesOrder?.length ?? 0) > 0;
2824

29-
if (hasLineSeries) {
30-
children.push(<AreaPreviewPlot key="area" axisId={axisId} />);
31-
}
32-
33-
if (hasBarSeries) {
34-
children.push(<BarPreviewPlot key="bar" {...props} />);
35-
}
36-
37-
if (hasLineSeries) {
38-
children.push(<LinePreviewPlot key="line" axisId={axisId} />);
39-
}
40-
41-
if (hasScatterSeries) {
42-
children.push(<ScatterPreviewPlot key="scatter" {...props} />);
25+
if (hasSeries) {
26+
children.push(<Component key={seriesType} {...props} />);
27+
}
4328
}
4429

4530
return (

packages/x-charts-pro/src/ChartZoomSlider/internals/previews/AreaPreviewPlot.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const AreaPlotRoot = styled('g', {
1515
slot: 'Root',
1616
})({});
1717

18-
interface AreaPreviewPlotProps extends PreviewPlotProps {}
18+
interface AreaPreviewPlotProps extends Pick<PreviewPlotProps, 'axisId'> {}
1919

2020
export function AreaPreviewPlot({ axisId }: AreaPreviewPlotProps) {
2121
const completedData = useAreaPreviewData(axisId);
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import * as React from 'react';
2+
import { AreaPreviewPlot } from './AreaPreviewPlot';
3+
import { LinePreviewPlot } from './LinePreviewPlot';
4+
import { type PreviewPlotProps } from './PreviewPlot.types';
5+
6+
export function LineAreaPreviewPlot({ axisId }: PreviewPlotProps) {
7+
return (
8+
<React.Fragment>
9+
<AreaPreviewPlot axisId={axisId} />
10+
<LinePreviewPlot axisId={axisId} />
11+
</React.Fragment>
12+
);
13+
}

packages/x-charts-pro/src/ChartZoomSlider/internals/previews/LinePreviewPlot.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import {
77
selectorChartPreviewComputedYAxis,
88
type SeriesId,
99
} from '@mui/x-charts/internals';
10-
import { type PreviewPlotProps } from './PreviewPlot.types';
10+
import type { PreviewPlotProps } from './PreviewPlot.types';
1111

12-
interface LinePreviewPlotProps extends PreviewPlotProps {}
12+
interface LinePreviewPlotProps extends Pick<PreviewPlotProps, 'axisId'> {}
1313

1414
export function LinePreviewPlot({ axisId }: LinePreviewPlotProps) {
1515
const completedData = useLinePreviewData(axisId);

packages/x-charts-pro/src/ChartZoomSlider/internals/previews/PreviewPlot.types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,8 @@ import { type AxisId } from '@mui/x-charts/internals';
22

33
export interface PreviewPlotProps {
44
axisId: AxisId;
5+
x: number;
6+
y: number;
7+
width: number;
8+
height: number;
59
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import type * as React from 'react';
2+
import { type ChartSeriesType } from '@mui/x-charts/internals';
3+
import { BarPreviewPlot } from './previews/BarPreviewPlot';
4+
import { ScatterPreviewPlot } from './previews/ScatterPreviewPlot';
5+
import { LineAreaPreviewPlot } from './previews/LineAreaPreviewPlot';
6+
import { type PreviewPlotProps } from './previews/PreviewPlot.types';
7+
8+
export const seriesPreviewPlotMap = new Map<ChartSeriesType, React.ComponentType<PreviewPlotProps>>(
9+
[
10+
['bar', BarPreviewPlot],
11+
['line', LineAreaPreviewPlot],
12+
['scatter', ScatterPreviewPlot],
13+
] as const,
14+
);
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
export { useChartContainerProProps } from '../ChartContainerPro/useChartContainerProProps';
22
export type { ChartsSlotsPro, ChartsSlotPropsPro } from './material';
3+
export { seriesPreviewPlotMap } from '../ChartZoomSlider/internals/seriesPreviewPlotMap';
4+
export type { PreviewPlotProps } from '../ChartZoomSlider/internals/previews/PreviewPlot.types';

0 commit comments

Comments
 (0)