function nomalizeSetters()

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;
  });
}