UNPKG

react-stack-grid

Version:
255 lines (217 loc) 9.78 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _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; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _shallowequal = require('shallowequal'); var _shallowequal2 = _interopRequireDefault(_shallowequal); var _styleHelper = require('../utils/style-helper'); var _requestAnimationFrame = require('../animations/request-animation-frame'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var getTransitionStyles = function getTransitionStyles(type, props) { var rect = props.rect, containerSize = props.containerSize, index = props.index; return props[type](rect, containerSize, index); }; var getPositionStyles = function getPositionStyles(rect, zIndex, rtl) { return { translateX: (rtl ? -Math.round(rect.left) : Math.round(rect.left)) + 'px', translateY: Math.round(rect.top) + 'px', zIndex: zIndex }; }; var GridItem = function (_Component) { _inherits(GridItem, _Component); function GridItem(props) { _classCallCheck(this, GridItem); var _this = _possibleConstructorReturn(this, (GridItem.__proto__ || Object.getPrototypeOf(GridItem)).call(this, props)); _this.mounted = false; _this.appearTimer = null; _this.node = null; _this.state = _extends({}, getPositionStyles(props.rect, 1, props.rtl), getTransitionStyles('appear', props)); return _this; } _createClass(GridItem, [{ key: 'componentDidMount', value: function componentDidMount() { this.mounted = true; this.props.onMounted(this); } }, { key: 'componentWillUnmount', value: function componentWillUnmount() { this.mounted = false; clearTimeout(this.appearTimer); this.appearTimer = null; this.props.onUnmount(this); } }, { key: 'componentWillReceiveProps', value: function componentWillReceiveProps(nextProps) { var _this2 = this; if (!(0, _shallowequal2.default)(nextProps, this.props)) { (0, _requestAnimationFrame.raf)(function () { _this2.setStateIfNeeded(_extends({}, _this2.state, getPositionStyles(nextProps.rect, 2, nextProps.rtl))); }); } } }, { key: 'shouldComponentUpdate', value: function shouldComponentUpdate(nextProps, nextState) { return !(0, _shallowequal2.default)(nextProps, this.props) || !(0, _shallowequal2.default)(nextState, this.state); } }, { key: 'componentWillAppear', value: function componentWillAppear(callback) { this.appearTimer = setTimeout(callback, this.props.appearDelay * this.props.index); } }, { key: 'componentDidAppear', value: function componentDidAppear() { this.setAppearedStyles(); } }, { key: 'componentWillEnter', value: function componentWillEnter(callback) { this.setEnterStyles(); this.forceUpdate(callback); } }, { key: 'componentDidEnter', value: function componentDidEnter() { this.setEnteredStyles(); } }, { key: 'componentWillLeave', value: function componentWillLeave(callback) { this.setLeaveStyles(); setTimeout(callback, this.props.duration); } }, { key: 'setStateIfNeeded', value: function setStateIfNeeded(state) { if (this.mounted) { this.setState(state); } } }, { key: 'setAppearedStyles', value: function setAppearedStyles() { this.setStateIfNeeded(_extends({}, this.state, getTransitionStyles('appeared', this.props), getPositionStyles(this.props.rect, 1, this.props.rtl))); } }, { key: 'setEnterStyles', value: function setEnterStyles() { this.setStateIfNeeded(_extends({}, this.state, getPositionStyles(this.props.rect, 2, this.props.rtl), getTransitionStyles('enter', this.props))); } }, { key: 'setEnteredStyles', value: function setEnteredStyles() { this.setStateIfNeeded(_extends({}, this.state, getTransitionStyles('entered', this.props), getPositionStyles(this.props.rect, 1, this.props.rtl))); } }, { key: 'setLeaveStyles', value: function setLeaveStyles() { this.setStateIfNeeded(_extends({}, this.state, getPositionStyles(this.props.rect, 2, this.props.rtl), getTransitionStyles('leaved', this.props))); } }, { key: 'render', value: function render() { var _this3 = this; var _props = this.props, index = _props.index, Element = _props.component, containerSize = _props.containerSize, appearDelay = _props.appearDelay, appear = _props.appear, appeared = _props.appeared, enter = _props.enter, entered = _props.entered, leaved = _props.leaved, onMounted = _props.onMounted, onUnmount = _props.onUnmount, itemKey = _props.itemKey, rect = _props.rect, duration = _props.duration, easing = _props.easing, units = _props.units, vendorPrefix = _props.vendorPrefix, userAgent = _props.userAgent, rtl = _props.rtl, rest = _objectWithoutProperties(_props, ['index', 'component', 'containerSize', 'appearDelay', 'appear', 'appeared', 'enter', 'entered', 'leaved', 'onMounted', 'onUnmount', 'itemKey', 'rect', 'duration', 'easing', 'units', 'vendorPrefix', 'userAgent', 'rtl']); var style = (0, _styleHelper.buildStyles)(_extends({}, this.state, { display: 'block', position: 'absolute', top: 0 }, rtl ? { right: 0 } : { left: 0 }, { width: rect.width, transition: (0, _styleHelper.transition)(['opacity', 'transform'], duration, easing) }), units, vendorPrefix, userAgent); /* eslint-disable no-return-assign */ return _react2.default.createElement(Element, _extends({}, rest, { ref: function ref(node) { return _this3.node = node; }, style: style })); /* eslint-enable no-return-assign */ } }]); return GridItem; }(_react.Component); GridItem.propTypes = { itemKey: _propTypes2.default.string, index: _propTypes2.default.number, component: _propTypes2.default.string, rect: _propTypes2.default.shape({ top: _propTypes2.default.number, left: _propTypes2.default.number, width: _propTypes2.default.number, height: _propTypes2.default.number }), containerSize: _propTypes2.default.shape({ width: _propTypes2.default.number, height: _propTypes2.default.number, actualWidth: _propTypes2.default.number }), duration: _propTypes2.default.number, easing: _propTypes2.default.string, appearDelay: _propTypes2.default.number, appear: _propTypes2.default.func, appeared: _propTypes2.default.func, enter: _propTypes2.default.func, entered: _propTypes2.default.func, leaved: _propTypes2.default.func, units: _propTypes2.default.shape({ length: _propTypes2.default.string, angle: _propTypes2.default.string }), vendorPrefix: _propTypes2.default.bool, userAgent: _propTypes2.default.string, onMounted: _propTypes2.default.func, onUnmount: _propTypes2.default.func, rtl: _propTypes2.default.bool }; var _default = GridItem; exports.default = _default; ; var _temp = function () { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } __REACT_HOT_LOADER__.register(getTransitionStyles, 'getTransitionStyles', 'src/components/GridItem.js'); __REACT_HOT_LOADER__.register(getPositionStyles, 'getPositionStyles', 'src/components/GridItem.js'); __REACT_HOT_LOADER__.register(GridItem, 'GridItem', 'src/components/GridItem.js'); __REACT_HOT_LOADER__.register(_default, 'default', 'src/components/GridItem.js'); }(); ;