UNPKG

@zohodesk/components

Version:

Dot UI is a customizable React component library built to deliver a clean, accessible, and developer-friendly UI experience. It offers a growing set of reusable components designed to align with modern design systems and streamline application development

144 lines (134 loc) 4.34 kB
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } import React from 'react'; import { defaultProps } from "./props/defaultProps"; import { propTypes } from "./props/propTypes"; import { VelocityTransitionGroup } from 'velocity-react'; import 'velocity-animate/velocity.ui'; import LibraryContext from "../../Provider/LibraryContextInit"; function clearProps(props) { let newProps = Object.assign({}, props); Object.keys(VelocityAnimationGroup.propTypes).forEach(key => { delete newProps[key]; }); return newProps; } export default class VelocityAnimationGroup extends React.Component { constructor(props) { super(props); this.handleEnterComplete = this.handleEnterComplete.bind(this); this.handleExitComplete = this.handleExitComplete.bind(this); } handleEnterComplete(elements) { const { onEnterComplete, postEnterStyles } = this.props; if (typeof onEnterComplete === 'function') { onEnterComplete(elements); } if (postEnterStyles && typeof postEnterStyles === 'object') { elements.forEach(rootElement => { Object.entries(postEnterStyles).forEach(([cssProperty, cssValue]) => { rootElement.style[cssProperty] = cssValue; }); }); } } handleExitComplete(elements) { const { onExitComplete } = this.props; if (typeof onExitComplete === 'function') { onExitComplete(elements); } } render() { let { children, enterName, exitName, enterDuration, exitDuration, isActive, component, runOnMount, enterShowStyle, enterHideStyle, exitDelay, isFlex, enterDelay, isCustomized, name, needUIPack, onEnterComplete, onExitComplete, postEnterStyles } = this.props; let { direction, isReducedMotion } = this.context || {}; let childProps = clearProps(this.props); let enterAnimationObj = { fade: 'transition.fadeIn', slideDown: 'slideDown', flyDown: { translateY: '0%' }, slideRight: { translateX: '0%' }, slideLeft: { translateX: '0%' }, shrink: 'transition.shrinkIn', expand: 'transition.expandIn' }; let exitAnimationObj = { fade: 'transition.fadeOut', slideDown: 'slideUp', flyDown: { translateY: '-100%' }, slideRight: { translateX: direction == 'rtl' ? '-100%' : '100%' }, slideLeft: { translateX: direction == 'rtl' ? '100%' : '-100%' }, shrink: 'transition.shrinkOut', expand: 'transition.expandOut' }; let enterAnimation = { animation: isCustomized ? enterAnimationObj[name] : needUIPack ? `transition.${enterName}In` : enterName, duration: !isReducedMotion ? enterDuration : 0, delay: enterDelay ? enterDelay : 0, display: isFlex ? 'flex' : '', complete: onEnterComplete || postEnterStyles ? this.handleEnterComplete : undefined }; let exitAnimation = { animation: isCustomized ? exitAnimationObj[name] : needUIPack ? `transition.${exitName ? exitName : enterName}Out` : exitName ? exitName : enterName, duration: !isReducedMotion ? exitDuration : 0, delay: exitDelay ? exitDelay : 0, display: 'none', complete: onExitComplete ? this.handleExitComplete : undefined }; return /*#__PURE__*/React.createElement(VelocityTransitionGroup, _extends({ enter: enterAnimation, leave: exitAnimation, component: component && component, runOnMount: runOnMount, enterHideStyle: enterHideStyle, enterShowStyle: enterShowStyle }, childProps), isActive ? children : null); } } VelocityAnimationGroup.defaultProps = { ...defaultProps, component: React.Fragment }; VelocityAnimationGroup.propTypes = propTypes; VelocityAnimationGroup.contextType = LibraryContext; // if (__DOCS__) { // VelocityAnimationGroup.docs = { // componentGroup: 'Animation' // }; // }