diff --git a/packages/editor-core/src/config.ts b/packages/editor-core/src/config.ts index 398b7b7fe..f82db6d53 100644 --- a/packages/editor-core/src/config.ts +++ b/packages/editor-core/src/config.ts @@ -55,6 +55,10 @@ export interface EngineOptions { * 打开画布的锁定操作,默认值:false */ enableCanvasLock: boolean; + /** + * 当选中节点切换时,是否停留在相同的设置 tab 上,默认值:false + */ + stayOnTheSameSettingTab: boolean; /** * Vision-polyfill settings */ diff --git a/packages/editor-skeleton/src/components/settings/settings-primary-pane.tsx b/packages/editor-skeleton/src/components/settings/settings-primary-pane.tsx index c95f3e7d1..a3da762aa 100644 --- a/packages/editor-skeleton/src/components/settings/settings-primary-pane.tsx +++ b/packages/editor-skeleton/src/components/settings/settings-primary-pane.tsx @@ -1,6 +1,6 @@ import React, { Component } from 'react'; import { Tab, Breadcrumb } from '@alifd/next'; -import { Title, observer, Editor, obx, globalContext } from '@ali/lowcode-editor-core'; +import { Title, observer, Editor, obx, globalContext, engineConfig } from '@ali/lowcode-editor-core'; import { Node, isSettingField, SettingField, Designer } from '@ali/lowcode-designer'; import { SettingsMain } from './main'; import { SettingsPane } from './settings-pane'; @@ -24,7 +24,9 @@ export class SettingsPrimaryPane extends Component<{ editor: Editor; config: any this.setShouldIgnoreRoot(); this.props.editor.on('designer.selection.change', () => { - this._activeKey = null; + if (!engineConfig.get('stayOnTheSameSettingTab', false)) { + this._activeKey = null; + } }); } diff --git a/packages/engine/src/engine-core.ts b/packages/engine/src/engine-core.ts index cc07579bb..4c6776f4a 100644 --- a/packages/engine/src/engine-core.ts +++ b/packages/engine/src/engine-core.ts @@ -175,7 +175,10 @@ plugins.register((ctx: ILowCodePluginContext) => { }, }; }); +let engineInited = false; export async function init(container?: HTMLElement, options?: EngineOptions) { + if (engineInited) return; + engineInited = true; let engineOptions = null; let engineContainer = null; if (isPlainObject(container)) { diff --git a/packages/react-simulator-renderer/src/utils/react-find-dom-nodes.ts b/packages/react-simulator-renderer/src/utils/react-find-dom-nodes.ts index 36aa3bfb2..a00f12e91 100644 --- a/packages/react-simulator-renderer/src/utils/react-find-dom-nodes.ts +++ b/packages/react-simulator-renderer/src/utils/react-find-dom-nodes.ts @@ -29,6 +29,11 @@ export function reactFindDOMNodes(elem: ReactInstance | null): Array = []; const fiberNode = (elem as any)[FIBER_KEY]; - elementsFromFiber(fiberNode.child, elements); - return elements.length > 0 ? elements : [findDOMNode(elem)]; + elementsFromFiber(fiberNode?.child, elements); + if (elements.length > 0) return elements; + try { + return [findDOMNode(elem)]; + } catch (e) { + return null; + } }