Skip to content

Commit b9d3bd9

Browse files
committed
[chart] Make smarter default domain limit
1 parent 28f7963 commit b9d3bd9

2 files changed

Lines changed: 28 additions & 1 deletion

File tree

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import { ComputedAxisConfig, DefaultizedZoomOptions } from './useChartCartesianA
2626
import { ProcessedSeries } from '../../corePlugins/useChartSeries/useChartSeries.types';
2727
import { GetZoomAxisFilters, ZoomData } from './zoom.types';
2828
import { getAxisTriggerTooltip } from './getAxisTriggerTooltip';
29+
import { getAxisDomainLimit } from './getAxisDomainLimit';
2930

3031
function getRange(
3132
drawingArea: ChartDrawingArea,
@@ -180,7 +181,7 @@ export function computeAxisValue<T extends ChartSeriesType>({
180181

181182
const scaleType = axis.scaleType ?? ('linear' as const);
182183

183-
const domainLimit = axis.domainLimit ?? 'nice';
184+
const domainLimit = getAxisDomainLimit(axis, axisDirection, axisIndex, formattedSeries);
184185

185186
const axisExtremums = [axis.min ?? minData, axis.max ?? maxData];
186187

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { AxisConfig } from '../../../../models/axis';
2+
import { CartesianChartSeriesType } from '../../../../models/seriesType/config';
3+
import { ProcessedSeries } from '../../corePlugins/useChartSeries';
4+
5+
export const getAxisDomainLimit = <T extends CartesianChartSeriesType>(
6+
axis: AxisConfig,
7+
axisDirection: 'x' | 'y',
8+
axisIndex: number,
9+
formattedSeries: ProcessedSeries<T | 'line' | 'bar'>,
10+
): 'nice' | 'strict' | ((min: number, max: number) => { min: number; max: number }) => {
11+
if (axis.domainLimit !== undefined) {
12+
return axis.domainLimit;
13+
}
14+
15+
for (const seriesId of formattedSeries.line?.seriesOrder ?? []) {
16+
const series = formattedSeries.line!.series[seriesId];
17+
18+
if (
19+
series.xAxisId === axis.id ||
20+
(series.xAxisId === undefined && axisIndex === 0 && axisDirection === 'x')
21+
) {
22+
return 'strict';
23+
}
24+
}
25+
return 'nice';
26+
};

0 commit comments

Comments
 (0)