react-native-web-headroom
Version:
React Native Web Headroom
247 lines (189 loc) • 7.88 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
var _assign = require('babel-runtime/core-js/object/assign');
var _assign2 = _interopRequireDefault(_assign);
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 _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _velocityReact = require('velocity-react');
var _header = require('./header');
var _header2 = _interopRequireDefault(_header);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var TreeNode = function (_React$Component) {
(0, _inherits3.default)(TreeNode, _React$Component);
function TreeNode() {
(0, _classCallCheck3.default)(this, TreeNode);
var _this = (0, _possibleConstructorReturn3.default)(this, (TreeNode.__proto__ || (0, _getPrototypeOf2.default)(TreeNode)).call(this));
_this.onClick = _this.onClick.bind(_this);
return _this;
}
(0, _createClass3.default)(TreeNode, [{
key: 'onClick',
value: function onClick() {
var _props = this.props,
node = _props.node,
onToggle = _props.onToggle;
var toggled = node.toggled;
if (onToggle) {
onToggle(node, !toggled);
}
}
}, {
key: 'animations',
value: function animations() {
var _props2 = this.props,
animations = _props2.animations,
node = _props2.node;
if (animations === false) {
return false;
}
var anim = (0, _assign2.default)({}, animations, node.animations);
return {
toggle: anim.toggle(this.props),
drawer: anim.drawer(this.props)
};
}
}, {
key: 'decorators',
value: function decorators() {
// Merge Any Node Based Decorators Into The Pack
var _props3 = this.props,
decorators = _props3.decorators,
node = _props3.node;
var nodeDecorators = node.decorators || {};
return (0, _assign2.default)({}, decorators, nodeDecorators);
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
var style = this.props.style;
var decorators = this.decorators();
var animations = this.animations();
return _react2.default.createElement(
'li',
{ ref: function ref(_ref) {
return _this2.topLevelRef = _ref;
},
style: style.base },
this.renderHeader(decorators, animations),
this.renderDrawer(decorators, animations)
);
}
}, {
key: 'renderDrawer',
value: function renderDrawer(decorators, animations) {
var _this3 = this;
var toggled = this.props.node.toggled;
if (!animations && !toggled) {
return null;
} else if (!animations && toggled) {
return this.renderChildren(decorators, animations);
}
var _animations$drawer = animations.drawer,
animation = _animations$drawer.animation,
duration = _animations$drawer.duration,
restAnimationInfo = (0, _objectWithoutProperties3.default)(_animations$drawer, ['animation', 'duration']);
return _react2.default.createElement(
_velocityReact.VelocityTransitionGroup,
(0, _extends3.default)({}, restAnimationInfo, {
ref: function ref(_ref2) {
return _this3.velocityRef = _ref2;
} }),
toggled ? this.renderChildren(decorators, animations) : null
);
}
}, {
key: 'renderHeader',
value: function renderHeader(decorators, animations) {
var _props4 = this.props,
node = _props4.node,
style = _props4.style;
return _react2.default.createElement(_header2.default, { animations: animations,
decorators: decorators,
node: (0, _assign2.default)({}, node),
onClick: this.onClick,
style: style });
}
}, {
key: 'renderChildren',
value: function renderChildren(decorators) {
var _this4 = this;
var _props5 = this.props,
animations = _props5.animations,
propDecorators = _props5.decorators,
node = _props5.node,
style = _props5.style;
if (node.loading) {
return this.renderLoading(decorators);
}
var children = node.children;
if (!Array.isArray(children)) {
children = children ? [children] : [];
}
return _react2.default.createElement(
'ul',
{ style: style.subtree,
ref: function ref(_ref3) {
return _this4.subtreeRef = _ref3;
} },
children.map(function (child, index) {
return _react2.default.createElement(TreeNode, (0, _extends3.default)({}, _this4._eventBubbles(), {
animations: animations,
decorators: propDecorators,
key: child.id || index,
node: child,
style: style }));
})
);
}
}, {
key: 'renderLoading',
value: function renderLoading(decorators) {
var style = this.props.style;
return _react2.default.createElement(
'ul',
{ style: style.subtree },
_react2.default.createElement(
'li',
null,
_react2.default.createElement(decorators.Loading, { style: style.loading })
)
);
}
}, {
key: '_eventBubbles',
value: function _eventBubbles() {
var onToggle = this.props.onToggle;
return {
onToggle: onToggle
};
}
}]);
return TreeNode;
}(_react2.default.Component);
TreeNode.propTypes = {
style: _propTypes2.default.object.isRequired,
node: _propTypes2.default.object.isRequired,
decorators: _propTypes2.default.object.isRequired,
animations: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.bool]).isRequired,
onToggle: _propTypes2.default.func
};
exports.default = TreeNode;