in src/setter/mixed-setter/index.tsx [64:153]
function nomalizeSetters(
setters?: Array<string | SetterConfig | CustomView | DynamicSetter>,
): SetterItem[] {
if (!setters) {
const normalized: SetterItem[] = [];
getSettersMap().forEach((setter, name) => {
if (name === 'MixedSetter') {
return;
}
normalized.push({
name,
title: setter.title || name,
setter: name,
condition: setter.condition,
initialValue: setter.initialValue,
list: setter.recommend || false,
valueType: setter.valueType,
});
});
return normalized;
}
const names: string[] = [];
function generateName(n: string) {
let idx = 1;
let got = n;
while (names.indexOf(got) > -1) {
got = `${n}:${idx++}`;
}
names.push(got);
return got;
}
const formattedSetters = setters.map((setter) => {
const config: any = {
setter,
list: true,
};
if (isSetterConfig(setter)) {
config.setter = setter.componentName;
config.props = setter.props;
config.condition = setter.condition;
config.initialValue = setter.initialValue;
config.title = setter.title;
config.valueType = setter.valueType;
}
if (typeof config.setter === 'string') {
config.name = config.setter;
names.push(config.name);
const info = getSetter(config.setter);
if (!config.title) {
config.title = info?.title || config.setter;
}
if (!config.valueType) {
config.valueType = info?.valueType;
}
if (!config.condition) {
config.condition = info?.condition;
}
if (!config.initialValue) {
config.initialValue = info?.initialValue;
}
} else {
config.name = generateName(
(config.setter as any)?.displayName || (config.setter as any)?.name || 'CustomSetter',
);
if (!config.title) {
config.title = config.name;
}
}
return config;
});
const uniqSetters = formattedSetters.reduce((map, s) => {
map.set(s.name, s);
return map;
}, new Map<string, any>());
const hasComplexSetter = formattedSetters.filter((item) => {
// 变量绑定,非切换设置器
if (item.props?.variableBind) return false;
return ['ArraySetter', 'ObjectSetter'].includes(item.setter);
})?.length;
return [...uniqSetters.values()].map((item) => {
if (item.setter === 'VariableSetter' && hasComplexSetter) {
item.setter = 'ExpressionSetter';
item.name = 'ExpressionSetter';
}
return item;
});
}