backpack-ui
Version:
Lonely Planet's Components
253 lines (188 loc) • 7.46 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _class, _temp2; /* eslint-disable */
// https://github.com/souporserious/react-motion-ui-pack/blob/master/src/Transition.jsx
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _reactMotion = require('react-motion');
var _isElement = require('./is-element');
var _isElement2 = _interopRequireDefault(_isElement);
var _fromRMStyles = require('./from-RM-styles');
var _fromRMStyles2 = _interopRequireDefault(_fromRMStyles);
var _toRMStyles = require('./to-RM-styles');
var _toRMStyles2 = _interopRequireDefault(_toRMStyles);
var _configToStyle = require('./config-to-style');
var _configToStyle2 = _interopRequireDefault(_configToStyle);
var _specialAssign = require('./special-assign');
var _specialAssign2 = _interopRequireDefault(_specialAssign);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var checkedProps = {
component: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.bool, _isElement2.default]),
runOnMount: _propTypes2.default.bool,
appear: _propTypes2.default.object,
enter: _propTypes2.default.object,
leave: _propTypes2.default.object,
onEnter: _propTypes2.default.func,
onLeave: _propTypes2.default.func
};
var Transition = (_temp2 = _class = function (_Component) {
(0, _inherits3.default)(Transition, _Component);
function Transition() {
var _ref;
var _temp, _this, _ret;
(0, _classCallCheck3.default)(this, Transition);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = Transition.__proto__ || (0, _getPrototypeOf2.default)(Transition)).call.apply(_ref, [this].concat(args))), _this), _this._getDefaultStyles = function () {
return _react.Children.map(_this.props.children, function (child) {
if (child) {
return {
key: child.key,
data: child,
style: (0, _extends3.default)({}, _this._getMountStyles())
};
}
});
}, _this._getStyles = function () {
var _this$props = _this.props,
component = _this$props.component,
children = _this$props.children,
enter = _this$props.enter;
return _react.Children.map(children, function (child) {
if (!child) return;
var key = child.key;
if (!key) {
console.error('You must provide a key for every child of Transition.');
}
return {
key: key,
data: child,
style: (0, _extends3.default)({}, (0, _toRMStyles2.default)(enter))
};
});
}, _this._willEnter = function (_ref2) {
var key = _ref2.key,
style = _ref2.style;
var _this$props2 = _this.props,
appear = _this$props2.appear,
leave = _this$props2.leave,
onEnter = _this$props2.onEnter;
var childStyles = (typeof appear === 'undefined' ? 'undefined' : (0, _typeof3.default)(appear)) === 'object' ? appear : leave;
// fire enter callback
onEnter(childStyles);
return childStyles;
}, _this._willLeave = function (_ref3) {
var key = _ref3.key,
style = _ref3.style;
var _this$props3 = _this.props,
leave = _this$props3.leave,
onLeave = _this$props3.onLeave;
// fire leaving callback
onLeave(style);
return (0, _toRMStyles2.default)(leave);
}, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
}
(0, _createClass3.default)(Transition, [{
key: 'componentWillMount',
value: function componentWillMount() {
var _props = this.props,
component = _props.component,
runOnMount = _props.runOnMount,
onEnter = _props.onEnter,
children = _props.children;
if (runOnMount) {
onEnter(this._getMountStyles());
}
}
}, {
key: '_getMountStyles',
value: function _getMountStyles() {
var _props2 = this.props,
runOnMount = _props2.runOnMount,
appear = _props2.appear,
enter = _props2.enter,
leave = _props2.leave,
children = _props2.children;
return (0, _fromRMStyles2.default)(runOnMount ? appear || leave : enter);
}
}, {
key: '_childrenToRender',
value: function _childrenToRender(currValues) {
return currValues.map(function (_ref4) {
var key = _ref4.key,
data = _ref4.data,
style = _ref4.style;
var child = data;
var childStyle = child.props.style;
// convert styles to a friendly structure
style = (0, _configToStyle2.default)(style);
// merge in any styles set by the user
// Transition styles will take precedence
if (childStyle) {
style = (0, _extends3.default)({}, childStyle, style);
}
return (0, _react.cloneElement)(child, { style: style });
});
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
var component = this.props.component;
var props = (0, _specialAssign2.default)({}, this.props, checkedProps);
return _react2.default.createElement(
_reactMotion.TransitionMotion,
{
defaultStyles: this._getDefaultStyles(),
styles: this._getStyles(),
willEnter: this._willEnter,
willLeave: this._willLeave
},
function (currValues) {
var children = _this2._childrenToRender(currValues);
var child = null;
if (!component || component === 'false') {
if (_react.Children.count(children) === 1) {
child = _react.Children.only(children[0]);
}
} else {
child = (0, _react.createElement)(component, props, children);
}
return child;
}
);
}
}]);
return Transition;
}(_react.Component), _class.propTypes = checkedProps, _class.defaultProps = {
component: 'div',
runOnMount: true,
enter: { opacity: 1 },
leave: { opacity: 0 },
onEnter: function onEnter() {
return null;
},
onLeave: function onLeave() {
return null;
}
}, _temp2);
exports.default = Transition;