UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

154 lines (153 loc) 7.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ChainedSelectControlRenderer = void 0; var tslib_1 = require("tslib"); var react_1 = (0, tslib_1.__importDefault)(require("react")); var classnames_1 = (0, tslib_1.__importDefault)(require("classnames")); var Options_1 = require("./Options"); var Select_1 = (0, tslib_1.__importDefault)(require("../../components/Select")); var api_1 = require("../../utils/api"); var ChainedSelectControl = /** @class */ (function (_super) { (0, tslib_1.__extends)(ChainedSelectControl, _super); function ChainedSelectControl(props) { var _this = _super.call(this, props) || this; _this.state = { stack: [] }; _this.handleChange = _this.handleChange.bind(_this); _this.loadMore = _this.loadMore.bind(_this); return _this; } ChainedSelectControl.prototype.componentDidMount = function () { var _a, _b; var formInited = this.props.formInited; formInited || !this.props.addHook ? this.loadMore() : (_b = (_a = this.props).addHook) === null || _b === void 0 ? void 0 : _b.call(_a, this.loadMore, 'init'); }; ChainedSelectControl.prototype.componentDidUpdate = function (prevProps) { var props = this.props; if (prevProps.options !== props.options) { this.setState({ stack: [] }); } else if (props.formInited && props.value !== prevProps.value) { this.loadMore(); } }; ChainedSelectControl.prototype.loadMore = function () { var _this = this; var _a = this.props, value = _a.value, delimiter = _a.delimiter, onChange = _a.onChange, joinValues = _a.joinValues, extractValue = _a.extractValue, source = _a.source, data = _a.data, env = _a.env; var arr = Array.isArray(value) ? value.concat() : value && typeof value === 'string' ? value.split(delimiter || ',') : []; var idx = 0; var len = this.state.stack.length; while (idx < len && arr[idx] && this.state.stack[idx].parentId == (joinValues || extractValue ? arr[idx] : arr[idx].value)) { idx++; } if (!arr[idx] || !env || !(0, api_1.isEffectiveApi)(source, data)) { return; } var parentId = joinValues || extractValue ? arr[idx] : arr[idx].value; var stack = this.state.stack.concat(); stack.splice(idx, stack.length - idx); stack.push({ parentId: parentId, loading: true, options: [] }); this.setState({ stack: stack }, function () { env .fetcher(source, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, data), { value: arr, level: idx + 1, parentId: parentId, parent: arr[idx] })) .then(function (ret) { // todo 没有检测 response.ok var stack = _this.state.stack.concat(); var remoteValue = ret.data ? ret.data.value : undefined; var options = (ret.data && ret.data.options) || ret.data; stack.splice(idx, stack.length - idx); if (typeof remoteValue !== 'undefined') { arr.splice(idx + 1, value.length - idx - 1); arr.push(remoteValue); onChange(joinValues ? arr.join(delimiter || ',') : arr); } stack.push({ options: options, parentId: parentId, loading: false, visible: !!options }); _this.setState({ stack: stack }, _this.loadMore); }) .catch(function (e) { env.notify('error', e.message); }); }); }; ChainedSelectControl.prototype.handleChange = function (index, currentValue) { var _a = this.props, value = _a.value, delimiter = _a.delimiter, onChange = _a.onChange, joinValues = _a.joinValues, extractValue = _a.extractValue; var arr = Array.isArray(value) ? value.concat() : value && typeof value === 'string' ? value.split(delimiter || ',') : []; arr.splice(index, arr.length - index); arr.push(joinValues ? currentValue.value : currentValue); onChange(joinValues ? arr.join(delimiter || ',') : extractValue ? arr.map(function (item) { return item.value || item; }) : arr); }; ChainedSelectControl.prototype.reload = function () { var reload = this.props.reloadOptions; reload && reload(); }; ChainedSelectControl.prototype.render = function () { var _this = this; var _a = this.props, options = _a.options, ns = _a.classPrefix, className = _a.className, inline = _a.inline, loading = _a.loading, value = _a.value, delimiter = _a.delimiter, joinValues = _a.joinValues, extractValue = _a.extractValue, multiple = _a.multiple, rest = (0, tslib_1.__rest)(_a, ["options", "classPrefix", "className", "inline", "loading", "value", "delimiter", "joinValues", "extractValue", "multiple"]); var arr = Array.isArray(value) ? value.concat() : value && typeof value === 'string' ? value.split(delimiter || ',') : []; return (react_1.default.createElement("div", { className: (0, classnames_1.default)(ns + "ChainedSelectControl", className) }, react_1.default.createElement(Select_1.default, (0, tslib_1.__assign)({}, rest, { classPrefix: ns, key: "base", options: options, value: arr[0], onChange: this.handleChange.bind(this, 0), loading: loading, inline: true })), this.state.stack.map(function (_a, index) { var options = _a.options, loading = _a.loading, visible = _a.visible; return visible === false ? null : (react_1.default.createElement(Select_1.default, (0, tslib_1.__assign)({}, rest, { classPrefix: ns, key: "x-" + (index + 1), options: options, value: arr[index + 1], onChange: _this.handleChange.bind(_this, index + 1), loading: loading, inline: true }))); }))); }; ChainedSelectControl.defaultProps = { clearable: false, searchable: false, multiple: true }; return ChainedSelectControl; }(react_1.default.Component)); exports.default = ChainedSelectControl; var ChainedSelectControlRenderer = /** @class */ (function (_super) { (0, tslib_1.__extends)(ChainedSelectControlRenderer, _super); function ChainedSelectControlRenderer() { return _super !== null && _super.apply(this, arguments) || this; } ChainedSelectControlRenderer = (0, tslib_1.__decorate)([ (0, Options_1.OptionsControl)({ type: 'chained-select', sizeMutable: false }) ], ChainedSelectControlRenderer); return ChainedSelectControlRenderer; }(ChainedSelectControl)); exports.ChainedSelectControlRenderer = ChainedSelectControlRenderer; //# sourceMappingURL=./renderers/Form/ChainedSelect.js.map