@mui/x-charts
Version:
The community edition of MUI X Charts components.
94 lines (93 loc) • 4.47 kB
JavaScript
;
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useChartVisibilityManager = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
var _useEffectAfterFirstRender = require("@mui/x-internals/useEffectAfterFirstRender");
var _useChartVisibilityManager = require("./useChartVisibilityManager.selectors");
var _visibilityParamToMap = require("./visibilityParamToMap");
var _useChartSeries = require("../../corePlugins/useChartSeries/useChartSeries");
const useChartVisibilityManager = ({
store,
params,
instance
}) => {
// Manage controlled state
(0, _useEffectAfterFirstRender.useEffectAfterFirstRender)(() => {
if (params.hiddenItems === undefined) {
return;
}
if (process.env.NODE_ENV !== 'production' && !store.state.visibilityManager.isControlled) {
console.error([`MUI X Charts: A chart component is changing the \`hiddenItems\` from uncontrolled to controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', 'Decide between using a controlled or uncontrolled for the lifetime of the component.', "The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.", 'More info: https://fb.me/react-controlled-components'].join('\n'));
}
store.set('visibilityManager', (0, _extends2.default)({}, store.state.visibilityManager, {
visibilityMap: (0, _visibilityParamToMap.visibilityParamToMap)(params.hiddenItems.map(item => instance.identifierWithType(item, 'visibility')), store.state.seriesConfig.config)
}));
}, [store, instance, params.hiddenItems]);
const hideItem = (0, _useEventCallback.default)(identifier => {
const visibilityMap = store.state.visibilityManager.visibilityMap;
const identifierWithType = instance.identifierWithType(identifier, 'visibility');
const id = instance.serializeIdentifier(identifierWithType);
if (visibilityMap.has(id)) {
return;
}
const newVisibilityMap = new Map(visibilityMap);
newVisibilityMap.set(id, identifierWithType);
store.set('visibilityManager', (0, _extends2.default)({}, store.state.visibilityManager, {
visibilityMap: newVisibilityMap
}));
const values = Array.from(newVisibilityMap.values());
params.onHiddenItemsChange?.(values);
});
const showItem = (0, _useEventCallback.default)(identifier => {
const visibilityMap = store.state.visibilityManager.visibilityMap;
const identifierWithType = instance.identifierWithType(identifier, 'visibility');
const id = instance.serializeIdentifier(identifierWithType);
if (!visibilityMap.has(id)) {
return;
}
const newVisibilityMap = new Map(visibilityMap);
newVisibilityMap.delete(id);
store.set('visibilityManager', (0, _extends2.default)({}, store.state.visibilityManager, {
visibilityMap: newVisibilityMap
}));
params.onHiddenItemsChange?.(Array.from(newVisibilityMap.values()));
});
const toggleItem = (0, _useEventCallback.default)(identifier => {
const visibilityMap = store.state.visibilityManager.visibilityMap;
const identifierWithType = instance.identifierWithType(identifier, 'visibility');
const id = instance.serializeIdentifier(identifierWithType);
if (visibilityMap.has(id)) {
showItem(identifierWithType);
} else {
hideItem(identifierWithType);
}
});
return {
instance: {
hideItem,
showItem,
toggleItemVisibility: toggleItem
}
};
};
exports.useChartVisibilityManager = useChartVisibilityManager;
useChartVisibilityManager.getInitialState = (params, currentState) => {
const seriesConfig = currentState.seriesConfig.config;
const initialItems = params.hiddenItems ?? params.initialHiddenItems;
return {
visibilityManager: {
visibilityMap: initialItems ? (0, _visibilityParamToMap.visibilityParamToMap)(initialItems.map(item => (0, _useChartSeries.createIdentifierWithType)(currentState)(item)), seriesConfig) : _useChartVisibilityManager.EMPTY_VISIBILITY_MAP,
isControlled: params.hiddenItems !== undefined
}
};
};
useChartVisibilityManager.params = {
onHiddenItemsChange: true,
hiddenItems: true,
initialHiddenItems: true
};