UNPKG

react-widgets

Version:

An à la carte set of polished, extensible, and accessible inputs built for React

121 lines (96 loc) 4.21 kB
"use strict"; exports.__esModule = true; exports.default = void 0; var _classnames = _interopRequireDefault(require("classnames")); var _transitionEnd = _interopRequireDefault(require("dom-helpers/transitionEnd")); var _propTypes = _interopRequireDefault(require("prop-types")); var _react = _interopRequireDefault(require("react")); const _excluded = ["direction", "children", "onTransitionEnd"]; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _extends() { _extends = Object.assign || 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); } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } const DirectionPropType = _propTypes.default.oneOf(['left', 'right', 'top', 'bottom']); const prefix = 'rw-calendar-transition'; const active = 'rw-calendar-transition-active'; const next = 'rw-calendar-transition-next'; const prev = 'rw-calendar-transition-prev'; const clone = (el, cls) => el && /*#__PURE__*/_react.default.cloneElement(el, { className: (0, _classnames.default)(el.props.className, prefix, cls) }); class SlideTransitionGroup extends _react.default.Component { constructor(args) { super(args); this.handleTransitionEnd = hadFocus => { this.isTransitioning = false; let current = this.container.current.lastChild; if (this.props.onTransitionEnd) this.props.onTransitionEnd(current, hadFocus); }; this.current = this.props.children; this.container = /*#__PURE__*/_react.default.createRef(); this.state = { prevClasses: '', currentClasses: '' }; } componentDidUpdate() { if (!this.flush || this.isTransitioning) return; this.flush = false; this.isTransitioning = true; let previous = this.container.current.firstChild; const hadFocus = document.activeElement && previous.contains(document.activeElement); this.setState({ prevClasses: '', currentClasses: next }, () => { let current = this.container.current.lastChild; current.clientHeight; // eslint-disable-line this.setState({ prevClasses: prev, currentClasses: (0, _classnames.default)(next, active) }, () => { (0, _transitionEnd.default)(current, () => { this.prev = null; if (this.current.key !== this.props.children.key) { this.current = this.props.children; } this.setState({ prevClasses: '', currentClasses: '' }, () => this.handleTransitionEnd(hadFocus)); }); }); }); } render() { let _this$props = this.props, { direction, children } = _this$props, props = _objectWithoutPropertiesLoose(_this$props, _excluded); if (!this.isTransitioning) { if (this.current.key !== children.key) { this.prev = this.current; this.flush = true; } this.current = children; } let { prevClasses, currentClasses } = this.state; return /*#__PURE__*/_react.default.createElement("div", _extends({}, props, { ref: this.container, className: (0, _classnames.default)(`rw-calendar-transition-group`, direction === 'top' && 'rw-calendar-transition-top', direction === 'right' && 'rw-calendar-transition-right', direction === 'bottom' && 'rw-calendar-transition-bottom', direction === 'left' && 'rw-calendar-transition-left') }), clone(this.prev, prevClasses), clone(this.current, currentClasses)); } } SlideTransitionGroup.defaultProps = { direction: 'left' }; SlideTransitionGroup.propTypes = { direction: DirectionPropType, onTransitionEnd: _propTypes.default.func }; var _default = SlideTransitionGroup; exports.default = _default;