choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
375 lines (321 loc) • 13.7 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
var _tslib = require("tslib");
var _react = _interopRequireDefault(require("react"));
var _mobx = require("mobx");
var _mobxReact = require("mobx-react");
var _classnames = _interopRequireDefault(require("classnames"));
var _scrollIntoViewIfNeeded = _interopRequireDefault(require("scroll-into-view-if-needed"));
var _CheckBox = _interopRequireDefault(require("../check-box/CheckBox"));
var _localeContext = require("../locale-context");
var _TextField = _interopRequireDefault(require("../text-field/TextField"));
var _icon = _interopRequireDefault(require("../icon"));
var _Select2 = require("../select/Select");
var _autobind = _interopRequireDefault(require("../_util/autobind"));
var _EventManager = require("../_util/EventManager");
var _ViewComponent = _interopRequireDefault(require("../core/ViewComponent"));
var _CustomArea = _interopRequireDefault(require("./CustomArea"));
var TransferList = /*#__PURE__*/function (_Select) {
(0, _inherits2["default"])(TransferList, _Select);
var _super = (0, _createSuper2["default"])(TransferList);
function TransferList() {
var _this;
(0, _classCallCheck2["default"])(this, TransferList);
_this = _super.apply(this, arguments);
_this.wrapperRef = null;
_this.handleRemove = function (value) {
var onRemove = _this.props.onRemove;
if (onRemove) {
onRemove(value);
}
};
return _this;
}
(0, _createClass2["default"])(TransferList, [{
key: "popup",
get: function get() {
return true;
}
}, {
key: "header",
get: function get() {
var prefixCls = this.prefixCls,
multiple = this.multiple,
header = this.observableProps.header;
if (multiple || header) {
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-header")
}, this.getHeaderSelected(), header && /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-header-title")
}, header));
}
return undefined;
}
}, {
key: "footer",
get: function get() {
var prefixCls = this.prefixCls,
filteredOptions = this.filteredOptions,
footer = this.observableProps.footer;
if (footer) {
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-footer")
}, footer(filteredOptions));
}
return undefined;
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate() {
var currentIndex = this.props.currentIndex; // 在渲染完之后执行
if (this.wrapperRef && typeof currentIndex !== 'undefined') {
var contentDom = this.wrapperRef.getElementsByTagName('ul')[0];
var findSelectedDom = this.wrapperRef.getElementsByTagName('li');
if (contentDom && currentIndex && currentIndex > -1 && currentIndex < this.filteredOptions.length) {
var selectedDom = findSelectedDom[currentIndex];
(0, _scrollIntoViewIfNeeded["default"])(selectedDom, {
block: 'end',
behavior: 'smooth',
scrollMode: 'if-needed',
boundary: contentDom
});
}
this.options.setState('targetFilteredOptions', this.filteredOptions);
}
}
}, {
key: "getOmitPropsKeys",
value: function getOmitPropsKeys() {
return (0, _get2["default"])((0, _getPrototypeOf2["default"])(TransferList.prototype), "getOmitPropsKeys", this).call(this).concat(['autoComplete', 'footer', 'header', 'selected', 'onSelect', 'onSelectAll']);
}
}, {
key: "getOtherProps",
value: function getOtherProps() {
var otherProps = (0, _get2["default"])((0, _getPrototypeOf2["default"])(TransferList.prototype), "getOtherProps", this).call(this);
delete otherProps.ref;
delete otherProps.type;
delete otherProps.onChange;
delete otherProps.onKeyDown;
delete otherProps.currentIndex;
delete otherProps.sortable;
delete otherProps.sortOperations;
delete otherProps.oneWay;
delete otherProps.onRemove;
delete otherProps.targetOption;
delete otherProps.direction;
return otherProps;
}
}, {
key: "getObservableProps",
value: function getObservableProps(props, context) {
return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, (0, _get2["default"])((0, _getPrototypeOf2["default"])(TransferList.prototype), "getObservableProps", this).call(this, props, context)), {}, {
header: props.header,
footer: props.footer
});
}
}, {
key: "getMenuPrefixCls",
value: function getMenuPrefixCls() {
return "".concat(this.prefixCls, "-content");
}
}, {
key: "handleSelectAllChange",
value: function handleSelectAllChange(value) {
var onSelectAll = this.props.onSelectAll;
if (onSelectAll) {
onSelectAll(value ? this.filteredOptions.filter(function (record) {
return !record.get(_Select2.DISABLED_FIELD);
}) : []);
}
}
}, {
key: "handleClear",
value: function handleClear() {
this.setText(undefined);
}
}, {
key: "getHeaderSelected",
value: function getHeaderSelected() {
var length = this.filteredOptions.length,
multiple = this.multiple,
prefixCls = this.prefixCls,
selectedLength = this.props.selected.length;
var selectedText = selectedLength ? "".concat(selectedLength, "/") : '';
var disabledLength = this.filteredOptions.filter(function (record) {
return record.get(_Select2.DISABLED_FIELD);
}).length;
if (multiple) {
return /*#__PURE__*/_react["default"].createElement(_CheckBox["default"], {
disabled: this.disabled,
onChange: this.handleSelectAllChange,
onFocus: _EventManager.stopPropagation,
checked: !!length && disabledLength !== length && (length === selectedLength || length - disabledLength === selectedLength),
indeterminate: !!selectedLength && length - disabledLength !== selectedLength
}, /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-header-selected")
}, "".concat(selectedText).concat(length).concat((0, _localeContext.$l)('Transfer', 'items'))));
}
return /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-header-selected")
}, "".concat(length).concat((0, _localeContext.$l)('Transfer', 'items')));
}
}, {
key: "getSearchField",
value: function getSearchField() {
var prefixCls = this.prefixCls;
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-body-search-wrapper")
}, /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
ref: this.elementReference,
onInput: this.handleChange,
onClear: this.handleClear,
onKeyDown: this.handleKeyDown,
prefix: /*#__PURE__*/_react["default"].createElement(_icon["default"], {
type: "search"
}),
clearButton: true
}));
}
}, {
key: "getMenuItem",
value: function getMenuItem(_ref) {
var _this2 = this;
var record = _ref.record,
text = _ref.text,
value = _ref.value;
var prefixCls = this.prefixCls,
multiple = this.multiple,
options = this.options,
_this$props = this.props,
oneWay = _this$props.oneWay,
optionRenderer = _this$props.optionRenderer;
if (oneWay && !multiple) {
var renderer = /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-item-delete")
}, /*#__PURE__*/_react["default"].createElement("div", null, text), /*#__PURE__*/_react["default"].createElement(_icon["default"], {
type: "delete_black-o",
className: "".concat(prefixCls, "-item-icon"),
onClick: function onClick() {
return _this2.handleRemove(value);
}
}));
return optionRenderer ? optionRenderer({
dataSet: options,
record: record,
text: text,
value: value
}) : renderer;
}
return (0, _get2["default"])((0, _getPrototypeOf2["default"])(TransferList.prototype), "getMenuItem", this).call(this, {
record: record,
text: text,
value: value
});
}
}, {
key: "renderBody",
value: function renderBody() {
var _this3 = this;
var prefixCls = this.prefixCls,
searchable = this.searchable,
textField = this.textField,
valueField = this.valueField,
multiple = this.multiple,
_this$props2 = this.props,
selected = _this$props2.selected,
onSelect = _this$props2.onSelect,
onSelectAll = _this$props2.onSelectAll,
setTargetOption = _this$props2.setTargetOption,
children = _this$props2.children,
targetOption = _this$props2.targetOption,
direction = _this$props2.direction;
var searchField = searchable && this.getSearchField();
var classString = (0, _classnames["default"])("".concat(prefixCls, "-body"), (0, _defineProperty2["default"])({}, "".concat(prefixCls, "-body-with-search"), searchable)); // 自定义渲染
if (typeof children === 'function') {
return /*#__PURE__*/_react["default"].createElement(_CustomArea["default"], {
targetOption: targetOption
}, children({
direction: direction,
targetOption: targetOption,
setTargetOption: setTargetOption,
onItemSelect: onSelectAll
}));
}
var selectedKeys = multiple ? selected.map(function (record) {
return (0, _Select2.getItemKey)(record, record.get(textField), record.get(valueField));
}) : [];
return /*#__PURE__*/_react["default"].createElement("div", {
className: classString
}, searchField, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-content-wrapper"),
ref: function ref(dom) {
_this3.wrapperRef = dom;
},
onFocus: searchable ? _EventManager.stopPropagation : undefined
}, this.getMenu({
selectedKeys: selectedKeys,
onClick: onSelect,
focusable: !this.searchable
})));
}
}, {
key: "getClassName",
value: function getClassName() {
var _get$call;
var prefixCls = this.prefixCls,
header = this.header,
footer = this.footer;
return (0, _get2["default"])((0, _getPrototypeOf2["default"])(TransferList.prototype), "getClassName", this).call(this, (_get$call = {}, (0, _defineProperty2["default"])(_get$call, "".concat(prefixCls, "-with-header"), header), (0, _defineProperty2["default"])(_get$call, "".concat(prefixCls, "-with-footer"), footer), _get$call));
}
}, {
key: "removeLastValue",
value: function removeLastValue() {// noop
}
}, {
key: "handleBlur",
value: function handleBlur(e) {
_ViewComponent["default"].prototype.handleBlur.call(this, e);
}
}, {
key: "renderHelpMessage",
value: function renderHelpMessage() {
return null;
}
}, {
key: "renderWrapper",
value: function renderWrapper() {
var header = this.header,
footer = this.footer,
_this$props3 = this.props,
style = _this$props3.style,
children = _this$props3.children;
var isCustom = typeof children === 'function';
return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({}, this.getOtherProps(), {
style: style
}), !isCustom && header, this.renderBody(), !isCustom && footer);
}
}]);
return TransferList;
}(_Select2.Select);
(0, _tslib.__decorate)([_mobx.computed], TransferList.prototype, "header", null);
(0, _tslib.__decorate)([_mobx.computed], TransferList.prototype, "footer", null);
(0, _tslib.__decorate)([_autobind["default"]], TransferList.prototype, "handleSelectAllChange", null);
(0, _tslib.__decorate)([_autobind["default"]], TransferList.prototype, "handleClear", null);
(0, _tslib.__decorate)([_autobind["default"]], TransferList.prototype, "handleBlur", null);
TransferList = (0, _tslib.__decorate)([_mobxReact.observer], TransferList);
var _default = TransferList;
exports["default"] = _default;
//# sourceMappingURL=TransferList.js.map