11// all this file for polyfill vision logic
2-
32import { isValidElement } from 'react' ;
4- import { isSetterConfig , isDynamicSetter } from '@alilc/lowcode-types' ;
3+ import { isSetterConfig , isDynamicSetter , FieldConfig , SetterConfig } from '@alilc/lowcode-types' ;
54import { getSetter } from '@alilc/lowcode-editor-core' ;
5+ import { SettingField } from './setting-field' ;
66
77function getHotterFromSetter ( setter ) {
88 return setter && ( setter . Hotter || ( setter . type && setter . type . Hotter ) ) || [ ] ; // eslint-disable-line
@@ -35,7 +35,7 @@ export class Transducer {
3535
3636 context : any ;
3737
38- constructor ( context , config ) {
38+ constructor ( context : SettingField , config : { setter : FieldConfig [ 'setter' ] } ) {
3939 let { setter } = config ;
4040
4141 // 1. validElement
@@ -46,16 +46,29 @@ export class Transducer {
4646 } else if ( isValidElement ( setter ) && setter . type . displayName === 'MixedSetter' ) {
4747 setter = setter . props ?. setters ?. [ 0 ] ;
4848 } else if ( typeof setter === 'object' && setter . componentName === 'MixedSetter' ) {
49- setter = setter && setter . props && setter . props . setters && Array . isArray ( setter . props . setters ) && setter . props . setters [ 0 ] ;
49+ setter = Array . isArray ( setter ? .props ? .setters ) && setter . props . setters [ 0 ] ;
5050 }
5151
52+ /**
53+ * 两种方式标识是 FC 而不是动态 setter
54+ * 1. 物料描述里面 setter 的配置,显式设置为 false
55+ * 2. registerSetter 注册 setter 时显式设置为 false
56+ */
57+
58+ let isDynamic = true ;
59+
5260 if ( isSetterConfig ( setter ) ) {
53- setter = setter . componentName ;
61+ const { componentName, isDynamic : dynamicFlag } = setter as SetterConfig ;
62+ setter = componentName ;
63+ isDynamic = dynamicFlag !== false ;
5464 }
5565 if ( typeof setter === 'string' ) {
56- setter = getSetter ( setter ) ?. component ;
66+ const { component, isDynamic : dynamicFlag } = getSetter ( setter ) || { } ;
67+ setter = component ;
68+ // 如果在物料配置中声明了,在 registerSetter 没有声明,取物料配置中的声明
69+ isDynamic = dynamicFlag === undefined ? isDynamic : dynamicFlag !== false ;
5770 }
58- if ( isDynamicSetter ( setter ) ) {
71+ if ( isDynamicSetter ( setter ) && isDynamic ) {
5972 setter = setter . call ( context , context ) ;
6073 }
6174
0 commit comments