choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
411 lines (340 loc) • 14.4 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _tslib = require("tslib");
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _mobxReact = require("mobx-react");
var _mobx = require("mobx");
var _classnames = _interopRequireDefault(require("classnames"));
var _Select2 = require("../select/Select");
var _Option = _interopRequireDefault(require("../option/Option"));
var _OptGroup = _interopRequireDefault(require("../option/OptGroup"));
var _TransferList = _interopRequireDefault(require("./TransferList"));
var _TransferOperation = _interopRequireDefault(require("./TransferOperation"));
var _TransferSort = _interopRequireDefault(require("./TransferSort"));
var _autobind = _interopRequireDefault(require("../_util/autobind"));
var _isSameLike = _interopRequireDefault(require("../_util/isSameLike"));
function _createSuper(Derived) {
function isNativeReflectConstruct() {
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
if (Reflect.construct.sham) return false;
if (typeof Proxy === "function") return true;
try {
Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
return true;
} catch (e) {
return false;
}
}
return function () {
var Super = (0, _getPrototypeOf2["default"])(Derived),
result;
if (isNativeReflectConstruct()) {
var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else {
result = Super.apply(this, arguments);
}
return (0, _possibleConstructorReturn2["default"])(this, result);
};
}
var Transfer =
/*#__PURE__*/
function (_Select) {
(0, _inherits2["default"])(Transfer, _Select);
var _super = _createSuper(Transfer);
function Transfer(props, context) {
var _this;
(0, _classCallCheck2["default"])(this, Transfer);
_this = _super.call(this, props, context);
_this.clearCurrentIndex = function () {
var current = _this.options.current;
if (current) {
current.isCurrent = false;
}
};
_this.changeOptionIndex = function () {
var _optionData;
var _assertThisInitialize = (0, _assertThisInitialized2["default"])(_this),
valueField = _assertThisInitialize.valueField,
options = _assertThisInitialize.options;
var targetValues = _this.getValues(); // 这是有顺序的
var optionData = options.data;
var sortOpt = [];
targetValues.forEach(function (key) {
optionData = optionData.filter(function (record) {
if (record.get(valueField) !== key) {
return true;
}
sortOpt.push(record);
return false;
});
});
(_optionData = optionData).unshift.apply(_optionData, sortOpt);
_this.options.data = optionData;
};
_this.handleRemove = function (value) {
_this.removeValues([value]);
_this.updateIndex();
};
(0, _mobx.runInAction)(function () {
_this.sourceSelected = [];
_this.targetSelected = [];
_this.clearCurrentIndex();
});
return _this;
}
(0, _createClass2["default"])(Transfer, [{
key: "sourceFilter",
value: function sourceFilter(record, index, array) {
var valueField = this.valueField,
optionsFilter = this.props.optionsFilter;
if (optionsFilter && !optionsFilter(record, index, array)) {
return false;
}
var values = this.getValues();
if (values.length) {
return values.every(function (v) {
return !(0, _isSameLike["default"])(record.get(valueField), v);
});
}
return true;
}
}, {
key: "targetFilter",
value: function targetFilter(record, index, array) {
var valueField = this.valueField,
optionsFilter = this.props.optionsFilter;
if (optionsFilter && !optionsFilter(record, index, array)) {
return false;
}
var values = this.getValues();
if (values.length) {
return values.some(function (v) {
return (0, _isSameLike["default"])(record.get(valueField), v);
});
}
return false;
}
}, {
key: "handleMenuClick",
value: function handleMenuClick(_ref) {
var value = _ref.item.props.value;
if (this.multiple) {
this.selectRecord(value, this.sourceSelected);
} else {
this.prepareSetValue(this.processRecordToObject(value));
}
}
}, {
key: "handleTargetMenuClick",
value: function handleTargetMenuClick(_ref2) {
var value = _ref2.item.props.value;
if (this.multiple) {
this.selectRecord(value, this.targetSelected);
} else {
this.removeValue(value);
}
this.options.locate(value.index);
}
}, {
key: "handleMoveToLeft",
value: function handleMoveToLeft() {
var valueField = this.valueField;
this.removeValues(this.targetSelected.map(function (record) {
return record.get(valueField);
}));
this.targetSelected = [];
this.updateIndex();
}
}, {
key: "handleMoveToRight",
value: function handleMoveToRight() {
var valueField = this.valueField;
this.prepareSetValue.apply(this, (0, _toConsumableArray2["default"])(this.sourceSelected.map(function (record) {
return record.get(valueField);
})));
this.sourceSelected = [];
this.updateIndex();
}
}, {
key: "handleSortTo",
value: function handleSortTo(direction) {
var _this2 = this;
var valueField = this.valueField;
var to = direction === 'up' ? -1 : 1;
var targetFilteredOptions = this.options.getState('targetFilteredOptions');
var index = targetFilteredOptions.findIndex(function (record) {
var _this2$options$curren;
return record.get(valueField) === ((_this2$options$curren = _this2.options.current) === null || _this2$options$curren === void 0 ? void 0 : _this2$options$curren.get(valueField));
});
var currentOpt = targetFilteredOptions[index];
var moveOpt = targetFilteredOptions[index + to];
var optionsCurrentIndex = this.options.findIndex(function (record) {
return record.get(valueField) === currentOpt.get(valueField);
});
var optionsMoveIndex = this.options.findIndex(function (record) {
return record.get(valueField) === moveOpt.get(valueField);
});
this.options.move(optionsCurrentIndex, optionsMoveIndex);
}
}, {
key: "handleSourceSelectAllChange",
value: function handleSourceSelectAllChange(selected) {
this.sourceSelected = selected;
}
}, {
key: "handleTargetSelectAllChange",
value: function handleTargetSelectAllChange(selected) {
this.targetSelected = selected;
}
}, {
key: "selectRecord",
value: function selectRecord(value, selected) {
var index = selected.indexOf(value);
if (index !== -1) {
selected.splice(index, 1);
} else {
selected.push(value);
}
}
}, {
key: "updateIndex",
value: function updateIndex() {
this.changeOptionIndex();
this.clearCurrentIndex();
}
}, {
key: "renderWrapper",
value: function renderWrapper() {
var _this3 = this;
var disabled = this.disabled,
prefixCls = this.prefixCls,
targetSelected = this.targetSelected,
sourceSelected = this.sourceSelected,
multiple = this.multiple,
valueField = this.valueField,
_this$props = this.props,
_this$props$titles = _this$props.titles,
titles = _this$props$titles === void 0 ? [] : _this$props$titles,
_this$props$operation = _this$props.operations,
operations = _this$props$operation === void 0 ? [] : _this$props$operation,
_this$props$sortOpera = _this$props.sortOperations,
sortOperations = _this$props$sortOpera === void 0 ? [] : _this$props$sortOpera,
sortable = _this$props.sortable,
oneWay = _this$props.oneWay;
var targetValues = this.getValues();
var currentTarget = this.options.current;
var upActive = false;
var downActive = false;
var currentIndex = currentTarget ? targetValues.findIndex(function (x) {
return x === currentTarget.get(valueField);
}) : -1;
var targetFilteredOptions = this.options.getState('targetFilteredOptions');
if (targetFilteredOptions && currentTarget) {
currentIndex = targetFilteredOptions.findIndex(function (record) {
return record.get(valueField) === currentTarget.get(valueField);
});
upActive = currentIndex > -1 && currentIndex !== 0;
downActive = currentIndex > -1 && currentIndex !== targetFilteredOptions.length - 1;
}
var classNameString = (0, _classnames["default"])("".concat(prefixCls, "-wrapper"), (0, _defineProperty2["default"])({}, "".concat(prefixCls, "-sortable"), sortable));
var oneWayProps = {};
if (oneWay) {
oneWayProps = {
multiple: false,
onRemove: this.handleRemove
};
}
return _react["default"].createElement("span", {
key: "wrapper",
className: classNameString
}, _react["default"].createElement(_TransferList["default"], (0, _extends2["default"])({}, this.props, {
options: this.options,
selected: sourceSelected,
header: titles[0],
onSelectAll: this.handleSourceSelectAllChange,
onSelect: this.handleMenuClick,
optionsFilter: this.sourceFilter
})), _react["default"].createElement(_TransferOperation["default"], {
className: "".concat(prefixCls, "-operation"),
leftActive: !(!targetSelected.length || disabled),
rightActive: !(!sourceSelected.length || disabled),
rightArrowText: operations[0],
leftArrowText: operations[1],
moveToLeft: this.handleMoveToLeft,
moveToRight: this.handleMoveToRight,
multiple: multiple,
oneWay: oneWay
}), _react["default"].createElement(_TransferList["default"], (0, _extends2["default"])({}, this.props, {
options: this.options,
selected: targetSelected,
header: titles[1],
currentIndex: currentIndex,
onSelectAll: this.handleTargetSelectAllChange,
onSelect: this.handleTargetMenuClick,
optionsFilter: this.targetFilter
}, oneWayProps)), sortable && _react["default"].createElement(_TransferSort["default"], {
className: "".concat(prefixCls, "-sort"),
upActive: upActive,
downActive: downActive,
upArrowText: sortOperations[0],
downArrowText: sortOperations[1],
moveToUp: function moveToUp() {
return _this3.handleSortTo('up');
},
moveToDown: function moveToDown() {
return _this3.handleSortTo('down');
},
multiple: multiple
}));
}
}]);
return Transfer;
}(_Select2.Select);
Transfer.displayName = 'Transfer';
Transfer.propTypes = (0, _objectSpread2["default"])({}, _Select2.Select.propTypes, {
titles: _propTypes["default"].arrayOf(_propTypes["default"].node),
sortable: _propTypes["default"].bool
});
Transfer.defaultProps = (0, _objectSpread2["default"])({}, _Select2.Select.defaultProps, {
suffixCls: 'transfer',
multiple: true,
sortable: false,
oneWay: false
});
Transfer.Option = _Option["default"];
Transfer.OptGroup = _OptGroup["default"];
(0, _tslib.__decorate)([_mobx.observable], Transfer.prototype, "sourceSelected", void 0);
(0, _tslib.__decorate)([_mobx.observable], Transfer.prototype, "targetSelected", void 0);
(0, _tslib.__decorate)([_mobx.observable], Transfer.prototype, "targetCurrentSelected", void 0);
(0, _tslib.__decorate)([_autobind["default"]], Transfer.prototype, "sourceFilter", null);
(0, _tslib.__decorate)([_autobind["default"]], Transfer.prototype, "targetFilter", null);
(0, _tslib.__decorate)([_autobind["default"]], Transfer.prototype, "handleMenuClick", null);
(0, _tslib.__decorate)([_autobind["default"]], Transfer.prototype, "handleTargetMenuClick", null);
(0, _tslib.__decorate)([_autobind["default"], _mobx.action], Transfer.prototype, "handleMoveToLeft", null);
(0, _tslib.__decorate)([_autobind["default"], _mobx.action], Transfer.prototype, "handleMoveToRight", null);
(0, _tslib.__decorate)([_autobind["default"], _mobx.action], Transfer.prototype, "handleSortTo", null);
(0, _tslib.__decorate)([_autobind["default"], _mobx.action], Transfer.prototype, "handleSourceSelectAllChange", null);
(0, _tslib.__decorate)([_autobind["default"], _mobx.action], Transfer.prototype, "handleTargetSelectAllChange", null);
(0, _tslib.__decorate)([_mobx.action], Transfer.prototype, "selectRecord", null);
(0, _tslib.__decorate)([_mobx.action], Transfer.prototype, "clearCurrentIndex", void 0);
(0, _tslib.__decorate)([_mobx.action], Transfer.prototype, "updateIndex", null);
Transfer = (0, _tslib.__decorate)([_mobxReact.observer], Transfer);
var _default = Transfer;
exports["default"] = _default;
//# sourceMappingURL=Transfer.js.map