react-foundation-components-fork
Version:
Foundation Sites components built with the power of React and CSS Modules
180 lines (129 loc) • 5.13 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Collapse = undefined;
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _parseInt = require('babel-runtime/core-js/number/parse-int');
var _parseInt2 = _interopRequireDefault(_parseInt);
var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _bind = require('classnames/bind');
var _bind2 = _interopRequireDefault(_bind);
var _Transition = require('react-overlays/lib/Transition');
var _Transition2 = _interopRequireDefault(_Transition);
var _style = require('dom-helpers/style');
var _style2 = _interopRequireDefault(_style);
var _capitalize = require('underscore.string/capitalize');
var _capitalize2 = _interopRequireDefault(_capitalize);
var _styles = require('./_styles.scss');
var _styles2 = _interopRequireDefault(_styles);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var cxStyles = _bind2.default.bind(_styles2.default);
var MARGINS = {
height: ['marginTop', 'marginBottom'],
width: ['marginLeft', 'marginRight']
};
var Collapse = function Collapse(_ref) {
var className = _ref.className,
dimension = _ref.dimension,
onEnter = _ref.onEnter,
onEntered = _ref.onEntered,
onEntering = _ref.onEntering,
onExit = _ref.onExit,
onExiting = _ref.onExiting,
restProps = (0, _objectWithoutProperties3.default)(_ref, ['className', 'dimension', 'onEnter', 'onEntered', 'onEntering', 'onExit', 'onExiting']);
var classNames = (0, _classnames2.default)(className, cxStyles(dimension));
var onTransitionEnter = function onTransitionEnter() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var elem = args[0];
elem.style[dimension] = '0';
if (onEnter) {
onEnter.apply(undefined, args);
}
};
var onTransitionEntered = function onTransitionEntered() {
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
var elem = args[0];
elem.style[dimension] = null;
if (onEntered) {
onEntered.apply(undefined, args);
}
};
var onTransitionEntering = function onTransitionEntering() {
for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
args[_key3] = arguments[_key3];
}
var elem = args[0];
var size = elem['scroll' + (0, _capitalize2.default)(dimension)];
elem.style[dimension] = size + 'px';
if (onEntering) {
onEntering.apply(undefined, args);
}
};
var onTransitionExit = function onTransitionExit() {
for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
args[_key4] = arguments[_key4];
}
var elem = args[0];
var baseValue = elem['offset' + (0, _capitalize2.default)(dimension)];
var margins = MARGINS[dimension];
var value = baseValue + (0, _parseInt2.default)((0, _style2.default)(elem, margins[0]), 10) + (0, _parseInt2.default)((0, _style2.default)(elem, margins[1]), 10);
elem.style[dimension] = value + 'px';
if (onExit) {
onExit.apply(undefined, args);
}
};
var onTransitionExiting = function onTransitionExiting() {
for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
args[_key5] = arguments[_key5];
}
function triggerBrowserReflow(node) {
return node.offsetHeight;
}
var elem = args[0];
triggerBrowserReflow(elem);
elem.style[dimension] = '0';
if (onExiting) {
onExiting.apply(undefined, args);
}
};
return _react2.default.createElement(_Transition2.default, (0, _extends3.default)({}, restProps, {
className: classNames,
enteredClassName: cxStyles('collapsible', 'in'),
enteringClassName: cxStyles('collapsing'),
exitedClassName: cxStyles('collapsible'),
exitingClassName: cxStyles('collapsing'),
onEnter: onTransitionEnter,
onEntered: onTransitionEntered,
onEntering: onTransitionEntering,
onExit: onTransitionExit,
onExiting: onTransitionExiting
}));
};
exports.Collapse = Collapse;
Collapse.propTypes = {
className: _propTypes2.default.string,
dimension: _propTypes2.default.oneOf(['height', 'width']),
onEnter: _propTypes2.default.func,
onEntered: _propTypes2.default.func,
onEntering: _propTypes2.default.func,
onExit: _propTypes2.default.func,
onExiting: _propTypes2.default.func
};
Collapse.defaultProps = {
dimension: 'height',
timeout: 350
};
exports.default = Collapse;