dh-c
Version:
The front-end development engineers jimberton gulp react component
186 lines (156 loc) • 7.16 kB
JavaScript
;
exports.__esModule = true;
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _item = require('./item');
var _item2 = _interopRequireDefault(_item);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: 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; }
var List = function (_React$Component) {
_inherits(List, _React$Component);
function List(props) {
_classCallCheck(this, List);
var _this = _possibleConstructorReturn(this, _React$Component.call(this, props));
_this.state = {
selectedKeys: []
};
_this.handleChange = _this.handleChange.bind(_this);
return _this;
}
List.prototype.componentDidMount = function componentDidMount() {
var selectedKeys = [];
if (this.props.defaultKeys) {
var defaultKeys = this.props.defaultKeys;
if (typeof defaultKeys === 'string') {
selectedKeys = [defaultKeys];
console.error('Error:', 'defaultKeys is defined as Array, you pass in a string!!!');
} else if (Array.isArray(defaultKeys)) {
selectedKeys = defaultKeys;
}
} else if (this.props.selectedKeys) {
if (Array.isArray(this.props.selectedKeys)) {
selectedKeys = this.props.selectedKeys;
} else {
throw new Error('selectedKeys is data type error');
}
}
this.setState({ selectedKeys: selectedKeys });
};
List.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
var selectedKeys = [];
if (JSON.stringify(nextProps.defaultKeys) !== JSON.stringify(this.props.defaultKeys)) {
if (nextProps.defaultKeys) {
var defaultKeys = this.props.defaultKeys;
if (typeof defaultKeys === 'string') {
selectedKeys = [defaultKeys];
console.error('Error:', 'defaultKeys is defined as Array, you pass in a string!!!');
} else if (Array.isArray(defaultKeys)) {
selectedKeys = defaultKeys;
}
}
}
if (JSON.stringify(nextProps.selectedKeys) !== JSON.stringify(this.props.defaultKeys)) {
if (Array.isArray(nextProps.selectedKeys)) {
selectedKeys = nextProps.selectedKeys;
} else {
throw new Error('selectedKeys is data type error');
}
}
this.setState({ selectedKeys: selectedKeys });
};
List.prototype.getChildContext = function getChildContext() {
var forbid = ['only', 'multiple'].indexOf(this.props.mode) !== -1 ? true : false;
return {
animation: this.props.animation,
itemClassName: this.props.itemClassName, // 子元素的classNames
itemStyles: this.props.itemStyles, // 子元素的styles
forbid: forbid
};
};
List.prototype.handleChange = function handleChange(key, selected) {
var _this2 = this;
var _props = this.props,
multiple = _props.multiple,
mode = _props.mode,
immutable = _props.immutable;
var selectedKeys = this.state.selectedKeys;
var selectedRowKeys = [];
if (typeof mode === 'string' && mode === 'only') {
selectedRowKeys = selected ? [key] : [];
// // immutable -- only 模式下的可变性
// if (typeof immutable === 'boolean' && immutable) {
// selectedRowKeys = [key];
// } else {
// console.log('wjb-s', selected);
// }
} else if (typeof mode === 'string' && mode === 'multiple') {
selectedRowKeys = selected ? Array.from(new Set([].concat(selectedKeys, [key]))) : selectedKeys.filter(function (srk) {
return srk !== key;
});
}
this.setState({ selectedKeys: selectedRowKeys }, function () {
if (_this2.props.onChange) {
_this2.props.onChange(selectedRowKeys);
}
});
};
List.prototype.render = function render() {
var _classNames,
_this3 = this;
var _props2 = this.props,
children = _props2.children,
bordered = _props2.bordered,
shadow = _props2.shadow,
className = _props2.className,
style = _props2.style;
var selectedKeys = this.props.selectedKeys ? this.props.selectedKeys : this.state.selectedKeys;
return _react2.default.createElement(
'ul',
{
style: style,
className: (0, _classnames2.default)('dh-list', (_classNames = {
'dh-list-borderd': bordered
}, _classNames[className] = className, _classNames))
},
_react2.default.Children.map(children, function (child, idx) {
var props = _extends({}, child.props, {
onChange: _this3.handleChange,
eventKey: child.key,
selectedKeys: selectedKeys
});
return _extends({}, child, { props: props });
})
);
};
return List;
}(_react2.default.Component);
List.Item = _item2.default;
List.propsTypes = {
defaultKeys: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.arrayOf(_propTypes2.default.string)]), // 默认选中的项
selectedKeys: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.arrayOf(_propTypes2.default.string)]), //选中的项
mode: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.oneOf(['only', 'multiple'])]),
animation: _propTypes2.default.bool,
onChange: _propTypes2.default.func,
className: _propTypes2.default.string,
itemClassName: _propTypes2.default.string, // 子元素的classNames
itemStyles: _propTypes2.default.object };
List.childContextTypes = {
itemClassName: _propTypes2.default.string, // 子元素的classNames
itemStyles: _propTypes2.default.object, // 子元素的styles
animation: _propTypes2.default.bool,
forbid: _propTypes2.default.bool };
List.defaultProps = {
mode: false,
multiple: false,
immutable: false,
animation: true,
icon: false
};
exports.default = List;