Skip to content

Commit e10ee1d

Browse files
committed
propagate experimental feature
1 parent b9d3bd9 commit e10ee1d

13 files changed

Lines changed: 140 additions & 6 deletions

File tree

docs/pages/_app.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'docs/src/modules/components/bootstrap';
22
// --- Post bootstrap -----
3+
import { createTheme } from '@mui/material/styles';
34
import pages from 'docsx/data/pages'; // DO NOT REMOVE
45
import { postProcessImport } from 'docsx/src/modules/utils/postProcessImport';
56
import * as React from 'react';
@@ -162,6 +163,16 @@ function loadDependencies() {
162163
);
163164
}
164165

166+
const experimentaChartFeatures = createTheme({
167+
components: {
168+
MuiChartDataProvider: {
169+
defaultProps: {
170+
experimentalFeatures: { strictDomainLimit: true },
171+
},
172+
},
173+
},
174+
});
175+
165176
if (typeof window !== 'undefined' && process.env.NODE_ENV === 'production') {
166177
// eslint-disable-next-line no-console
167178
console.log(
@@ -331,7 +342,7 @@ function AppWrapper(props) {
331342
<PageContext.Provider value={pageContextValue}>
332343
<ThemeWrapper>
333344
<DocsStyledEngineProvider cacheLtr={emotionCache}>
334-
{children}
345+
<ThemeProvider theme={experimentaChartFeatures}>{children}</ThemeProvider>
335346
<GoogleAnalytics />
336347
</DocsStyledEngineProvider>
337348
</ThemeWrapper>

packages/x-charts/src/ChartContainer/useChartContainerProps.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ export const useChartContainerProps = <
5252
localeText,
5353
slots,
5454
slotProps,
55+
experimentalFeatures,
5556
...other
5657
} = props as ChartContainerProps<TSeries, AllPluginSignatures>;
5758

@@ -85,6 +86,7 @@ export const useChartContainerProps = <
8586
height,
8687
localeText,
8788
seriesConfig,
89+
experimentalFeatures,
8890
plugins: plugins ?? DEFAULT_PLUGINS,
8991
slots,
9092
slotProps,

packages/x-charts/src/ChartDataProvider/useChartDataProviderProps.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
'use client';
2-
import { useTheme } from '@mui/material/styles';
2+
import { useTheme, useThemeProps } from '@mui/material/styles';
33
import type { ChartDataProviderProps } from './ChartDataProvider';
44
import { ChartProviderProps } from '../context/ChartProvider';
55
import { ChartAnyPluginSignature, MergeSignaturesProperty } from '../internals/plugins/models';
@@ -12,8 +12,11 @@ export const useChartDataProviderProps = <
1212
TSeries extends ChartSeriesType = ChartSeriesType,
1313
TSignatures extends readonly ChartAnyPluginSignature[] = AllPluginSignatures<TSeries>,
1414
>(
15-
props: ChartDataProviderProps<TSeries, TSignatures> & ChartsLocalizationProviderProps,
15+
inProps: ChartDataProviderProps<TSeries, TSignatures> & ChartsLocalizationProviderProps,
1616
) => {
17+
// eslint-disable-next-line material-ui/mui-name-matches-component-name
18+
const props = useThemeProps({ props: inProps, name: 'MuiChartDataProvider' });
19+
1720
const {
1821
children,
1922
localeText,

packages/x-charts/src/internals/plugins/corePlugins/corePlugins.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import { type UseChartAnimationSignature, useChartAnimation } from './useChartAnimation';
22
import { type UseChartDimensionsSignature, useChartDimensions } from './useChartDimensions';
3+
import {
4+
type UseChartExperimentalFeaturesSignature,
5+
useChartExperimentalFeatures,
6+
} from './useChartExperimentalFeature';
37
import { type UseChartIdSignature, useChartId, UseChartIdParameters } from './useChartId';
48
import { type UseChartSeriesSignature, useChartSeries } from './useChartSeries';
59

@@ -9,13 +13,15 @@ import { type UseChartSeriesSignature, useChartSeries } from './useChartSeries';
913
*/
1014
export const CHART_CORE_PLUGINS = [
1115
useChartId,
16+
useChartExperimentalFeatures,
1217
useChartDimensions,
1318
useChartSeries,
1419
useChartAnimation,
1520
] as const;
1621

1722
export type ChartCorePluginSignatures = [
1823
UseChartIdSignature,
24+
UseChartExperimentalFeaturesSignature,
1925
UseChartDimensionsSignature,
2026
UseChartSeriesSignature,
2127
UseChartAnimationSignature,
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export { useChartExperimentalFeatures } from './useChartExperimentalFeature';
2+
export type {
3+
UseChartExperimentalFeaturesSignature,
4+
UseChartExperimentalFeaturesParameters,
5+
} from './useChartExperimentalFeature.types';
6+
export * from './useChartExperimentalFeature.selectors';
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { ChartRootSelector, createSelector } from '../../utils/selectors';
2+
import type { UseChartExperimentalFeaturesSignature } from './useChartExperimentalFeature.types';
3+
4+
export const selectorChartExperimentalFeaturesState: ChartRootSelector<
5+
UseChartExperimentalFeaturesSignature
6+
> = (state) => state.experimentalFeatures;
7+
8+
export const selectorUseStrictDomainLimit = createSelector(
9+
[selectorChartExperimentalFeaturesState],
10+
(features) => Boolean(features?.strictDomainLimit),
11+
);
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
'use client';
2+
import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
3+
import { ChartPlugin } from '../../models';
4+
import type { UseChartExperimentalFeaturesSignature } from './useChartExperimentalFeature.types';
5+
6+
export const useChartExperimentalFeatures: ChartPlugin<UseChartExperimentalFeaturesSignature> = ({
7+
params,
8+
store,
9+
}) => {
10+
useEnhancedEffect(() => {
11+
store.update((prevState) => {
12+
return {
13+
...prevState,
14+
experimentalFeatures: params.experimentalFeatures,
15+
};
16+
});
17+
}, [store, params.experimentalFeatures]);
18+
19+
return {};
20+
};
21+
22+
useChartExperimentalFeatures.params = {
23+
experimentalFeatures: true,
24+
};
25+
26+
useChartExperimentalFeatures.getInitialState = ({ experimentalFeatures }) => {
27+
return {
28+
experimentalFeatures,
29+
};
30+
};
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { ChartPluginSignature } from '../../models';
2+
3+
export interface ChartExperimentalFeatures {
4+
/**
5+
* Default domainLimit to strict for line chart x-axis.
6+
*/
7+
strictDomainLimit?: true;
8+
}
9+
10+
export interface UseChartExperimentalFeaturesParameters {
11+
/**
12+
* Options to enable features planned for the nex major.
13+
*/
14+
experimentalFeatures?: ChartExperimentalFeatures;
15+
}
16+
17+
export interface UseChartExperimentalFeaturesState {
18+
experimentalFeatures?: ChartExperimentalFeatures;
19+
}
20+
21+
export type UseChartExperimentalFeaturesSignature = ChartPluginSignature<{
22+
params: UseChartExperimentalFeaturesParameters;
23+
defaultizedParams: UseChartExperimentalFeaturesParameters;
24+
state: UseChartExperimentalFeaturesState;
25+
}>;

packages/x-charts/src/internals/plugins/featurePlugins/useChartCartesianAxis/computeAxisValue.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ type ComputeCommonParams<T extends ChartSeriesType = ChartSeriesType> = {
5656
zoomMap?: Map<AxisId, ZoomData>;
5757
zoomOptions?: Record<AxisId, DefaultizedZoomOptions>;
5858
getFilters?: GetZoomAxisFilters;
59+
experimental_strictDomainLimit?: boolean;
5960
};
6061

6162
export function computeAxisValue<T extends ChartSeriesType>(
@@ -79,6 +80,7 @@ export function computeAxisValue<T extends ChartSeriesType>({
7980
zoomMap,
8081
zoomOptions,
8182
getFilters,
83+
experimental_strictDomainLimit,
8284
}: ComputeCommonParams<T> & {
8385
axis?: DefaultedAxis[];
8486
axisDirection: 'x' | 'y';
@@ -181,7 +183,9 @@ export function computeAxisValue<T extends ChartSeriesType>({
181183

182184
const scaleType = axis.scaleType ?? ('linear' as const);
183185

184-
const domainLimit = getAxisDomainLimit(axis, axisDirection, axisIndex, formattedSeries);
186+
const domainLimit = experimental_strictDomainLimit
187+
? getAxisDomainLimit(axis, axisDirection, axisIndex, formattedSeries)
188+
: (axis.domainLimit ?? 'nice');
185189

186190
const axisExtremums = [axis.min ?? minData, axis.max ?? maxData];
187191

packages/x-charts/src/internals/plugins/featurePlugins/useChartCartesianAxis/useChartCartesianAxisRendering.selectors.ts

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
selectorChartRawXAxis,
1616
selectorChartRawYAxis,
1717
} from './useChartCartesianAxisLayout.selectors';
18+
import { selectorUseStrictDomainLimit } from '../../corePlugins/useChartExperimentalFeature';
1819

1920
export const createZoomMap = (zoom: readonly ZoomData[]) => {
2021
const zoomItemMap = new Map<AxisId, ZoomData>();
@@ -137,8 +138,18 @@ export const selectorChartXAxis = createSelector(
137138
selectorChartZoomMap,
138139
selectorChartZoomOptionsLookup,
139140
selectorChartZoomAxisFilters,
141+
selectorUseStrictDomainLimit,
140142
],
141-
(axis, drawingArea, formattedSeries, seriesConfig, zoomMap, zoomOptions, getFilters) =>
143+
(
144+
axis,
145+
drawingArea,
146+
formattedSeries,
147+
seriesConfig,
148+
zoomMap,
149+
zoomOptions,
150+
getFilters,
151+
experimental_strictDomainLimit,
152+
) =>
142153
computeAxisValue({
143154
drawingArea,
144155
formattedSeries,
@@ -148,6 +159,7 @@ export const selectorChartXAxis = createSelector(
148159
zoomMap,
149160
zoomOptions,
150161
getFilters,
162+
experimental_strictDomainLimit,
151163
}),
152164
);
153165

@@ -160,8 +172,18 @@ export const selectorChartYAxis = createSelector(
160172
selectorChartZoomMap,
161173
selectorChartZoomOptionsLookup,
162174
selectorChartZoomAxisFilters,
175+
selectorUseStrictDomainLimit,
163176
],
164-
(axis, drawingArea, formattedSeries, seriesConfig, zoomMap, zoomOptions, getFilters) =>
177+
(
178+
axis,
179+
drawingArea,
180+
formattedSeries,
181+
seriesConfig,
182+
zoomMap,
183+
zoomOptions,
184+
getFilters,
185+
experimental_strictDomainLimit,
186+
) =>
165187
computeAxisValue({
166188
drawingArea,
167189
formattedSeries,
@@ -171,6 +193,7 @@ export const selectorChartYAxis = createSelector(
171193
zoomMap,
172194
zoomOptions,
173195
getFilters,
196+
experimental_strictDomainLimit,
174197
}),
175198
);
176199

0 commit comments

Comments
 (0)