@helpscout/hsds-react
Version:
React component library for Help Scout's Design System
163 lines (127 loc) • 5.71 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = exports.AnimateGroup = exports.AnimateGroupContext = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _reactTransitionGroup = require("react-transition-group");
var _getValidProps = _interopRequireDefault(require("@helpscout/react-utils/dist/getValidProps"));
var _classnames = _interopRequireDefault(require("classnames"));
var _component = require("../../utilities/component");
var _jsxRuntime = require("react/jsx-runtime");
var AnimateGroupContext = /*#__PURE__*/_react.default.createContext({});
exports.AnimateGroupContext = AnimateGroupContext;
var AnimateGroup = /*#__PURE__*/function (_React$PureComponent) {
(0, _inheritsLoose2.default)(AnimateGroup, _React$PureComponent);
function AnimateGroup() {
var _this;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _React$PureComponent.call.apply(_React$PureComponent, [this].concat(args)) || this;
_this.getAnimatePropsFromIndex = function (index) {
var _this$props = _this.props,
durationProp = _this$props.duration,
delayProp = _this$props.delay,
easing = _this$props.easing,
sequence = _this$props.sequence,
stagger = _this$props.stagger,
staggerDelay = _this$props.staggerDelay,
staggerDuration = _this$props.staggerDuration,
staggerMax = _this$props.staggerMax;
var duration = stagger && staggerDuration ? staggerDuration : durationProp;
var count = index + 1;
var countBaseValue = count > staggerMax ? staggerMax : count;
var staggerIndexDelay = delayProp + countBaseValue * staggerDelay;
var delay = stagger ? staggerIndexDelay : delayProp;
return {
duration: duration,
delay: delay,
easing: easing,
sequence: sequence
};
};
_this.childFactory = function (child, index) {
var childFactory = _this.props.childFactory;
var animateProps = _this.getAnimatePropsFromIndex(index);
var key = (0, _component.getComponentKey)(child, index);
return childFactory( /*#__PURE__*/(0, _jsxRuntime.jsx)(AnimateGroupContext.Provider, {
value: animateProps,
children: child
}, key), index);
};
return _this;
}
var _proto = AnimateGroup.prototype;
_proto.render = function render() {
var _this$props2 = this.props,
appear = _this$props2.appear,
className = _this$props2.className,
children = _this$props2.children,
delay = _this$props2.delay,
duration = _this$props2.duration,
enter = _this$props2.enter,
exit = _this$props2.exit,
easing = _this$props2.easing,
sequence = _this$props2.sequence,
stagger = _this$props2.stagger,
staggerDelay = _this$props2.staggerDelay,
staggerDuration = _this$props2.staggerDuration,
rest = (0, _objectWithoutPropertiesLoose2.default)(_this$props2, ["appear", "className", "children", "delay", "duration", "enter", "exit", "easing", "sequence", "stagger", "staggerDelay", "staggerDuration"]);
var componentClassName = (0, _classnames.default)('c-AnimateGroup', className);
var transitionGroupProps = {
appear: appear,
enter: enter,
exit: exit,
childFactory: this.childFactory
};
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactTransitionGroup.TransitionGroup, (0, _extends2.default)({}, (0, _getValidProps.default)(rest), transitionGroupProps, {
className: componentClassName,
children: children
}));
};
return AnimateGroup;
}(_react.default.PureComponent);
exports.AnimateGroup = AnimateGroup;
AnimateGroup.defaultProps = {
childFactory: function childFactory(child) {
return child;
},
'data-cy': 'AnimateGroup',
delay: 0,
easing: 'ease-in-out',
stagger: false,
staggerDelay: 200,
staggerMax: 20
};
AnimateGroup.propTypes = {
/** Determines the CSS easing transition function. */
easing: _propTypes.default.string,
/** Callback function to adjust the child component for `react-transition-group`. */
childFactory: _propTypes.default.func,
/** Custom class names to be added to the component. */
className: _propTypes.default.string,
/** The duration (in `ms`) to delay the child animations. */
delay: _propTypes.default.number,
/** The duration (in `ms`) for the child animation sequence. */
duration: _propTypes.default.number,
/** Names of animation styles to apply to child `Animate`. */
sequence: _propTypes.default.string,
/** Adds an incremental delay between child `Animate` components. */
stagger: _propTypes.default.bool,
/** Amount of time (`ms`) to delay for `stagger`. */
staggerDelay: _propTypes.default.number,
/** Time (`ms`) to for staggering animation durations. */
staggerDuration: _propTypes.default.number,
appear: _propTypes.default.any,
exit: _propTypes.default.any,
enter: _propTypes.default.any,
staggerMax: _propTypes.default.number,
/** Data attr for Cypress tests. */
'data-cy': _propTypes.default.string
};
var _default = AnimateGroup;
exports.default = _default;