fastlion-amis
Version:
一种MIS页面生成工具
236 lines (235 loc) • 14.8 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.TransferRender = exports.BaseTransferRenderer = void 0;
var tslib_1 = require("tslib");
var Options_1 = require("./Options");
var react_1 = (0, tslib_1.__importDefault)(require("react"));
var Transfer_1 = (0, tslib_1.__importDefault)(require("../../components/Transfer"));
var helper_1 = require("../../utils/helper");
var Spinner_1 = (0, tslib_1.__importDefault)(require("../../components/Spinner"));
var find_1 = (0, tslib_1.__importDefault)(require("lodash/find"));
var Select_1 = require("../../components/Select");
var tpl_builtin_1 = require("../../utils/tpl-builtin");
var Selection_1 = require("../../components/Selection");
var ResultList_1 = require("../../components/ResultList");
var BaseTransferRenderer = /** @class */ (function (_super) {
(0, tslib_1.__extends)(BaseTransferRenderer, _super);
function BaseTransferRenderer() {
return _super !== null && _super.apply(this, arguments) || this;
}
BaseTransferRenderer.prototype.handleChange = function (value, optionModified) {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var _a, onChange, joinValues, delimiter, valueField, extractValue, options, dispatchEvent, setOptions, newValue, newOptions, rendererEvent;
return (0, tslib_1.__generator)(this, function (_b) {
switch (_b.label) {
case 0:
_a = this.props, onChange = _a.onChange, joinValues = _a.joinValues, delimiter = _a.delimiter, valueField = _a.valueField, extractValue = _a.extractValue, options = _a.options, dispatchEvent = _a.dispatchEvent, setOptions = _a.setOptions;
newValue = value;
newOptions = options.concat();
if (Array.isArray(value)) {
newValue = value.map(function (item) {
var indexes = (0, helper_1.findTreeIndex)(options, (0, Select_1.optionValueCompare)(item[valueField || 'value'], valueField || 'value'));
if (!indexes) {
newOptions.push(item);
}
else if (optionModified) {
var origin = (0, helper_1.getTree)(newOptions, indexes);
newOptions = (0, helper_1.spliceTree)(newOptions, indexes, 1, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, origin), item));
}
return joinValues || extractValue
? item[valueField || 'value']
: item;
});
if (joinValues) {
newValue = newValue.join(delimiter || ',');
}
}
else if (value) {
newValue =
joinValues || extractValue
? value[valueField || 'value']
: value;
}
(newOptions.length > options.length || optionModified) &&
setOptions(newOptions, true);
return [4 /*yield*/, dispatchEvent('change', {
value: newValue,
options: options
})];
case 1:
rendererEvent = _b.sent();
if (rendererEvent === null || rendererEvent === void 0 ? void 0 : rendererEvent.prevented) {
return [2 /*return*/];
}
onChange(newValue);
return [2 /*return*/];
}
});
});
};
BaseTransferRenderer.prototype.option2value = function (option) {
return option;
};
BaseTransferRenderer.prototype.handleSearch = function (term, cancelExecutor) {
var _a;
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var _b, searchApi, options, labelField, valueField, env, data, columns, payload, result, e_1, regexp_1, fieldNames_1;
return (0, tslib_1.__generator)(this, function (_c) {
switch (_c.label) {
case 0:
_b = this.props, searchApi = _b.searchApi, options = _b.options, labelField = _b.labelField, valueField = _b.valueField, env = _b.env, data = _b.data, columns = _b.columns;
if (!searchApi) return [3 /*break*/, 5];
_c.label = 1;
case 1:
_c.trys.push([1, 3, , 4]);
return [4 /*yield*/, env.fetcher(searchApi, (0, helper_1.createObject)(data, { term: term }), {
cancelExecutor: cancelExecutor
})];
case 2:
payload = _c.sent();
if (!payload.ok) {
throw new Error(payload.msg || '搜索请求异常');
}
result = payload.data.options || payload.data.items || payload.data;
if (!Array.isArray(result)) {
throw new Error('CRUD.invalidArray');
}
return [2 /*return*/, result.map(function (item) {
var resolved = null;
var value = item[valueField || 'value'];
// 只有 value 值有意义的时候,再去找;否则直接返回
if (Array.isArray(options) && value !== null && value !== undefined) {
resolved = (0, find_1.default)(options, (0, Select_1.optionValueCompare)(value, valueField));
}
return resolved || item;
})];
case 3:
e_1 = _c.sent();
if (!env.isCancel(e_1)) {
env.notify('error', e_1.message);
}
return [2 /*return*/, []];
case 4: return [3 /*break*/, 6];
case 5:
if (term) {
regexp_1 = term.split(',');
fieldNames_1 = (_a = columns === null || columns === void 0 ? void 0 : columns.map(function (column) { return column.name; })) !== null && _a !== void 0 ? _a : [];
if (term.trim() == '') {
return [2 /*return*/, options];
}
return [2 /*return*/, (0, helper_1.filterTree)(options, function (option) {
return !!((Array.isArray(option.children) && option.children.length) ||
(option[valueField || 'value'] &&
(regexp_1.some(function (item) { return !!item && (option[labelField || 'label'] + '').includes(item); }) ||
regexp_1.some(function (item) { return !!item && (option[valueField || 'value'] + '').includes(item); }))) ||
fieldNames_1.some(function (field) { return regexp_1.some(function (item) { return !!item && (option[field] + '').includes(item); }); }));
}, 0, true)];
}
else {
return [2 /*return*/, options];
}
_c.label = 6;
case 6: return [2 /*return*/];
}
});
});
};
BaseTransferRenderer.prototype.optionItemRender = function (option, states) {
var _a = this.props, menuTpl = _a.menuTpl, render = _a.render, data = _a.data;
if (menuTpl) {
return render("item/" + states.index, menuTpl, {
data: (0, helper_1.createObject)((0, helper_1.createObject)(data, states), option)
});
}
return Selection_1.BaseSelection.itemRender(option, states);
};
BaseTransferRenderer.prototype.resultItemRender = function (option, states) {
var _a = this.props, valueTpl = _a.valueTpl, render = _a.render, data = _a.data;
if (valueTpl) {
return render("value/" + states.index, valueTpl, {
onChange: states.onChange,
data: (0, helper_1.createObject)((0, helper_1.createObject)(data, states), option)
});
}
return ResultList_1.ResultList.itemRender(option);
};
BaseTransferRenderer.prototype.renderCell = function (column, option, colIndex, rowIndex) {
var _a = this.props, render = _a.render, data = _a.data;
return render("cell/" + colIndex + "/" + rowIndex, (0, tslib_1.__assign)({ type: 'text' }, column), {
value: (0, tpl_builtin_1.resolveVariable)(column.name, option),
data: (0, helper_1.createObject)(data, option)
});
};
BaseTransferRenderer.prototype.render = function () {
var _a;
var _b = this.props, className = _b.className, cx = _b.classnames, selectedOptions = _b.selectedOptions, showArrow = _b.showArrow, sortable = _b.sortable, selectMode = _b.selectMode, columns = _b.columns, loading = _b.loading, searchable = _b.searchable, searchResultMode = _b.searchResultMode, searchResultColumns = _b.searchResultColumns, deferLoad = _b.deferLoad, leftMode = _b.leftMode, rightMode = _b.rightMode, disabled = _b.disabled, selectTitle = _b.selectTitle, resultTitle = _b.resultTitle, menuTpl = _b.menuTpl, resultItemRender = _b.resultItemRender;
// 目前 LeftOptions 没有接口可以动态加载
// 为了方便可以快速实现动态化,让选项的第一个成员携带
// LeftOptions 信息
var _c = this.props, options = _c.options, leftOptions = _c.leftOptions, leftDefaultValue = _c.leftDefaultValue;
if (selectMode === 'associated' &&
options &&
options.length &&
options[0].leftOptions &&
Array.isArray(options[0].children)) {
leftOptions = options[0].leftOptions;
leftDefaultValue = (_a = options[0].leftDefaultValue) !== null && _a !== void 0 ? _a : leftDefaultValue;
options = options[0].children;
}
return (react_1.default.createElement("div", { className: cx('TransferControl', className) },
react_1.default.createElement(Transfer_1.default, { value: selectedOptions, options: options, disabled: disabled, onChange: this.handleChange, option2value: this.option2value, sortable: sortable, showArrow: showArrow, selectMode: selectMode, searchResultMode: searchResultMode, searchResultColumns: searchResultColumns, columns: columns, onSearch: searchable ? this.handleSearch : undefined, onDeferLoad: deferLoad, leftOptions: leftOptions, leftMode: leftMode, rightMode: rightMode, cellRender: this.renderCell, selectTitle: selectTitle, resultTitle: resultTitle, optionItemRender: this.optionItemRender, resultItemRender: this.resultItemRender }),
react_1.default.createElement(Spinner_1.default, { overlay: true, key: "info", show: loading })));
};
var _a, _b, _c, _d;
(0, tslib_1.__decorate)([
helper_1.autobind,
(0, tslib_1.__metadata)("design:type", Function),
(0, tslib_1.__metadata)("design:paramtypes", [Object, Boolean]),
(0, tslib_1.__metadata)("design:returntype", Promise)
], BaseTransferRenderer.prototype, "handleChange", null);
(0, tslib_1.__decorate)([
helper_1.autobind,
(0, tslib_1.__metadata)("design:type", Function),
(0, tslib_1.__metadata)("design:paramtypes", [Object]),
(0, tslib_1.__metadata)("design:returntype", void 0)
], BaseTransferRenderer.prototype, "option2value", null);
(0, tslib_1.__decorate)([
helper_1.autobind,
(0, tslib_1.__metadata)("design:type", Function),
(0, tslib_1.__metadata)("design:paramtypes", [String, typeof (_b = typeof Function !== "undefined" && Function) === "function" ? _b : Object]),
(0, tslib_1.__metadata)("design:returntype", Promise)
], BaseTransferRenderer.prototype, "handleSearch", null);
(0, tslib_1.__decorate)([
helper_1.autobind,
(0, tslib_1.__metadata)("design:type", Function),
(0, tslib_1.__metadata)("design:paramtypes", [Object, typeof (_c = typeof Selection_1.ItemRenderStates !== "undefined" && Selection_1.ItemRenderStates) === "function" ? _c : Object]),
(0, tslib_1.__metadata)("design:returntype", void 0)
], BaseTransferRenderer.prototype, "optionItemRender", null);
(0, tslib_1.__decorate)([
helper_1.autobind,
(0, tslib_1.__metadata)("design:type", Function),
(0, tslib_1.__metadata)("design:paramtypes", [Object, typeof (_d = typeof ResultList_1.ItemRenderStates !== "undefined" && ResultList_1.ItemRenderStates) === "function" ? _d : Object]),
(0, tslib_1.__metadata)("design:returntype", void 0)
], BaseTransferRenderer.prototype, "resultItemRender", null);
(0, tslib_1.__decorate)([
helper_1.autobind,
(0, tslib_1.__metadata)("design:type", Function),
(0, tslib_1.__metadata)("design:paramtypes", [Object, Object, Number, Number]),
(0, tslib_1.__metadata)("design:returntype", void 0)
], BaseTransferRenderer.prototype, "renderCell", null);
return BaseTransferRenderer;
}(react_1.default.Component));
exports.BaseTransferRenderer = BaseTransferRenderer;
// ts 3.9 里面非得这样才不报错,鬼知道为何。
var TransferRender = /** @class */ (function (_super) {
(0, tslib_1.__extends)(TransferRender, _super);
function TransferRender() {
return _super !== null && _super.apply(this, arguments) || this;
}
return TransferRender;
}(BaseTransferRenderer));
exports.TransferRender = TransferRender;
exports.default = (0, Options_1.OptionsControl)({
type: 'transfer'
})(TransferRender);
//# sourceMappingURL=./renderers/Form/Transfer.js.map
;