fastlion-amis
Version:
一种MIS页面生成工具
460 lines (459 loc) • 20 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var factory_1 = require("./factory");
var Checkbox_1 = require("./renderers/Form/Checkbox");
var index_1 = require("./renderers/Form/index");
var FieldSet_1 = require("./renderers/Form/FieldSet");
var Card_1 = require("./renderers/Card");
var List_1 = require("./renderers/List");
var ButtonGroupSelect_1 = require("./renderers/Form/ButtonGroupSelect");
var helper_1 = require("./utils/helper");
var InputFile_1 = require("./renderers/Form/InputFile");
var InputImage_1 = require("./renderers/Form/InputImage");
var InputRichText_1 = require("./renderers/Form/InputRichText");
var Grid_1 = require("./renderers/Grid");
var HBox_1 = require("./renderers/HBox");
// 兼容老的用法,老用法 label 用在 checkbox 的右侧内容,新用法用 option 来代替。
(0, factory_1.addSchemaFilter)(function CheckboxPropsFilter(schema, renderer) {
if (renderer.component !== Checkbox_1.CheckboxControlRenderer) {
return schema;
}
if (schema.label && typeof schema.option === 'undefined') {
schema = (0, tslib_1.__assign)({}, schema);
schema.option = schema.label;
delete schema.label;
}
return schema;
});
function convertFieldSetTabs2Controls(schema) {
var toUpdate = {};
var flag = false;
toUpdate.controls = Array.isArray(schema.controls)
? schema.controls.concat()
: [];
toUpdate.controls = toUpdate.controls.map(function (control) {
if (Array.isArray(control)) {
var converted = convertFieldSetTabs2Controls({
type: 'group',
controls: control
});
if (converted !== control) {
flag = true;
}
return converted;
}
return control;
});
schema.fieldSet &&
(Array.isArray(schema.fieldSet)
? schema.fieldSet
: [schema.fieldSet]).forEach(function (fieldSet) {
flag = true;
toUpdate.controls.push((0, tslib_1.__assign)((0, tslib_1.__assign)({}, convertFieldSetTabs2Controls(fieldSet)), { type: 'fieldSet', collapsable: schema.collapsable }));
});
schema.tabs &&
(flag = true) &&
toUpdate.controls.push({
type: 'tabs',
tabs: schema.tabs.map(function (tab) { return convertFieldSetTabs2Controls(tab); })
});
if (flag) {
schema = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, schema), toUpdate);
delete schema.fieldSet;
delete schema.tabs;
}
return schema;
}
// Form 中,把 fieldSet 和 tabs 转成 {type: 'fieldSet', controls: []}
// 同时把数组用法转成 {type: 'group', controls: []}
(0, factory_1.addSchemaFilter)(function FormPropsFilter(schema, renderer) {
if (renderer.component !== index_1.FormRenderer) {
return schema;
}
if (schema.fieldSet || schema.tabs) {
// console.warn('Form 下面直接用 fieldSet 或者 tabs 将不支持,请改成在 controls 数组中添加。');
schema = convertFieldSetTabs2Controls(schema);
}
else if (Array.isArray(schema.controls)) {
var flag_1 = false;
var converted = schema.controls.map(function (control) {
if (Array.isArray(control)) {
var converted_1 = convertFieldSetTabs2Controls({
type: 'group',
controls: control
});
if (converted_1 !== control) {
flag_1 = true;
}
return converted_1;
}
return control;
});
if (flag_1) {
schema = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, schema), { controls: converted });
}
}
return schema;
});
// FieldSet 中把 controls 里面的数组用法转成 {type: 'group', controls: []}
(0, factory_1.addSchemaFilter)(function FormPropsFilter(schema, renderer) {
if (renderer.component !== FieldSet_1.FieldSetRenderer) {
return schema;
}
if (Array.isArray(schema.controls)) {
var flag_2 = false;
var converted = schema.controls.map(function (control) {
if (Array.isArray(control)) {
var converted_2 = convertFieldSetTabs2Controls({
type: 'group',
controls: control
});
if (converted_2 !== control) {
flag_2 = true;
}
return converted_2;
}
return control;
});
if (flag_2) {
schema = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, schema), { controls: converted });
}
}
return schema;
});
// Form 里面的 Tabs 中把 controls 里面的数组用法转成 {type: 'group', controls: []}
function convertArray2Hbox(arr) {
var flag = false;
var converted = arr.map(function (item) {
if (Array.isArray(item)) {
flag = true;
return convertArray2Hbox(item);
}
return item;
});
if (!flag) {
converted = arr;
}
return {
type: 'hbox',
columns: converted
};
}
// CRUD/List 和 CRUD/Card 的 body 中的数组用法转成 hbox
(0, factory_1.addSchemaFilter)(function (schema, renderer) {
if (renderer.component !== Card_1.CardRenderer &&
renderer.component !== List_1.ListItemRenderer) {
return schema;
}
if (Array.isArray(schema.body)) {
var flag_3 = false;
var converted = schema.body.map(function (item) {
if (Array.isArray(item)) {
flag_3 = true;
return convertArray2Hbox(item);
}
return item;
});
if (flag_3) {
schema = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, schema), { body: converted });
}
}
return schema;
});
// button group 的 btnClassName 和 btnActiveClassName 改成 btnLevel 和 btnActiveLevel 了
(0, factory_1.addSchemaFilter)(function (scheam, renderer) {
if (renderer.component !== ButtonGroupSelect_1.ButtonGroupControlRenderer) {
return scheam;
}
if (scheam.btnClassName || scheam.btnActiveClassName) {
scheam = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, scheam), { btnLevel: (0, helper_1.getLevelFromClassName)(scheam.btnClassName), btnActiveLevel: (0, helper_1.getLevelFromClassName)(scheam.btnActiveClassName) });
delete scheam.btnClassName;
delete scheam.btnActiveClassName;
}
return scheam;
});
// FieldSet className 定制样式方式改成 size 来配置
(0, factory_1.addSchemaFilter)(function (scheam, renderer) {
if (renderer.component !== FieldSet_1.FieldSetRenderer) {
return scheam;
}
if (scheam.className &&
!scheam.size &&
/\bfieldset(?:\-(xs|sm|md|lg))?\b/.test(scheam.className)) {
scheam = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, scheam), { size: RegExp.$1 || 'base', className: scheam.className.replace(/\bfieldset(?:\-(xs|sm|md|lg))?\b/, '') });
delete scheam.btnClassName;
delete scheam.btnActiveClassName;
}
return scheam;
});
// 原 reciever 错别字改为 receiver
(0, factory_1.addSchemaFilter)(function (scheam, renderer) {
if (renderer.component !== InputFile_1.FileControlRenderer &&
renderer.component !== InputImage_1.ImageControlRenderer &&
renderer.component !== InputRichText_1.RichTextControlRenderer) {
return scheam;
}
if (scheam.reciever) {
scheam = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, scheam), { receiver: scheam.reciever });
delete scheam.reciever;
}
if (scheam.videoReciever) {
scheam = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, scheam), { videoReceiver: scheam.reciever });
delete scheam.reciever;
}
return scheam;
});
// Grid 一些旧格式的兼容
(0, factory_1.addSchemaFilter)(function (scheam, renderer) {
if (renderer.component !== Grid_1.GridRenderer) {
return scheam;
}
if (Array.isArray(scheam.columns) &&
scheam.columns.some(function (item) { return Array.isArray(item) || item.type; })) {
scheam = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, scheam), { columns: scheam.columns.map(function (item) {
if (Array.isArray(item)) {
return {
body: [
{
type: 'grid',
columns: item
}
]
};
}
else if (item.type) {
var xs = item.xs, sm = item.sm, md = item.md, lg = item.lg, columnClassName = item.columnClassName, mobLayout = item.mobLayout, rest = (0, tslib_1.__rest)(item, ["xs", "sm", "md", "lg", "columnClassName", "mobLayout"]);
item = {
xs: xs,
sm: sm,
md: md,
lg: lg,
columnClassName: columnClassName,
mobLayout: mobLayout,
body: [rest]
};
}
return item;
}) });
}
return scheam;
});
// Hbox 一些旧格式的兼容
(0, factory_1.addSchemaFilter)(function (scheam, renderer) {
if (renderer.component !== HBox_1.HBoxRenderer) {
return scheam;
}
if (Array.isArray(scheam.columns) && scheam.columns.some(function (item) { return item.type; })) {
scheam = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, scheam), { columns: scheam.columns.map(function (item) {
var width = item.width, height = item.height, style = item.style, columnClassName = item.columnClassName, visible = item.visible, visibleOn = item.visibleOn, rest = (0, tslib_1.__rest)(item, ["width", "height", "style", "columnClassName", "visible", "visibleOn"]);
if (item.type) {
item = {
width: width,
height: height,
style: style,
columnClassName: columnClassName,
visible: visible,
visibleOn: visibleOn,
body: [rest]
};
}
return item;
}) });
}
return scheam;
});
var controlMapping = {
'array': 'input-array',
'button-group': 'button-group-select',
'city': 'input-city',
'color': 'input-color',
'date': 'input-date',
'datetime': 'input-datetime',
'time': 'input-time',
'quarter': 'input-quarter',
'month': 'input-month',
'year': 'input-year',
'date-range': 'input-date-range',
'datetime-range': 'input-datetime-range',
'diff': 'diff-editor',
'file': 'input-file',
'image': 'input-image',
'list': 'list-select',
'location': 'location-picker',
'matrix': 'matrix-checkboxes',
'month-range': 'input-month-range',
'quarter-range': 'input-quarter-range',
'number': 'input-number',
'range': 'input-range',
'rating': 'input-rating',
'repeat': 'input-repeat',
'rich-text': 'input-rich-text',
'form': 'input-sub-form',
'table': 'input-table',
'tag': 'input-tag',
'text': 'input-text',
'url': 'input-url',
'password': 'input-password',
'email': 'input-email',
'tree': 'input-tree',
'progress': 'static-progress',
'mapping': 'static-mapping'
};
var maybeFormItem = [
'button',
'submit',
'reset',
'button-group',
'button-toolbar',
'container',
'grid',
'hbox',
'panel',
'anchor-nav',
'qr-code'
];
function wrapControl(item) {
if (!item || !item.type) {
return item;
}
var label = item.label, description = item.description, name = item.name, required = item.required, remark = item.remark, inputOnly = item.inputOnly, labelClassName = item.labelClassName, caption = item.caption, labelRemark = item.labelRemark, descriptionClassName = item.descriptionClassName, captionClassName = item.captionClassName, hint = item.hint, showErrorMsg = item.showErrorMsg, mode = item.mode, horizontal = item.horizontal, className = item.className, inputClassName = item.inputClassName, columnClassName = item.columnClassName, visibleOn = item.visibleOn, visible = item.visible, rest = (0, tslib_1.__rest)(item, ["label", "description", "name", "required", "remark", "inputOnly", "labelClassName", "caption", "labelRemark", "descriptionClassName", "captionClassName", "hint", "showErrorMsg", "mode", "horizontal", "className", "inputClassName", "columnClassName", "visibleOn", "visible"]);
rest.name = name;
rest.className = inputClassName;
// 如果是按钮
if (~['button', 'submit', 'reset'].indexOf(rest.type)) {
rest.label = label;
label = '';
}
return {
type: 'control',
label: label,
description: description,
name: name,
required: required,
remark: remark,
inputOnly: inputOnly,
labelClassName: labelClassName,
caption: caption,
labelRemark: labelRemark,
descriptionClassName: descriptionClassName,
captionClassName: captionClassName,
hint: hint,
showErrorMsg: showErrorMsg,
mode: mode,
horizontal: horizontal,
className: className,
columnClassName: columnClassName,
visibleOn: visibleOn,
visible: visible,
body: rest
};
}
var maybeStatic = [
'tpl',
'mapping',
'progress',
'status',
'json',
'video',
'qrcode',
'plain',
'each',
'link'
];
function wrapStatic(item) {
if (!item || !item.type) {
return item;
}
return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { type: "static-" + item.type });
}
(0, factory_1.addSchemaFilter)(function (schema, renderer, props) {
var _a;
var _b, _c, _d;
var type = typeof (schema === null || schema === void 0 ? void 0 : schema.type) === 'string' ? schema.type.toLowerCase() : '';
// controls 转成 body
if (type === 'combo' && Array.isArray(schema.conditions)) {
schema = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, schema), { conditions: schema.conditions.map(function (condition) {
if (Array.isArray(condition.controls)) {
condition = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, condition), { items: condition.controls.map(controlToNormalRenderer) });
delete condition.controls;
}
return condition;
}) });
}
if ((schema === null || schema === void 0 ? void 0 : schema.controls) &&
schema.type !== 'audio' &&
schema.type !== 'carousel') {
schema = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, schema), (_a = {}, _a[schema.type === 'combo' ? "items" : 'body'] = (Array.isArray(schema.controls)
? schema.controls
: [schema.controls]).map(controlToNormalRenderer), _a));
delete schema.controls;
}
else if (((_b = schema === null || schema === void 0 ? void 0 : schema.quickEdit) === null || _b === void 0 ? void 0 : _b.controls) &&
(!schema.quickEdit.type ||
!~['combo', 'group', 'panel', 'fieldSet', 'fieldset'].indexOf(schema.quickEdit.type))) {
schema = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, schema), { quickEdit: (0, tslib_1.__assign)((0, tslib_1.__assign)({}, schema.quickEdit), { body: (Array.isArray(schema.quickEdit.controls)
? schema.quickEdit.controls
: [schema.quickEdit.controls]).map(controlToNormalRenderer) }) });
delete schema.quickEdit.controls;
}
else if ((_c = schema === null || schema === void 0 ? void 0 : schema.quickEdit) === null || _c === void 0 ? void 0 : _c.type) {
schema = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, schema), { quickEdit: controlToNormalRenderer(schema.quickEdit) });
}
else if (type === 'tabs' && Array.isArray(schema.tabs)) {
schema = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, schema), { tabs: schema.tabs.map(function (tab) {
if (Array.isArray(tab.controls) && !Array.isArray(tab.body)) {
tab = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, tab), { body: tab.controls.map(controlToNormalRenderer) });
delete tab.controls;
}
return tab;
}) });
}
else if (type === 'anchor-nav' && Array.isArray(schema.links)) {
schema = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, schema), { links: schema.links.map(function (link) {
if (Array.isArray(link.controls)) {
link = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, link), { body: link === null || link === void 0 ? void 0 : link.controls.map(controlToNormalRenderer) });
delete link.controls;
}
return link;
}) });
}
else if (type === 'input-array' && schema.items) {
schema = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, schema), { items: Array.isArray(schema.items)
? schema.items.map(controlToNormalRenderer)
: controlToNormalRenderer(schema.items) });
}
else if ((type === 'grid' || type === 'hbox') &&
Array.isArray(schema.columns)) {
schema = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, schema), { columns: schema.columns.map(function (column) {
if (Array.isArray(column.controls)) {
column = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, column), { body: column === null || column === void 0 ? void 0 : column.controls.map(controlToNormalRenderer) });
// 有可能直接外面的grid 或者 bhox 列里面用 form 的。
if (column.type !== 'form') {
delete column.type;
}
delete column.controls;
}
return column;
}) });
}
else if (type === 'service' && ((_d = schema === null || schema === void 0 ? void 0 : schema.body) === null || _d === void 0 ? void 0 : _d.controls)) {
schema = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, schema), { body: (Array.isArray(schema.body.controls)
? schema.body.controls
: [schema.body.controls]).map(controlToNormalRenderer) });
}
return schema;
function controlToNormalRenderer(item) {
if ((item === null || item === void 0 ? void 0 : item.$ref) && props.resolveDefinitions) {
item = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, props.resolveDefinitions(item.$ref)), item);
delete item.$ref;
}
return item && controlMapping[item.type]
? (0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { type: controlMapping[item.type] }) : ~maybeFormItem.indexOf(item === null || item === void 0 ? void 0 : item.type)
? wrapControl(item)
: ~maybeStatic.indexOf(item === null || item === void 0 ? void 0 : item.type)
? wrapStatic(item)
: item;
}
});
//# sourceMappingURL=./compat.js.map
;