victory-group
Version:
Group Layout Component for Victory
122 lines (121 loc) • 4.58 kB
JavaScript
"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";