@alilc/lowcode-editor-core
Version:
Core Api for Ali lowCode engine
96 lines (95 loc) • 2.77 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
import { createContent, isCustomView } from '@alilc/lowcode-utils';
var settersMap = new Map();
export function registerSetter(typeOrMaps, setter) {
if (typeof typeOrMaps === 'object') {
Object.keys(typeOrMaps).forEach(function (type) {
registerSetter(type, typeOrMaps[type]);
});
return;
}
if (!setter) {
return;
}
if (isCustomView(setter)) {
setter = {
component: setter,
// todo: intl
title: setter.displayName || setter.name || 'CustomSetter'
};
}
if (!setter.initialValue) {
var initial = getInitialFromSetter(setter.component);
if (initial) {
setter.initialValue = function (field) {
return initial.call(field, field.getValue());
};
}
}
settersMap.set(typeOrMaps, _extends({
type: typeOrMaps
}, setter));
}
function getInitialFromSetter(setter) {
return setter && (setter.initial || setter.Initial || setter.type && (setter.type.initial || setter.type.Initial)) || null; // eslint-disable-line
}
export var Setters = function Setters(viewName) {
var _this = this;
if (viewName === void 0) {
viewName = 'global';
}
this.viewName = viewName;
this.settersMap = new Map();
this.getSetter = function (type) {
return _this.settersMap.get(type) || null;
};
this.registerSetter = function (typeOrMaps, setter) {
if (typeof typeOrMaps === 'object') {
Object.keys(typeOrMaps).forEach(function (type) {
_this.registerSetter(type, typeOrMaps[type]);
});
return;
}
if (!setter) {
return;
}
if (isCustomView(setter)) {
setter = {
component: setter,
// todo: intl
title: setter.displayName || setter.name || 'CustomSetter'
};
}
if (!setter.initialValue) {
var initial = getInitialFromSetter(setter.component);
if (initial) {
setter.initialValue = function (field) {
return initial.call(field, field.getValue());
};
}
}
_this.settersMap.set(typeOrMaps, _extends({
type: typeOrMaps
}, setter));
};
this.getSettersMap = function () {
return _this.settersMap;
};
this.createSetterContent = function (setter, props) {
if (typeof setter === 'string') {
setter = _this.getSetter(setter);
if (!setter) {
return null;
}
if (setter.defaultProps) {
props = _extends({}, setter.defaultProps, props);
}
setter = setter.component;
}
// Fusion 的表单组件都是通过 'value' in props 来判断是否使用 defaultValue
if ('value' in props && typeof props.value === 'undefined') {
delete props.value;
}
return createContent(setter, props);
};
};