UNPKG

cuz

Version:

Front-end modular development kit.

286 lines (242 loc) 7.64 kB
'use strict'; var _objectWithoutProperties = require('babel-runtime/helpers/object-without-properties')['default']; var _extends = require('babel-runtime/helpers/extends')['default']; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; exports.__esModule = true; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _Button = require('../Button'); var _Button2 = _interopRequireDefault(_Button); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _reactBootstrap = require('react-bootstrap'); var _CategoryGroup = require('./CategoryGroup'); var _CategoryGroup2 = _interopRequireDefault(_CategoryGroup); var _CategoryItem = require('./CategoryItem'); var _CategoryItem2 = _interopRequireDefault(_CategoryItem); function getChildLength(_x, _x2) { var _again = true; _function: while (_again) { var data = _x, length = _x2; _again = false; if (data[0].children === undefined) { return length; } _x = data[0].children; _x2 = length + 1; _again = true; continue _function; } } function getChild(_x3, _x4, _x5, _x6) { var _again2 = true; _function2: while (_again2) { var index = _x3, start = _x4, key = _x5, indexArray = _x6; _again2 = false; if (index < 1) { return key; } if (indexArray[start] === undefined) { indexArray[start] = 0; } _x3 = index - 1; _x4 = start + 1; _x5 = key[indexArray[start]].children; _x6 = indexArray; _again2 = true; continue _function2; } } var Category = _react2['default'].createClass({ displayName: 'Category', propTypes: { children: _react2['default'].PropTypes.any, className: _react2['default'].PropTypes.string, confirmButton: _react2['default'].PropTypes.bool, cancelButton: _react2['default'].PropTypes.bool, onSelect: _react2['default'].PropTypes.func, onCancel: _react2['default'].PropTypes.func, onHover: _react2['default'].PropTypes.func, hide: _react2['default'].PropTypes.bool, open: _react2['default'].PropTypes.bool, triggerType: _react2['default'].PropTypes.string, confirmText: _react2['default'].PropTypes.string, cancelText: _react2['default'].PropTypes.string, data: _react2['default'].PropTypes.array }, getDefaultProps: function getDefaultProps() { return { confirmButton: false, cancelButton: false, triggerType: 'click', confirmText: '确认', cancelText: '取消' }; }, getInitialState: function getInitialState() { return { selected: {}, cateLevel: 0, indexArray: [] }; }, onSelect: function onSelect(key, children, level, index, event) { var _props = this.props; var onSelect = _props.onSelect; var confirmButton = _props.confirmButton; var triggerType = _props.triggerType; var indexArray = this.state.indexArray.concat(); indexArray[level] = index; if (triggerType === 'click') { this.setState({ cateLevel: level + 1, indexArray: indexArray }); } if (confirmButton) { this.setState({ selected: { key: key, index: index, children: children, level: level, event: event } }); } else { onSelect(key, children, level, index, event); } }, onHover: function onHover(key, children, level, index, event) { var _props2 = this.props; var onHover = _props2.onHover; var triggerType = _props2.triggerType; var indexArray = this.state.indexArray.concat(); indexArray[level] = index; if (triggerType === 'hover') { this.setState({ cateLevel: level + 1, indexArray: indexArray }); } if (onHover) { onHover(key, children, level, index, event); } }, onConfirm: function onConfirm() { var _state$selected = this.state.selected; var key = _state$selected.key; var children = _state$selected.children; var level = _state$selected.level; var index = _state$selected.index; var event = _state$selected.event; var onSelect = this.props.onSelect; if (onSelect) { onSelect(key, children, level, index, event); } }, onCancel: function onCancel() { var onCancel = this.props.onCancel; if (onCancel) { onCancel(); } }, renderGroup: function renderGroup(child, index) { var _props3 = this.props; var triggerType = _props3.triggerType; var onHover = _props3.onHover; return _react.cloneElement(child, { level: index, onSelect: this.onSelect, onHover: onHover, triggerType: triggerType }); }, renderItem: function renderItem(level) { var _this = this; var data = this.props.data; var child = getChild(level, 0, data, this.state.indexArray); var items = []; if (child) { child.map(function (item, num) { items.push(_react2['default'].createElement( _CategoryItem2['default'], { index: num, key: item.id, id: item.id, onSelect: _this.onSelect, child: item.children }, item.name )); }); } return items; }, renderCategory: function renderCategory() { var category = []; var _props4 = this.props; var data = _props4.data; var open = _props4.open; var cateLevel = undefined; if (open) { cateLevel = getChildLength(data, 0); } else { cateLevel = this.state.cateLevel; } for (var index = 0; index <= cateLevel; index++) { category.push(_react2['default'].createElement( _CategoryGroup2['default'], { key: index, level: index, onSelect: this.onSelect, onHover: this.onHover, triggerType: this.props.triggerType }, this.renderItem(index) )); } return category; }, render: function render() { var _props5 = this.props; var className = _props5.className; var children = _props5.children; var confirmButton = _props5.confirmButton; var cancelButton = _props5.cancelButton; var hide = _props5.hide; var confirmText = _props5.confirmText; var cancelText = _props5.cancelText; var data = _props5.data; var props = _objectWithoutProperties(_props5, ['className', 'children', 'confirmButton', 'cancelButton', 'hide', 'confirmText', 'cancelText', 'data']); return _react2['default'].createElement( 'div', { className: _classnames2['default']('category-container', { 'hide': hide }, className) }, _react2['default'].createElement( 'div', _extends({ className: _classnames2['default']('category', { 'has-button': confirmButton || cancelButton }) }, props), data === undefined ? _reactBootstrap.utils.ValidComponentChildren.map(this.props.children, this.renderGroup) : this.renderCategory() ), _react2['default'].createElement( 'div', { className: 'category-footer' }, confirmButton && _react2['default'].createElement( _Button2['default'], { bsStyle: 'primary', onClick: this.onConfirm, bsSize: 'small' }, confirmText ), cancelButton && _react2['default'].createElement( _Button2['default'], { onClick: this.onCancel, bsSize: 'small' }, cancelText ) ) ); } }); exports['default'] = Category; module.exports = exports['default'];