jjb-lc-designable
Version:
基于alibaba-designable源码二次封装的表单设计器。
85 lines (83 loc) • 2.51 kB
JavaScript
import { TreeNode } from './TreeNode';
import { Workbench } from './Workbench';
import { Cursor } from './Cursor';
import { Keyboard } from './Keyboard';
import { Screen, ScreenType } from './Screen';
import { Event, uid, globalThisPolyfill } from 'jjb-lc-designable/shared';
/**
* 设计器引擎
*/
export class Engine extends Event {
constructor(props) {
super(props);
this.props = {
...Engine.defaultProps,
...props
};
this.init();
this.id = uid();
}
init() {
this.workbench = new Workbench(this);
this.screen = new Screen(this);
this.cursor = new Cursor(this);
this.keyboard = new Keyboard(this);
}
setCurrentTree(tree) {
if (this.workbench.currentWorkspace) {
this.workbench.currentWorkspace.operation.tree.from(tree);
}
}
getCurrentTree() {
return this.workbench?.currentWorkspace?.operation?.tree;
}
getAllSelectedNodes() {
let results = [];
for (let i = 0; i < this.workbench.workspaces.length; i++) {
const workspace = this.workbench.workspaces[i];
results = results.concat(workspace.operation.selection.selectedNodes);
}
return results;
}
findNodeById(id) {
return TreeNode.findById(id);
}
findMovingNodes() {
const results = [];
this.workbench.eachWorkspace(workspace => {
workspace.operation.moveHelper.dragNodes?.forEach(node => {
if (!results.includes(node)) {
results.push(node);
}
});
});
return results;
}
createNode(node, parent) {
return new TreeNode(node, parent);
}
mount() {
this.attachEvents(globalThisPolyfill);
}
unmount() {
this.detachEvents();
}
static defaultProps = {
shortcuts: [],
effects: [],
drivers: [],
rootComponentName: 'Root',
sourceIdAttrName: 'data-designer-source-id',
nodeIdAttrName: 'data-designer-node-id',
contentEditableAttrName: 'data-content-editable',
contentEditableNodeIdAttrName: 'data-content-editable-node-id',
clickStopPropagationAttrName: 'data-click-stop-propagation',
nodeSelectionIdAttrName: 'data-designer-node-helpers-id',
nodeDragHandlerAttrName: 'data-designer-node-drag-handler',
screenResizeHandlerAttrName: 'data-designer-screen-resize-handler',
nodeResizeHandlerAttrName: 'data-designer-node-resize-handler',
outlineNodeIdAttrName: 'data-designer-outline-node-id',
nodeTranslateAttrName: 'data-designer-node-translate-handler',
defaultScreenType: ScreenType.PC
};
}