UNPKG

dragon-mobile-ui

Version:
305 lines (257 loc) 9.68 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); 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 _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _classnames2 = require('classnames'); var _classnames3 = _interopRequireDefault(_classnames2); var _arrayTreeFilter = require('./array-tree-filter'); var _arrayTreeFilter2 = _interopRequireDefault(_arrayTreeFilter); var _MultiPicker = require('./MultiPicker'); var _MultiPicker2 = _interopRequireDefault(_MultiPicker); var _Cascader = require('./Cascader'); var _Cascader2 = _interopRequireDefault(_Cascader); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 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; } // 阻止选择器区域的默认事件 function onContainerClick(e) { e.stopPropagation(); } var CascaderPicker = function (_Component) { _inherits(CascaderPicker, _Component); function CascaderPicker(props) { _classCallCheck(this, CascaderPicker); var _this = _possibleConstructorReturn(this, (CascaderPicker.__proto__ || Object.getPrototypeOf(CascaderPicker)).call(this, props)); _this.state = { visible: props.visible || false, value: props.value, data: props.data, cascade: Object.prototype.toString.call(props.data[0]) !== '[object Array]' }; _this.tempValue = props.value; return _this; } _createClass(CascaderPicker, [{ key: 'componentWillReceiveProps', value: function componentWillReceiveProps(nextProps) { if ('value' in nextProps) { this.setState({ value: nextProps.value, data: nextProps.data, cascade: Object.prototype.toString.call(nextProps.data[0]) !== '[object Array]' }); } } }, { key: 'onValueChange', value: function onValueChange(value) { this.props.onChange(value); } }, { key: 'onCancel', value: function onCancel() { var onCancel = this.props.onCancel; this.toggle(); this.setState({ value: this.tempValue }); onCancel && onCancel(); } }, { key: 'onOk', value: function onOk() { var onOk = this.props.onOk; var value = this.getInitValue(); this.tempValue = value; this.toggle(); onOk && onOk(value); } }, { key: 'onMaskClick', value: function onMaskClick() { var onMaskClick = this.props.onMaskClick; this.onCancel(); onMaskClick && onMaskClick(); } }, { key: 'getInitValue', value: function getInitValue() { var data = this.state.data; var value = this.state.value; if (!value || !value.length) { // 判断数据是否为级联,简单判断数据第一个元素是否为数组 if (this.state.cascade) { for (var i = 0; i < this.props.cols; i += 1) { if (data && data.length) { value[i] = data[0].value; data = data[0].children; } } } else { data.forEach(function (d) { value.push(d[0].value); }); } } return value; } // 切换显示状态 }, { key: 'toggle', value: function toggle() { if (this.props.disabled) { return; } this.setState({ visible: !this.state.visible }); } }, { key: 'render', value: function render() { var _this2 = this; var _props = this.props, prefixCls = _props.prefixCls, format = _props.format, disabled = _props.disabled, pickerPrefixCls = _props.pickerPrefixCls, className = _props.className, cancelText = _props.cancelText, okText = _props.okText, title = _props.title, placeholder = _props.placeholder; var _state = this.state, data = _state.data, value = _state.value; var Picker = null; var classes = (0, _classnames3.default)(_defineProperty({ 'ui-picker-container': true, 'ui-picker-hidden': !this.state.visible }, className, !!className)); var inputCls = (0, _classnames3.default)({ 'ui-picker-placeholder': !value.join(format), 'ui-picker-disabled': !!disabled }); var cols = data.map(function (d) { return { props: { children: d } }; }); if (this.state.cascade) { Picker = _react2.default.createElement(_Cascader2.default, { prefixCls: prefixCls, pickerPrefixCls: pickerPrefixCls, data: data, value: this.state.value, cols: this.props.cols, onChange: function onChange(v) { return _this2.onValueChange(v); } }); } else { Picker = _react2.default.createElement( _MultiPicker2.default, { className: className, prefixCls: prefixCls, pickerPrefixCls: pickerPrefixCls, selectedValue: value, onValueChange: function onValueChange(v) { return _this2.onValueChange(v); } }, cols ); } var display = function display() { if (_this2.state.cascade) { if (value.length) { var treeChildren = (0, _arrayTreeFilter2.default)(_this2.props.data, function (c, level) { return c.value === value[level]; }); return treeChildren.map(function (v) { return v.label; }).join(format); } return value.join(format) || placeholder; } return value.join(format) || placeholder; }; return _react2.default.createElement( 'div', { className: 'ui-picker-group', onClick: function onClick() { return _this2.toggle(); } }, _react2.default.createElement( 'div', { className: inputCls }, display() ), _react2.default.createElement( 'div', { className: classes, onClick: function onClick(e) { return onContainerClick(e); } }, _react2.default.createElement('div', { className: 'ui-picker-mask', onClick: function onClick() { return _this2.onMaskClick(); } }), _react2.default.createElement( 'div', { className: 'ui-picker-inner' }, _react2.default.createElement( 'div', { className: 'ui-picker-header' }, _react2.default.createElement( 'div', { className: 'ui-picker-cancel', onClick: function onClick() { return _this2.onCancel(); } }, cancelText ), _react2.default.createElement( 'div', { className: 'ui-picker-title' }, title ), _react2.default.createElement( 'div', { className: 'ui-picker-submit', onClick: function onClick() { return _this2.onOk(); } }, okText ) ), _react2.default.createElement( 'div', { className: 'ui-picker-mask-top' }, _react2.default.createElement( 'div', { className: 'ui-picker-mask-bottom' }, Picker ) ) ) ) ); } }]); return CascaderPicker; }(_react.Component); CascaderPicker.propTypes = { visible: _propTypes2.default.bool, title: _propTypes2.default.string, cancelText: _propTypes2.default.string, okText: _propTypes2.default.string }; CascaderPicker.defaultProps = { visible: false, cancelText: '取消', okText: '确定', cols: 3, value: [] }; exports.default = CascaderPicker;