@mui/x-charts
Version:
The community edition of MUI X Charts components.
71 lines (70 loc) • 2.63 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createAxisFilterMapper = createAxisFilterMapper;
exports.createGetAxisFilters = void 0;
var _isDefined = require("../../../isDefined");
var _getAxisExtremum = require("./getAxisExtremum");
var _getScale = require("../../../getScale");
function createAxisFilterMapper({
zoomMap,
zoomOptions,
seriesConfig,
formattedSeries,
direction
}) {
return (axis, axisIndex) => {
const zoomOption = zoomOptions[axis.id];
if (!zoomOption || zoomOption.filterMode !== 'discard') {
return null;
}
const zoom = zoomMap?.get(axis.id);
if (zoom === undefined || zoom.start <= 0 && zoom.end >= 100) {
// No zoom, or zoom with all data visible
return null;
}
let extremums = [];
const scaleType = axis.scaleType;
if (scaleType === 'point' || scaleType === 'band') {
extremums = [0, (axis.data?.length ?? 1) - 1];
} else {
extremums = (0, _getAxisExtremum.getAxisExtremum)(axis, direction, seriesConfig, axisIndex, formattedSeries);
}
let min;
let max;
const continuousScaleType = !scaleType || scaleType === 'band' || scaleType === 'point' ? 'linear' : scaleType;
[min, max] = (0, _getScale.getScale)(continuousScaleType, extremums, [0, 100]).nice().domain();
min = min instanceof Date ? min.getTime() : min;
max = max instanceof Date ? max.getTime() : max;
const minVal = min + zoom.start * (max - min) / 100;
const maxVal = min + zoom.end * (max - min) / 100;
return (value, dataIndex) => {
const val = value[direction] ?? axis.data?.[dataIndex];
if (val == null) {
// If the value does not exist because of missing data point, or out of range index, we just ignore.
return true;
}
if (axis.scaleType === 'point' || axis.scaleType === 'band' || typeof val === 'string') {
return dataIndex >= minVal && dataIndex <= maxVal;
}
return val >= minVal && val <= maxVal;
};
};
}
const createGetAxisFilters = filters => ({
currentAxisId,
seriesXAxisId,
seriesYAxisId,
isDefaultAxis
}) => {
return (value, dataIndex) => {
const axisId = currentAxisId === seriesXAxisId ? seriesYAxisId : seriesXAxisId;
if (!axisId || isDefaultAxis) {
return Object.values(filters ?? {})[0]?.(value, dataIndex) ?? true;
}
const data = [seriesYAxisId, seriesXAxisId].filter(id => id !== currentAxisId).map(id => filters[id ?? '']).filter(_isDefined.isDefined);
return data.every(f => f(value, dataIndex));
};
};
exports.createGetAxisFilters = createGetAxisFilters;
;