fix: fix setter hooks error

This commit is contained in:
ruhuo.tan 2022-05-19 14:08:42 +08:00 committed by LeoYuan 袁力皓
parent acf7449ca2
commit 8a3a0b8241
3 changed files with 24 additions and 7 deletions

View File

@ -1,8 +1,8 @@
// all this file for polyfill vision logic
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 { SettingField } from './setting-field';
function getHotterFromSetter(setter) {
return setter && (setter.Hotter || (setter.type && setter.type.Hotter)) || []; // eslint-disable-line
@ -35,7 +35,7 @@ export class Transducer {
context: any;
constructor(context, config) {
constructor(context: SettingField, config: { setter: FieldConfig['setter'] }) {
let { setter } = config;
// 1. validElement
@ -46,16 +46,29 @@ export class Transducer {
} else if (isValidElement(setter) && setter.type.displayName === 'MixedSetter') {
setter = setter.props?.setters?.[0];
} 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)) {
setter = setter.componentName;
const { componentName, isDynamic: dynamicFlag } = setter as SetterConfig;
setter = componentName;
isDynamic = dynamicFlag !== false;
}
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);
}

View File

@ -15,6 +15,8 @@ export type RegisteredSetter = {
*/
initialValue?: any | ((field: any) => any);
recommend?: boolean;
// 标识是否为动态setter默认为true
isDynamic?: boolean;
};
const settersMap = new Map<string, RegisteredSetter & {
type: string;

View File

@ -63,6 +63,8 @@ export interface SetterConfig {
* @todo
*/
valueType?: CompositeValue[];
// 标识是否为动态setter默认为true
isDynamic?: boolean;
}
// if *string* passed must be a registered Setter Name, future support blockSchema