Skip to content

Commit 8a3a0b8

Browse files
haloworld007LeoYuan
authored andcommitted
fix: fix setter hooks error
1 parent acf7449 commit 8a3a0b8

File tree

3 files changed

+24
-7
lines changed

3 files changed

+24
-7
lines changed

packages/designer/src/designer/setting/utils.ts

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// all this file for polyfill vision logic
2-
32
import { isValidElement } from 'react';
4-
import { isSetterConfig, isDynamicSetter } from '@alilc/lowcode-types';
3+
import { isSetterConfig, isDynamicSetter, FieldConfig, SetterConfig } from '@alilc/lowcode-types';
54
import { getSetter } from '@alilc/lowcode-editor-core';
5+
import { SettingField } from './setting-field';
66

77
function 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

packages/editor-core/src/di/setter.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ export type RegisteredSetter = {
1515
*/
1616
initialValue?: any | ((field: any) => any);
1717
recommend?: boolean;
18+
// 标识是否为动态setter,默认为true
19+
isDynamic?: boolean;
1820
};
1921
const settersMap = new Map<string, RegisteredSetter & {
2022
type: string;

packages/types/src/setter-config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ export interface SetterConfig {
6363
* @todo 物料协议推进
6464
*/
6565
valueType?: CompositeValue[];
66+
// 标识是否为动态setter,默认为true
67+
isDynamic?: boolean;
6668
}
6769

6870
// if *string* passed must be a registered Setter Name, future support blockSchema

0 commit comments

Comments
 (0)