fastlion-amis
Version:
一种MIS页面生成工具
201 lines (200 loc) • 10.2 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.TreeSelection = void 0;
var tslib_1 = require("tslib");
var Selection_1 = require("./Selection");
var theme_1 = require("../theme");
var react_1 = (0, tslib_1.__importDefault)(require("react"));
var uncontrollable_1 = require("uncontrollable");
var Checkbox_1 = (0, tslib_1.__importDefault)(require("./Checkbox"));
var helper_1 = require("../utils/helper");
var Spinner_1 = (0, tslib_1.__importDefault)(require("./Spinner"));
var locale_1 = require("../locale");
var icons_1 = require("./icons");
var icons_2 = require("@ant-design/icons");
var TreeSelection = /** @class */ (function (_super) {
(0, tslib_1.__extends)(TreeSelection, _super);
function TreeSelection() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.state = {
expanded: []
};
return _this;
}
TreeSelection.prototype.componentDidMount = function () {
this.syncExpanded();
};
TreeSelection.prototype.componentDidUpdate = function (prevProps) {
var props = this.props;
if (!this.state.expanded.length &&
(props.expand !== prevProps.expand || props.options !== prevProps.options)) {
this.syncExpanded();
}
};
TreeSelection.prototype.syncExpanded = function () {
var options = this.props.options;
var mode = this.props.expand;
var expanded = [];
if (!Array.isArray(options)) {
return;
}
if (mode === 'first' || mode === 'root') {
options.every(function (option, index) {
if (Array.isArray(option.children)) {
expanded.push("" + index);
return mode === 'root';
}
return true;
});
}
else if (mode === 'all') {
(0, helper_1.everyTree)(options, function (option, index, level, paths, indexes) {
if (Array.isArray(option.children)) {
expanded.push("" + indexes.concat(index).join('-'));
}
return true;
});
}
this.setState({ expanded: expanded });
};
TreeSelection.prototype.toggleOption = function (option) {
var _a = this.props, value = _a.value, onChange = _a.onChange, option2value = _a.option2value, options = _a.options, onDeferLoad = _a.onDeferLoad, disabled = _a.disabled, multiple = _a.multiple, clearable = _a.clearable;
if (disabled || option.disabled || (!option.value && !multiple)) {
return;
}
else if (option.defer && !option.loaded) {
onDeferLoad === null || onDeferLoad === void 0 ? void 0 : onDeferLoad(option);
return;
}
var valueArray = Selection_1.BaseSelection.value2array(value, options, option2value);
if (option.value === void 0 &&
Array.isArray(option.children) &&
option.children.length &&
multiple) {
var someCheckedFn_1 = function (child) {
return (Array.isArray(child.children) && child.children.length
? child.children.some(someCheckedFn_1)
: false) ||
(child.value !== void 0 && ~valueArray.indexOf(child));
};
var someChecked_1 = option.children.some(someCheckedFn_1);
var eachFn_1 = function (child) {
if (Array.isArray(child.children) && child.children.length) {
child.children.forEach(eachFn_1);
}
if (child.value !== void 0) {
var idx = valueArray.indexOf(child);
~idx && valueArray.splice(idx, 1);
if (!someChecked_1) {
valueArray.push(child);
}
}
};
option.children.forEach(eachFn_1);
}
else {
var idx = valueArray.indexOf(option);
if (~idx && (multiple || clearable)) {
valueArray.splice(idx, 1);
}
else if (multiple) {
valueArray.push(option);
}
else {
valueArray = [option];
}
}
var newValue = option2value
? valueArray.map(function (item) { return option2value(item); })
: valueArray;
onChange && onChange(multiple ? newValue : newValue[0]);
};
TreeSelection.prototype.toggleCollapsed = function (option, index) {
var onDeferLoad = this.props.onDeferLoad;
var expanded = this.state.expanded.concat();
var idx = expanded.indexOf(index);
if (~idx) {
expanded.splice(idx, 1);
}
else {
expanded.push(index);
}
this.setState({
expanded: expanded
}, option.defer && onDeferLoad ? function () { return onDeferLoad(option); } : undefined);
};
TreeSelection.prototype.renderItem = function (option, index, indexes) {
var _this = this;
if (indexes === void 0) { indexes = []; }
var _a = this.props, labelClassName = _a.labelClassName, disabled = _a.disabled, cx = _a.classnames, itemClassName = _a.itemClassName, itemRender = _a.itemRender, multiple = _a.multiple;
var id = indexes.join('-');
var valueArray = this.valueArray;
var partial = false;
var checked = false;
var hasChildren = Array.isArray(option.children) && option.children.length;
if (option.value === void 0 && hasChildren) {
var allchecked_1 = true;
var partialChecked_1 = false;
var eachFn_2 = function (child) {
if (Array.isArray(child.children) && child.children.length) {
child.children.forEach(eachFn_2);
}
if (child.value !== void 0) {
var isIn = !!~valueArray.indexOf(child);
if (isIn && !partialChecked_1) {
partialChecked_1 = true;
}
else if (!isIn && allchecked_1) {
allchecked_1 = false;
}
checked = partialChecked_1;
partial = partialChecked_1 && !allchecked_1;
}
};
option.children.forEach(eachFn_2);
}
else {
checked = !!~valueArray.indexOf(option);
}
var expaned = !!~this.state.expanded.indexOf(id);
return (react_1.default.createElement("div", { key: index, className: cx('TreeSelection-item', disabled || option.disabled || (option.defer && option.loading)
? 'is-disabled'
: '', expaned ? 'is-expanded' : '') },
react_1.default.createElement("div", { className: cx('TreeSelection-itemInner', itemClassName, option.className, checked ? 'is-active' : ''), onClick: function () { return _this.toggleOption(option); } },
hasChildren || option.defer ? (react_1.default.createElement("a", { onClick: function (e) {
e.stopPropagation();
_this.toggleCollapsed(option, id);
}, className: cx('Table-expandBtn', expaned ? 'is-active' : '') },
react_1.default.createElement(icons_1.Icon, { icon: "right-arrow-bold", className: "icon" }))) : null,
react_1.default.createElement("div", { className: cx('TreeSelection-itemLabel') }, itemRender(option, {
index: index,
multiple: multiple,
checked: checked,
onChange: function () { return _this.toggleOption(option); },
disabled: disabled || option.disabled
})),
option.defer && option.loading ? react_1.default.createElement(Spinner_1.default, { show: true, size: "sm" }) : null,
multiple && (!option.defer || option.loaded) ? (react_1.default.createElement(Checkbox_1.default, { size: "sm", checked: checked, partial: partial, disabled: disabled || option.disabled, labelClassName: labelClassName, description: option.description })) : null,
!multiple && !!~valueArray.indexOf(option) && react_1.default.createElement(icons_2.CheckOutlined, { style: { color: '#3574ee' } })),
hasChildren ? (react_1.default.createElement("div", { className: cx('TreeSelection-sublist') }, option.children.map(function (option, key) {
return _this.renderItem(option, key, indexes.concat(key));
}))) : null));
};
TreeSelection.prototype.render = function () {
var _this = this;
var _a = this.props, value = _a.value, options = _a.options, className = _a.className, placeholder = _a.placeholder, cx = _a.classnames, option2value = _a.option2value, __ = _a.translate;
this.valueArray = Selection_1.BaseSelection.value2array(value, options, option2value);
var body = [];
if (Array.isArray(options) && options.length) {
body = options.map(function (option, key) { return _this.renderItem(option, key, [key]); });
}
return (react_1.default.createElement("div", { className: cx('TreeSelection', className) }, body && body.length ? (body) : (react_1.default.createElement("div", { className: cx('TreeSelection-placeholder') }, __(placeholder)))));
};
TreeSelection.defaultProps = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, Selection_1.BaseSelection.defaultProps), { expand: 'none' });
return TreeSelection;
}(Selection_1.BaseSelection));
exports.TreeSelection = TreeSelection;
exports.default = (0, theme_1.themeable)((0, locale_1.localeable)((0, uncontrollable_1.uncontrollable)(TreeSelection, {
value: 'onChange'
})));
//# sourceMappingURL=./components/TreeSelection.js.map
;