diff --git a/packages/designer/src/designer/setting/utils.js b/packages/designer/src/designer/setting/utils.js index b8f5bbdcc..d9e7e389c 100644 --- a/packages/designer/src/designer/setting/utils.js +++ b/packages/designer/src/designer/setting/utils.js @@ -1,12 +1,16 @@ +// all this file for polyfill vision logic + +import { isValidElement } from 'react'; + function getHotterFromSetter(setter) { return setter && (setter.Hotter || (setter.type && setter.type.Hotter)) || []; // eslint-disable-line } function getTransducerFromSetter(setter) { return setter && ( - setter.transducer || setter.Transducer - || (setter.type && (setter.type.transducer || setter.type.Transducer)) - ) || null; // eslint-disable-line + setter.transducer || setter.Transducer + || (setter.type && (setter.type.transducer || setter.type.Transducer)) + ) || null; // eslint-disable-line } function combineTransducer(transducer, arr, context) { @@ -23,9 +27,22 @@ function combineTransducer(transducer, arr, context) { export class Transducer { constructor(context, config) { + let { setter } = config; + + // 1. validElement + // 2. SetterConfig + // 3. SetterConfig[] + if (Array.isArray(setter)) { + setter = setter[0]; + } else if (isValidElement(setter) && setter.type.displayName === 'MixedSetter') { + setter = setter.props.setters[0]; + } else if (typeof setter === 'object' && setter.componentName === 'MixedSetter') { + setter = setter.props.setters[0]; + } + this.setterTransducer = combineTransducer( - getTransducerFromSetter(config.setter), - getHotterFromSetter(config.setter), + getTransducerFromSetter(setter), + getHotterFromSetter(setter), context, ); this.context = context; diff --git a/packages/editor-skeleton/src/components/mixed-setter/index.tsx b/packages/editor-skeleton/src/components/mixed-setter/index.tsx index 67e020925..1adafc6eb 100644 --- a/packages/editor-skeleton/src/components/mixed-setter/index.tsx +++ b/packages/editor-skeleton/src/components/mixed-setter/index.tsx @@ -115,6 +115,8 @@ export default class MixedSetter extends Component<{ className?: string; }> { private setters = nomalizeSetters(this.props.setters); + // set name ,used in setting Transducer + static displayName = 'MixedSetter'; @obx.ref private used?: string; @computed private getCurrentSetter() { const { field } = this.props;