antd
Version:
An enterprise-class UI design language and React-based implementation
327 lines (267 loc) • 11.7 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = undefined;
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 _class, _temp;
exports.isRenderResultPlainObject = isRenderResultPlainObject;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _checkbox = require('../checkbox');
var _checkbox2 = _interopRequireDefault(_checkbox);
var _search = require('./search');
var _search2 = _interopRequireDefault(_search);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _rcAnimate = require('rc-animate');
var _rcAnimate2 = _interopRequireDefault(_rcAnimate);
var _reactAddonsPureRenderMixin = require('react-addons-pure-render-mixin');
var _reactAddonsPureRenderMixin2 = _interopRequireDefault(_reactAddonsPureRenderMixin);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return 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) : _defaults(subClass, superClass); }
function noop() {}
function isRenderResultPlainObject(result) {
return result && !_react2["default"].isValidElement(result) && Object.prototype.toString.call(result) === '[object Object]';
}
var TransferList = (_temp = _class = function (_React$Component) {
_inherits(TransferList, _React$Component);
function TransferList(props) {
_classCallCheck(this, TransferList);
var _this = _possibleConstructorReturn(this, _React$Component.call(this, props));
_this.handleSelect = function (selectedItem) {
var checkedKeys = _this.props.checkedKeys;
var result = checkedKeys.some(function (key) {
return key === selectedItem.key;
});
_this.props.handleSelect(selectedItem, !result);
};
_this.handleFilter = function (e) {
_this.props.handleFilter(e);
};
_this.handleClear = function () {
_this.props.handleClear();
};
_this.state = {
mounted: false
};
return _this;
}
TransferList.prototype.componentDidMount = function componentDidMount() {
var _this2 = this;
this.timer = setTimeout(function () {
_this2.setState({
mounted: true
});
}, 0);
};
TransferList.prototype.componentWillUnmount = function componentWillUnmount() {
clearTimeout(this.timer);
};
TransferList.prototype.shouldComponentUpdate = function shouldComponentUpdate() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _reactAddonsPureRenderMixin2["default"].shouldComponentUpdate.apply(this, args);
};
TransferList.prototype.getCheckStatus = function getCheckStatus(filteredDataSource) {
var checkedKeys = this.props.checkedKeys;
if (checkedKeys.length === 0) {
return 'none';
} else if (filteredDataSource.every(function (item) {
return checkedKeys.indexOf(item.key) >= 0;
})) {
return 'all';
}
return 'part';
};
TransferList.prototype.renderCheckbox = function renderCheckbox(_ref) {
var _classNames,
_this3 = this;
var prefixCls = _ref.prefixCls,
filteredDataSource = _ref.filteredDataSource,
checked = _ref.checked,
checkPart = _ref.checkPart,
disabled = _ref.disabled,
checkable = _ref.checkable;
var checkAll = !checkPart && checked;
var checkboxCls = (0, _classnames2["default"])((_classNames = {}, _defineProperty(_classNames, prefixCls + '-checkbox', true), _defineProperty(_classNames, prefixCls + '-checkbox-indeterminate', checkPart), _defineProperty(_classNames, prefixCls + '-checkbox-checked', checkAll), _defineProperty(_classNames, prefixCls + '-checkbox-disabled', disabled), _classNames));
return _react2["default"].createElement(
'span',
{
ref: 'checkbox',
className: checkboxCls,
onClick: function onClick() {
return _this3.props.handleSelectAll(filteredDataSource, checkAll);
}
},
typeof checkable !== 'boolean' ? checkable : null
);
};
TransferList.prototype.matchFilter = function matchFilter(filterText, item, text) {
var filterOption = this.props.filterOption;
if (filterOption) {
return filterOption(filterText, item);
}
return text.indexOf(filterText) >= 0;
};
TransferList.prototype.render = function render() {
var _classNames2,
_this4 = this;
var _props = this.props,
prefixCls = _props.prefixCls,
dataSource = _props.dataSource,
titleText = _props.titleText,
filter = _props.filter,
checkedKeys = _props.checkedKeys,
body = _props.body,
footer = _props.footer,
showSearch = _props.showSearch,
render = _props.render,
style = _props.style;
var _props2 = this.props,
searchPlaceholder = _props2.searchPlaceholder,
notFoundContent = _props2.notFoundContent;
// Custom Layout
var footerDom = footer(_extends({}, this.props));
var bodyDom = body(_extends({}, this.props));
var listCls = (0, _classnames2["default"])((_classNames2 = {}, _defineProperty(_classNames2, prefixCls, true), _defineProperty(_classNames2, prefixCls + '-with-footer', !!footerDom), _classNames2));
var filteredDataSource = [];
var showItems = dataSource.map(function (item) {
var renderResult = render(item);
var renderedText = void 0;
var renderedEl = void 0;
if (isRenderResultPlainObject(renderResult)) {
renderedText = renderResult.value;
renderedEl = renderResult.label;
} else {
renderedText = renderResult;
renderedEl = renderResult;
}
if (filter && filter.trim() && !_this4.matchFilter(filter, item, renderedText)) {
return null;
}
filteredDataSource.push(item);
return _react2["default"].createElement(
'li',
{ onClick: function onClick() {
return _this4.handleSelect(item);
}, key: item.key, title: renderedText },
_react2["default"].createElement(_checkbox2["default"], { checked: checkedKeys.some(function (key) {
return key === item.key;
}) }),
_react2["default"].createElement(
'span',
null,
renderedEl
)
);
}).filter(function (item) {
return !!item;
});
var unit = '条';
if (this.context.antLocale && this.context.antLocale.Transfer) {
unit = dataSource.length > 1 ? this.context.antLocale.Transfer.itemsUnit : this.context.antLocale.Transfer.itemUnit;
searchPlaceholder = searchPlaceholder || this.context.antLocale.Transfer.searchPlaceholder;
notFoundContent = notFoundContent || this.context.antLocale.Transfer.notFoundContent;
}
var checkStatus = this.getCheckStatus(filteredDataSource);
return _react2["default"].createElement(
'div',
{ className: listCls, style: style },
_react2["default"].createElement(
'div',
{ className: prefixCls + '-header' },
this.renderCheckbox({
prefixCls: 'ant-transfer',
checked: checkStatus === 'all',
checkPart: checkStatus === 'part',
checkable: _react2["default"].createElement('span', { className: 'ant-transfer-checkbox-inner' }),
filteredDataSource: filteredDataSource
}),
_react2["default"].createElement(
'span',
{ className: prefixCls + '-header-selected' },
_react2["default"].createElement(
'span',
null,
(checkedKeys.length > 0 ? checkedKeys.length + '/' : '') + dataSource.length,
' ',
unit
),
_react2["default"].createElement(
'span',
{ className: prefixCls + '-header-title' },
titleText
)
)
),
bodyDom || _react2["default"].createElement(
'div',
{ className: showSearch ? prefixCls + '-body ' + prefixCls + '-body-with-search' : prefixCls + '-body' },
showSearch ? _react2["default"].createElement(
'div',
{ className: prefixCls + '-body-search-wrapper' },
_react2["default"].createElement(_search2["default"], { prefixCls: prefixCls + '-search',
onChange: this.handleFilter,
handleClear: this.handleClear,
placeholder: searchPlaceholder || '请输入搜索内容',
value: filter
})
) : null,
_react2["default"].createElement(
_rcAnimate2["default"],
{ component: 'ul',
transitionName: this.state.mounted ? prefixCls + '-highlight' : '',
transitionLeave: false
},
showItems.length > 0 ? showItems : _react2["default"].createElement(
'div',
{ className: prefixCls + '-body-not-found' },
notFoundContent || '列表为空'
)
)
),
footerDom ? _react2["default"].createElement(
'div',
{ className: prefixCls + '-footer' },
footerDom
) : null
);
};
return TransferList;
}(_react2["default"].Component), _class.defaultProps = {
dataSource: [],
titleText: '',
showSearch: false,
handleClear: noop,
handleFilter: noop,
handleSelect: noop,
handleSelectAll: noop,
render: noop,
// advanced
body: noop,
footer: noop
}, _class.propTypes = {
prefixCls: _react.PropTypes.string,
dataSource: _react.PropTypes.array,
showSearch: _react.PropTypes.bool,
filterOption: _react.PropTypes.func,
searchPlaceholder: _react.PropTypes.string,
titleText: _react.PropTypes.string,
style: _react.PropTypes.object,
handleClear: _react.PropTypes.func,
handleFilter: _react.PropTypes.func,
handleSelect: _react.PropTypes.func,
handleSelectAll: _react.PropTypes.func,
render: _react.PropTypes.func,
body: _react.PropTypes.func,
footer: _react.PropTypes.func
}, _class.contextTypes = {
antLocale: _react2["default"].PropTypes.object
}, _temp);
exports["default"] = TransferList;
;