feat: 支持 visionSettings.enableFilterReducerInRenderStage 配置项

This commit is contained in:
力皓 2021-06-02 19:59:56 +08:00
parent 79d0c33109
commit 277a18564a
6 changed files with 22 additions and 13 deletions

View File

@ -147,7 +147,7 @@ export class BuiltinSimulatorHost implements ISimulatorHost<BuiltinSimulatorProp
this.project = project; this.project = project;
this.designer = project?.designer; this.designer = project?.designer;
this.scroller = this.designer.createScroller(this.viewport); this.scroller = this.designer.createScroller(this.viewport);
this.autoRender = engineConfig.get('disableAutoRender') !== true; this.autoRender = !engineConfig.get('disableAutoRender', false);
} }
get currentDocument() { get currentDocument() {

View File

@ -530,7 +530,7 @@ export class Designer {
return reducers.reduce((xprops, reducer) => { return reducers.reduce((xprops, reducer) => {
try { try {
return reducer(xprops, node); return reducer(xprops, node, { stage });
} catch (e) { } catch (e) {
// todo: add log // todo: add log
console.warn(e); console.warn(e);
@ -557,4 +557,5 @@ export class Designer {
} }
} }
export type PropsReducer = (props: CompositeObject, node: Node) => CompositeObject; export type PropsReducerContext = { stage: TransformStage };
export type PropsReducer = (props: CompositeObject, node: Node, ctx?: PropsReducerContext) => CompositeObject;

View File

@ -166,19 +166,19 @@ interface EngineOptions {
*/ */
enableCondition?: boolean; enableCondition?: boolean;
/** /**
* live * live 'design'
*/ */
designMode?: 'design' | 'live'; designMode?: 'design' | 'live';
/** /**
* * 'default'
*/ */
device?: 'default' | 'mobile' | string; device?: 'default' | 'mobile' | string;
/** /**
* * 'zh_CN'
*/ */
locale?: string; locale?: string;
/** /**
* * 'react'
*/ */
renderEnv?: 'react' | 'rax' | string; renderEnv?: 'react' | 'rax' | string;
/** /**
@ -188,23 +188,24 @@ interface EngineOptions {
transform: (originalDevice: string) => string; transform: (originalDevice: string) => string;
}; };
/** /**
* * false
*/ */
enableReactiveContainer?: boolean; enableReactiveContainer?: boolean;
/** /**
* * false
*/ */
disableAutoRender?: boolean; disableAutoRender?: boolean;
/** /**
* Vision-polyfill settings * Vision-polyfill settings
*/ */
visionSettings?: { visionSettings?: {
// 是否禁用降级Reducer // 是否禁用降级 reducer默认值false
disableCompatibleReducer?: boolean; disableCompatibleReducer?: boolean;
// 是否开启在 render 阶段开启 filter reducer默认值false
enableFilterReducerInRenderStage?: boolean;
} }
[key: string]: any; [key: string]: any;
} }
export async function init(container?: Element, options?: EngineOptions) { export async function init(container?: Element, options?: EngineOptions) {
let engineOptions = null; let engineOptions = null;
let engineContainer = null; let engineContainer = null;

View File

@ -7,6 +7,7 @@ export {
IDesignerCabin, IDesignerCabin,
BuiltinSimulatorHost, BuiltinSimulatorHost,
TransformStage, TransformStage,
PropsReducerContext,
} from '@ali/lowcode-designer'; } from '@ali/lowcode-designer';
// 这样做的目的是为了去除 Node / DocumentModel 等的值属性,仅保留类型属性 // 这样做的目的是为了去除 Node / DocumentModel 等的值属性,仅保留类型属性

View File

@ -1,8 +1,13 @@
import logger from '@ali/vu-logger'; import logger from '@ali/vu-logger';
import { Node, PropsReducerContext, designerCabin, engineConfig } from '@ali/lowcode-engine';
import { hasOwnProperty } from '@ali/lowcode-utils'; import { hasOwnProperty } from '@ali/lowcode-utils';
import { Node } from '@ali/lowcode-designer'; const { TransformStage } = designerCabin;
export function filterReducer(props: any, node: Node): any { export function filterReducer(props: any, node: Node, ctx: PropsReducerContext): any {
// 老的 vision 逻辑是 render 阶段不走 filter 逻辑
if (ctx.stage === TransformStage.Render && !engineConfig.get('visionSettings.enableFilterReducerInRenderStage', false)) {
return props;
}
const filters = node.componentMeta.getMetadata().experimental?.filters; const filters = node.componentMeta.getMetadata().experimental?.filters;
if (filters && filters.length) { if (filters && filters.length) {
const newProps = { ...props }; const newProps = { ...props };

View File

@ -38,6 +38,7 @@ designer.addPropsReducer(initNodeReducer, TransformStage.Init);
designer.addPropsReducer(liveLifecycleReducer, TransformStage.Render); designer.addPropsReducer(liveLifecycleReducer, TransformStage.Render);
designer.addPropsReducer(filterReducer, TransformStage.Save); designer.addPropsReducer(filterReducer, TransformStage.Save);
designer.addPropsReducer(filterReducer, TransformStage.Render);
// FIXME: Dirty fix, will remove this reducer // FIXME: Dirty fix, will remove this reducer
designer.addPropsReducer(compatibleReducer, TransformStage.Save); designer.addPropsReducer(compatibleReducer, TransformStage.Save);