@zhsz/cool-design-crud
Version:
198 lines (197 loc) • 8.55 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const core = require("@formily/core");
const vue = require("vue");
const transform = require("../utils/transform.js");
const asyncDataSource = (pattern, service, fieldNames) => () => {
core.onFieldInit(pattern, (field) => {
if (!core.isVoidField(field) && service) {
field.loading = true;
service().then((data) => {
const dataSource = data.map(
(item) => transform.processItem(item, fieldNames)
);
field.dataSource = dataSource;
}).finally(() => field.loading = false);
}
});
};
const setIfDefined = (itemMap, key, value) => {
if (value !== void 0 && value !== null) {
if (Object.prototype.toString.call(value).slice(8, -1) === "Object" && value !== null) {
const obj = {};
for (const prop in value) {
if (value.hasOwnProperty(prop)) {
const propValue = value[prop];
if (propValue !== void 0 && propValue !== null) {
obj[prop] = propValue;
}
}
}
if (Object.keys(obj).length > 0) {
itemMap.set(key, obj);
}
} else {
itemMap.set(key, value);
}
}
};
const transformISchema = (field, element, optionsRef, formCore, currentPath = "", parentArrayPath = "", isItems = false) => {
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
const itemMap = /* @__PURE__ */ new Map();
setIfDefined(
itemMap,
"type",
typeof (element == null ? void 0 : element.type) === "object" ? "Custom" : (element == null ? void 0 : element.type) || "input"
);
setIfDefined(itemMap, "title", element == null ? void 0 : element.title);
setIfDefined(
itemMap,
"default",
(element == null ? void 0 : element._default) ? element == null ? void 0 : element._default : element == null ? void 0 : element.default
);
setIfDefined(itemMap, "readOnly", element == null ? void 0 : element.readOnly);
setIfDefined(itemMap, "writeOnly", element == null ? void 0 : element.writeOnly);
setIfDefined(itemMap, "enum", element == null ? void 0 : element.enum);
setIfDefined(itemMap, "const", element == null ? void 0 : element.const);
setIfDefined(itemMap, "multipleOf", element == null ? void 0 : element.multipleOf);
setIfDefined(itemMap, "maximum", element == null ? void 0 : element.maximum);
setIfDefined(itemMap, "exclusiveMaximum", element == null ? void 0 : element.exclusiveMaximum);
setIfDefined(itemMap, "minimum", element == null ? void 0 : element.minimum);
setIfDefined(itemMap, "exclusiveMinimum", element == null ? void 0 : element.exclusiveMinimum);
setIfDefined(itemMap, "maxLength", element == null ? void 0 : element.maxLength);
setIfDefined(itemMap, "minLength", element == null ? void 0 : element.minLength);
setIfDefined(itemMap, "pattern", element == null ? void 0 : element.pattern);
setIfDefined(itemMap, "maxItems", element == null ? void 0 : element.maxItems);
setIfDefined(itemMap, "minItems", element == null ? void 0 : element.minItems);
setIfDefined(itemMap, "uniqueItems", element == null ? void 0 : element.uniqueItems);
setIfDefined(itemMap, "maxProperties", element == null ? void 0 : element.maxProperties);
setIfDefined(itemMap, "minProperties", element == null ? void 0 : element.minProperties);
setIfDefined(itemMap, "required", element == null ? void 0 : element._required);
setIfDefined(itemMap, "format", element == null ? void 0 : element.format);
setIfDefined(itemMap, "x-index", element == null ? void 0 : element.order);
setIfDefined(itemMap, "x-pattern", element == null ? void 0 : element.uiStatus);
setIfDefined(itemMap, "x-display", element == null ? void 0 : element.display);
setIfDefined(itemMap, "x-validator", element == null ? void 0 : element.rules);
setIfDefined(
itemMap,
"x-decorator",
(element == null ? void 0 : element.decorator) ? element == null ? void 0 : element.decorator : !["void", "Custom"].includes((element == null ? void 0 : element.type) || "") ? "FormItem" : null
);
let span;
if (isItems) {
span = 24;
} else {
span = (element == null ? void 0 : element.span) ?? ((_a = optionsRef == null ? void 0 : optionsRef.props) == null ? void 0 : _a.span) ?? 12;
}
itemMap.has("x-decorator") && setIfDefined(
itemMap,
"x-decorator-props",
Object.assign(
{
size: element == null ? void 0 : element.size,
label: element == null ? void 0 : element.title,
span,
labelColProps: (_b = optionsRef == null ? void 0 : optionsRef.props) == null ? void 0 : _b.labelColProps,
wrapperColProps: (_c = optionsRef == null ? void 0 : optionsRef.props) == null ? void 0 : _c.wrapperColProps,
hideLabel: ((_d = optionsRef == null ? void 0 : optionsRef.props) == null ? void 0 : _d.hideLabel) ?? isItems ? true : false,
labelColStyle: (_e = optionsRef == null ? void 0 : optionsRef.props) == null ? void 0 : _e.labelColStyle,
wrapperColStyle: (_f = optionsRef == null ? void 0 : optionsRef.props) == null ? void 0 : _f.wrapperColStyle,
rowProps: (_g = optionsRef == null ? void 0 : optionsRef.props) == null ? void 0 : _g.rowProps,
rowClass: (_h = optionsRef == null ? void 0 : optionsRef.props) == null ? void 0 : _h.rowClass,
contentClass: (_i = optionsRef == null ? void 0 : optionsRef.props) == null ? void 0 : _i.contentClass
},
element == null ? void 0 : element.dProps
)
);
setIfDefined(
itemMap,
"x-component",
(element == null ? void 0 : element.component) ? element == null ? void 0 : element.component : void 0
);
setIfDefined(
itemMap,
"x-component-props",
Object.assign(
{
field: element == null ? void 0 : element.title,
clearable: ((_j = optionsRef == null ? void 0 : optionsRef.props) == null ? void 0 : _j.clearable) ?? true
},
element == null ? void 0 : element.cProps
)
);
setIfDefined(itemMap, "x-content", element == null ? void 0 : element.slots);
setIfDefined(itemMap, "x-visible", element == null ? void 0 : element._visible);
setIfDefined(itemMap, "x-hidden", element == null ? void 0 : element._hidden);
setIfDefined(itemMap, "x-disabled", element == null ? void 0 : element.disabled);
setIfDefined(itemMap, "x-editable", element == null ? void 0 : element.editable);
setIfDefined(itemMap, "x-read-pretty", element == null ? void 0 : element.readPretty);
setIfDefined(itemMap, "x-data", element == null ? void 0 : element.data);
setIfDefined(itemMap, "x-reactions", element == null ? void 0 : element.reactions);
if (element == null ? void 0 : element.properties) {
const properties = {};
for (const prop in element.properties) {
if (element.properties.hasOwnProperty(prop)) {
properties[prop] = transformISchema(
prop,
element.properties[prop],
optionsRef,
formCore,
`${currentPath}.${field}`,
`${parentArrayPath}.${prop}`,
isItems
);
}
}
setIfDefined(itemMap, "properties", properties);
}
if (element == null ? void 0 : element.items) {
const items = transformISchema(
field,
element.items,
optionsRef,
formCore,
currentPath,
`${field}.*`,
true
);
if (Object.keys(items).length > 0) {
setIfDefined(itemMap, "items", items);
}
}
if ((_k = element == null ? void 0 : element.cProps) == null ? void 0 : _k.api) {
const fullPath = parentArrayPath.includes("*") ? parentArrayPath : `${currentPath}.${field}`;
formCore.addEffects(
fullPath,
asyncDataSource(
fullPath,
(_l = element == null ? void 0 : element.cProps) == null ? void 0 : _l.api,
(_m = element == null ? void 0 : element.cProps) == null ? void 0 : _m.fieldNames
)
);
}
const r = Object.fromEntries(itemMap.entries());
itemMap.clear();
return r;
};
function useSchema(optionsRef, formCore) {
const schema = vue.computed(() => {
const properties = {};
if (optionsRef && (optionsRef == null ? void 0 : optionsRef.schema)) {
for (const item in optionsRef == null ? void 0 : optionsRef.schema) {
properties[item] = transformISchema(
item,
optionsRef == null ? void 0 : optionsRef.schema[item],
optionsRef,
formCore
);
}
}
return {
type: "object",
properties
};
});
return schema;
}
exports.useSchema = useSchema;