UNPKG

victory-group

Version:
122 lines (121 loc) 4.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.VictoryGroup = void 0; var _defaults = _interopRequireDefault(require("lodash/defaults")); var _isEmpty = _interopRequireDefault(require("lodash/isEmpty")); var _react = _interopRequireDefault(require("react")); var _victoryCore = require("victory-core"); var _victorySharedEvents = require("victory-shared-events"); var _helperMethods = require("./helper-methods"); var _reactFastCompare = _interopRequireDefault(require("react-fast-compare")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const fallbackProps = { width: 450, height: 300, padding: 50, offset: 0 }; const defaultProps = { containerComponent: /*#__PURE__*/_react.default.createElement(_victoryCore.VictoryContainer, null), groupComponent: /*#__PURE__*/_react.default.createElement("g", null), samples: 50, standalone: true, theme: _victoryCore.VictoryTheme.grayscale }; const VictoryGroupBase = initialProps => { const role = VictoryGroup?.role; const { getAnimationProps, setAnimationState, getProps } = _victoryCore.Hooks.useAnimationState(); const propsWithDefaults = _react.default.useMemo(() => (0, _defaults.default)({}, initialProps, defaultProps), [initialProps]); const props = getProps(propsWithDefaults); const modifiedProps = _victoryCore.Helpers.modifyProps(props, fallbackProps, role); const { eventKey, containerComponent, standalone, groupComponent, externalEventMutations, width, height, theme, polar, horizontal, name } = modifiedProps; const childComponents = _react.default.Children.toArray(modifiedProps.children); const calculatedProps = (0, _helperMethods.useMemoizedProps)(modifiedProps); const { domain, scale, style, origin } = calculatedProps; const newChildren = _react.default.useMemo(() => { const children = (0, _helperMethods.getChildren)(props, childComponents, calculatedProps); return children.map((child, index) => { const childProps = Object.assign({ animate: getAnimationProps(props, child, index) }, child.props); return /*#__PURE__*/_react.default.cloneElement(child, childProps); }); }, [props, childComponents, calculatedProps, getAnimationProps]); const containerProps = _react.default.useMemo(() => { if (standalone) { return { domain, scale, width, height, standalone, theme, style: style.parent, horizontal, polar, origin, name }; } return {}; }, [standalone, domain, scale, width, height, theme, style, horizontal, polar, origin, name]); const userProps = _react.default.useMemo(() => _victoryCore.UserProps.getSafeUserProps(propsWithDefaults), [propsWithDefaults]); const container = _react.default.useMemo(() => { if (standalone) { const defaultContainerProps = (0, _defaults.default)({}, containerComponent.props, containerProps, userProps); return /*#__PURE__*/_react.default.cloneElement(containerComponent, defaultContainerProps); } return /*#__PURE__*/_react.default.cloneElement(groupComponent, userProps); }, [groupComponent, standalone, containerComponent, containerProps, userProps]); const events = _react.default.useMemo(() => { return _victoryCore.Wrapper.getAllEvents(props); }, [props]); const previousProps = _victoryCore.Hooks.usePreviousProps(propsWithDefaults); _react.default.useEffect(() => { // This is called before dismount to keep state in sync return () => { if (propsWithDefaults.animate) { setAnimationState(previousProps, props); } }; }, [setAnimationState, previousProps, propsWithDefaults, props]); if (!(0, _isEmpty.default)(events)) { return /*#__PURE__*/_react.default.createElement(_victorySharedEvents.VictorySharedEvents, { container: container, eventKey: eventKey, events: events, externalEventMutations: externalEventMutations }, newChildren); } return /*#__PURE__*/_react.default.cloneElement(container, container.props, newChildren); }; const componentConfig = { role: "group", expectedComponents: ["groupComponent", "containerComponent", "labelComponent"], getChildren: _helperMethods.getChildren }; const VictoryGroup = exports.VictoryGroup = Object.assign( /*#__PURE__*/_react.default.memo(VictoryGroupBase, _reactFastCompare.default), componentConfig); VictoryGroup.displayName = "VictoryGroup";