UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

94 lines (93 loc) 4.47 kB
"use strict"; '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 };