mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-12 03:01:16 +00:00
fix: fix setter hooks error
This commit is contained in:
parent
acf7449ca2
commit
8a3a0b8241
@ -1,8 +1,8 @@
|
|||||||
// all this file for polyfill vision logic
|
// all this file for polyfill vision logic
|
||||||
|
|
||||||
import { isValidElement } from 'react';
|
import { isValidElement } from 'react';
|
||||||
import { isSetterConfig, isDynamicSetter } from '@alilc/lowcode-types';
|
import { isSetterConfig, isDynamicSetter, FieldConfig, SetterConfig } from '@alilc/lowcode-types';
|
||||||
import { getSetter } from '@alilc/lowcode-editor-core';
|
import { getSetter } from '@alilc/lowcode-editor-core';
|
||||||
|
import { SettingField } from './setting-field';
|
||||||
|
|
||||||
function getHotterFromSetter(setter) {
|
function getHotterFromSetter(setter) {
|
||||||
return setter && (setter.Hotter || (setter.type && setter.type.Hotter)) || []; // eslint-disable-line
|
return setter && (setter.Hotter || (setter.type && setter.type.Hotter)) || []; // eslint-disable-line
|
||||||
@ -35,7 +35,7 @@ export class Transducer {
|
|||||||
|
|
||||||
context: any;
|
context: any;
|
||||||
|
|
||||||
constructor(context, config) {
|
constructor(context: SettingField, config: { setter: FieldConfig['setter'] }) {
|
||||||
let { setter } = config;
|
let { setter } = config;
|
||||||
|
|
||||||
// 1. validElement
|
// 1. validElement
|
||||||
@ -46,16 +46,29 @@ export class Transducer {
|
|||||||
} else if (isValidElement(setter) && setter.type.displayName === 'MixedSetter') {
|
} else if (isValidElement(setter) && setter.type.displayName === 'MixedSetter') {
|
||||||
setter = setter.props?.setters?.[0];
|
setter = setter.props?.setters?.[0];
|
||||||
} else if (typeof setter === 'object' && setter.componentName === 'MixedSetter') {
|
} else if (typeof setter === 'object' && setter.componentName === 'MixedSetter') {
|
||||||
setter = setter && setter.props && setter.props.setters && Array.isArray(setter.props.setters) && setter.props.setters[0];
|
setter = Array.isArray(setter?.props?.setters) && setter.props.setters[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 两种方式标识是 FC 而不是动态 setter
|
||||||
|
* 1. 物料描述里面 setter 的配置,显式设置为 false
|
||||||
|
* 2. registerSetter 注册 setter 时显式设置为 false
|
||||||
|
*/
|
||||||
|
|
||||||
|
let isDynamic = true;
|
||||||
|
|
||||||
if (isSetterConfig(setter)) {
|
if (isSetterConfig(setter)) {
|
||||||
setter = setter.componentName;
|
const { componentName, isDynamic: dynamicFlag } = setter as SetterConfig;
|
||||||
|
setter = componentName;
|
||||||
|
isDynamic = dynamicFlag !== false;
|
||||||
}
|
}
|
||||||
if (typeof setter === 'string') {
|
if (typeof setter === 'string') {
|
||||||
setter = getSetter(setter)?.component;
|
const { component, isDynamic: dynamicFlag } = getSetter(setter) || {};
|
||||||
|
setter = component;
|
||||||
|
// 如果在物料配置中声明了,在 registerSetter 没有声明,取物料配置中的声明
|
||||||
|
isDynamic = dynamicFlag === undefined ? isDynamic : dynamicFlag !== false;
|
||||||
}
|
}
|
||||||
if (isDynamicSetter(setter)) {
|
if (isDynamicSetter(setter) && isDynamic) {
|
||||||
setter = setter.call(context, context);
|
setter = setter.call(context, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -15,6 +15,8 @@ export type RegisteredSetter = {
|
|||||||
*/
|
*/
|
||||||
initialValue?: any | ((field: any) => any);
|
initialValue?: any | ((field: any) => any);
|
||||||
recommend?: boolean;
|
recommend?: boolean;
|
||||||
|
// 标识是否为动态setter,默认为true
|
||||||
|
isDynamic?: boolean;
|
||||||
};
|
};
|
||||||
const settersMap = new Map<string, RegisteredSetter & {
|
const settersMap = new Map<string, RegisteredSetter & {
|
||||||
type: string;
|
type: string;
|
||||||
|
|||||||
@ -63,6 +63,8 @@ export interface SetterConfig {
|
|||||||
* @todo 物料协议推进
|
* @todo 物料协议推进
|
||||||
*/
|
*/
|
||||||
valueType?: CompositeValue[];
|
valueType?: CompositeValue[];
|
||||||
|
// 标识是否为动态setter,默认为true
|
||||||
|
isDynamic?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if *string* passed must be a registered Setter Name, future support blockSchema
|
// if *string* passed must be a registered Setter Name, future support blockSchema
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user