mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-03-04 17:27:09 +00:00
113 lines
3.7 KiB
TypeScript
113 lines
3.7 KiB
TypeScript
import { isJSBlock, isJSExpression, isJSSlot } from '@ali/lowcode-types';
|
|
import { isPlainObject, hasOwnProperty, cloneDeep, isI18NObject, isUseI18NSetter, convertToI18NObject, isString } from '@ali/lowcode-utils';
|
|
import { globalContext, Editor } from '@ali/lowcode-editor-core';
|
|
import { Designer, LiveEditing, TransformStage, Node, getConvertedExtraKey, LowCodePluginManager } from '@ali/lowcode-designer';
|
|
import Outline, { OutlineBackupPane, getTreeMaster } from '@ali/lowcode-plugin-outline-pane';
|
|
import bus from './bus';
|
|
import { VE_EVENTS } from './base/const';
|
|
|
|
import DesignerPlugin from '@ali/lowcode-plugin-designer';
|
|
import { Skeleton, SettingsPrimaryPane, registerDefaults } from '@ali/lowcode-editor-skeleton';
|
|
|
|
import { deepValueParser } from './deep-value-parser';
|
|
import { liveEditingRule, liveEditingSaveHander } from './vc-live-editing';
|
|
import {
|
|
compatibleReducer,
|
|
upgradePageLifeCyclesReducer,
|
|
stylePropsReducer,
|
|
upgradePropsReducer,
|
|
filterReducer,
|
|
removeEmptyPropsReducer,
|
|
initNodeReducer,
|
|
liveLifecycleReducer,
|
|
nodeTopFixedReducer,
|
|
} from './props-reducers';
|
|
|
|
export const editor = new Editor();
|
|
globalContext.register(editor, Editor);
|
|
|
|
export const skeleton = new Skeleton(editor);
|
|
editor.set(Skeleton, skeleton);
|
|
editor.set('skeleton', skeleton);
|
|
registerDefaults();
|
|
|
|
export const designer = new Designer({ editor });
|
|
editor.set(Designer, designer);
|
|
editor.set('designer', designer);
|
|
|
|
export const plugins = (new LowCodePluginManager(editor)).toProxy();
|
|
editor.set('plugins', plugins);
|
|
|
|
designer.project.onCurrentDocumentChange((doc) => {
|
|
bus.emit(VE_EVENTS.VE_PAGE_PAGE_READY);
|
|
editor.set('currentDocument', doc);
|
|
});
|
|
|
|
// 升级 Props
|
|
designer.addPropsReducer(upgradePropsReducer, TransformStage.Upgrade);
|
|
|
|
// 节点 props 初始化
|
|
designer.addPropsReducer(initNodeReducer, TransformStage.Init);
|
|
|
|
designer.addPropsReducer(liveLifecycleReducer, TransformStage.Render);
|
|
|
|
designer.addPropsReducer(filterReducer, TransformStage.Save);
|
|
designer.addPropsReducer(filterReducer, TransformStage.Render);
|
|
|
|
// FIXME: Dirty fix, will remove this reducer
|
|
designer.addPropsReducer(compatibleReducer, TransformStage.Save);
|
|
// 兼容历史版本的 Page 组件
|
|
designer.addPropsReducer(upgradePageLifeCyclesReducer, TransformStage.Save);
|
|
|
|
// 设计器组件样式处理
|
|
designer.addPropsReducer(stylePropsReducer, TransformStage.Render);
|
|
// 国际化 & Expression 渲染时处理
|
|
designer.addPropsReducer(deepValueParser, TransformStage.Render);
|
|
|
|
// Init 的时候没有拿到 dataSource, 只能在 Render 和 Save 的时候都调用一次,理论上执行时机在 Init
|
|
// Render 和 Save 都要各调用一次,感觉也是有问题的,是不是应该在 Render 执行一次就行了?见上 filterReducer 也是一样的处理方式。
|
|
designer.addPropsReducer(removeEmptyPropsReducer, TransformStage.Render);
|
|
designer.addPropsReducer(removeEmptyPropsReducer, TransformStage.Save);
|
|
|
|
designer.addPropsReducer(nodeTopFixedReducer, TransformStage.Render);
|
|
designer.addPropsReducer(nodeTopFixedReducer, TransformStage.Save);
|
|
|
|
skeleton.add({
|
|
area: 'mainArea',
|
|
name: 'designer',
|
|
type: 'Widget',
|
|
content: DesignerPlugin,
|
|
});
|
|
skeleton.add({
|
|
area: 'rightArea',
|
|
name: 'settingsPane',
|
|
type: 'Panel',
|
|
content: SettingsPrimaryPane,
|
|
props: {
|
|
ignoreRoot: true,
|
|
},
|
|
});
|
|
skeleton.add({
|
|
area: 'leftArea',
|
|
name: 'outlinePane',
|
|
type: 'PanelDock',
|
|
content: Outline,
|
|
panelProps: {
|
|
area: 'leftFixedArea',
|
|
},
|
|
});
|
|
skeleton.add({
|
|
area: 'rightArea',
|
|
name: 'backupOutline',
|
|
type: 'Panel',
|
|
props: {
|
|
condition: () => {
|
|
return designer.dragon.dragging && !getTreeMaster(designer).hasVisibleTreeBoard();
|
|
},
|
|
},
|
|
content: OutlineBackupPane,
|
|
});
|
|
|
|
LiveEditing.addLiveEditingSpecificRule(liveEditingRule);
|
|
LiveEditing.addLiveEditingSaveHandler(liveEditingSaveHander);
|