mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-16 15:01:15 +00:00
all 70%
This commit is contained in:
parent
b561024201
commit
30da8146bb
@ -3,7 +3,7 @@ import { obx } from '@recore/obx';
|
|||||||
import Location from './location';
|
import Location from './location';
|
||||||
import DocumentModel from './document/document-model';
|
import DocumentModel from './document/document-model';
|
||||||
import { NodeData } from './schema';
|
import { NodeData } from './schema';
|
||||||
import { SimulatorInterface } from './simulator-interface';
|
import { ISimulator } from './simulator';
|
||||||
import Node from './document/node/node';
|
import Node from './document/node/node';
|
||||||
import Designer from './designer';
|
import Designer from './designer';
|
||||||
|
|
||||||
@ -167,7 +167,7 @@ export default class Dragon {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
getMasterSensors(): SimulatorInterface[] {
|
getMasterSensors(): ISimulator[] {
|
||||||
return this.designer.project.documents.map(doc => (doc.actived && doc.simulator) || null).filter(Boolean);
|
return this.designer.project.documents.map(doc => (doc.actived && doc.simulator) || null).filter(Boolean);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -319,7 +319,7 @@ export default class Dragon {
|
|||||||
return evt;
|
return evt;
|
||||||
};
|
};
|
||||||
|
|
||||||
function getSourceSensor(dragObject: DragObject): SimulatorInterface | null {
|
function getSourceSensor(dragObject: DragObject): ISimulator | null {
|
||||||
if (!isDragNodeObject(dragObject)) {
|
if (!isDragNodeObject(dragObject)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,53 +1,50 @@
|
|||||||
import { obx, computed } from '@recore/obx';
|
import { obx, computed } from '@recore/obx';
|
||||||
import { ProjectSchema } from './schema';
|
import { ProjectSchema, RootSchema } from './schema';
|
||||||
import { EventEmitter } from 'events';
|
import { EventEmitter } from 'events';
|
||||||
import Designer from './designer';
|
import Designer from './designer';
|
||||||
import DocumentModel from './document/document-model';
|
import DocumentModel, { isDocumentModel } from './document/document-model';
|
||||||
|
|
||||||
export default class Project {
|
export default class Project {
|
||||||
private emitter = new EventEmitter();
|
private emitter = new EventEmitter();
|
||||||
@obx.val readonly documents: DocumentModel[] = [];
|
@obx.val readonly documents: DocumentModel[] = [];
|
||||||
private data: ProjectSchema = {};
|
|
||||||
|
private data: ProjectSchema;
|
||||||
|
|
||||||
@obx.ref canvasDisplayMode: 'exclusive' | 'overview' = 'exclusive';
|
@obx.ref canvasDisplayMode: 'exclusive' | 'overview' = 'exclusive';
|
||||||
|
|
||||||
// 考虑项目级别 History
|
// TODO: 考虑项目级别 History
|
||||||
|
|
||||||
constructor(readonly designer: Designer, schema?: ProjectSchema) {
|
constructor(readonly designer: Designer, schema?: ProjectSchema) {
|
||||||
this.data = {
|
this.data = {
|
||||||
version: '1.0.0',
|
version: '1.0.0',
|
||||||
componentsMap: [],
|
componentsMap: [],
|
||||||
componentsTree: [],
|
componentsTree: [],
|
||||||
...schema
|
...schema,
|
||||||
};
|
};
|
||||||
|
this.open(this.data.componentsTree[0] || {
|
||||||
|
componentName: 'Page',
|
||||||
|
fileName: '',
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@computed get activedDocuments() {
|
@computed get activedDocuments() {
|
||||||
return this.documents.filter(doc => doc.actived);
|
return this.documents.filter(doc => doc.actived);
|
||||||
}
|
}
|
||||||
|
|
||||||
getDocument(fileName: string): DocumentContext {}
|
|
||||||
|
|
||||||
addDocument(data: DocumentSchema): DocumentContext {
|
|
||||||
this.documents.push(new DocumentContext(data));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取项目整体 schema
|
* 获取项目整体 schema
|
||||||
*/
|
*/
|
||||||
get schema(): ProjectSchema {
|
get schema(): ProjectSchema {
|
||||||
return {
|
return {
|
||||||
...this.data,
|
...this.data,
|
||||||
componentsTree: this.documents.map(doc => doc.getSchema()),
|
componentsTree: this.documents.map(doc => doc.schema),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 整体设置项目 schema
|
* 整体设置项目 schema
|
||||||
*/
|
*/
|
||||||
set schema(schema: ProjectSchema) {
|
set schema(schema: ProjectSchema) {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分字段设置储存数据,不记录操作记录
|
* 分字段设置储存数据,不记录操作记录
|
||||||
@ -80,17 +77,53 @@ export default class Project {
|
|||||||
| 'css'
|
| 'css'
|
||||||
| 'dataSource'
|
| 'dataSource'
|
||||||
| string,
|
| string,
|
||||||
): any;
|
): any {}
|
||||||
|
|
||||||
edit(document): void {}
|
open(doc: string | DocumentModel | RootSchema): void {
|
||||||
|
if (typeof doc === 'string') {
|
||||||
|
const got = this.documents.find(item => item.fileName === doc);
|
||||||
|
if (got) {
|
||||||
|
return got.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = this.data.componentsTree.find(data => data.fileName === doc);
|
||||||
|
if (data) {
|
||||||
|
doc = new DocumentModel(this, data);
|
||||||
|
this.documents.push(doc);
|
||||||
|
doc.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isDocumentModel(doc)) {
|
||||||
|
return doc.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
doc = new DocumentModel(this, doc);
|
||||||
|
this.documents.push(doc);
|
||||||
|
doc.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
checkExclusive(actived: DocumentModel) {
|
||||||
|
if (this.canvasDisplayMode !== 'exclusive') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.documents.forEach((doc) => {
|
||||||
|
if (doc !== actived) {
|
||||||
|
doc.suspense();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
closeOthers(opened: DocumentModel) {
|
||||||
|
this.documents.forEach((doc) => {
|
||||||
|
if (doc !== opened) {
|
||||||
|
doc.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* documents 列表发生变化
|
|
||||||
*/
|
|
||||||
onDocumentsChange(fn: (documents: DocumentContext[]) => void): () => void {}
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
// 通知标记删除,需要告知服务端
|
// 通知标记删除,需要告知服务端
|
||||||
// 项目角度编辑不是全量打开所有文档,是按需加载,哪个更新就通知更新谁,
|
// 项目角度编辑不是全量打开所有文档,是按需加载,哪个更新就通知更新谁,
|
||||||
// 哪个删除就
|
// 哪个删除就
|
||||||
|
|||||||
@ -1,111 +0,0 @@
|
|||||||
import { NpmInfo } from './schema';
|
|
||||||
import { ComponentClass as ReactComponentClass, Component as ReactComponent, ComponentType } from 'react';
|
|
||||||
import { LocateEvent, ISensor } from './dragon';
|
|
||||||
import { Point } from './location';
|
|
||||||
import Node from './document/node/node';
|
|
||||||
|
|
||||||
export interface SimulatorInterface<P = object> extends ISensor {
|
|
||||||
/**
|
|
||||||
* 获得边界维度等信息
|
|
||||||
*/
|
|
||||||
readonly bounds: object;
|
|
||||||
|
|
||||||
// dependsAsset // like react jQuery lodash
|
|
||||||
// themesAsset
|
|
||||||
// componentsAsset
|
|
||||||
// simulatorUrl //
|
|
||||||
// utils, dataSource, constants 模拟
|
|
||||||
//
|
|
||||||
// later:
|
|
||||||
// layout: ComponentName
|
|
||||||
// 获取区块代码, 通过 components 传递,可异步获取
|
|
||||||
setProps(props: P): void;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 设置编辑模式
|
|
||||||
*/
|
|
||||||
setDesignMode(mode: "live" | "design" | string): void;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 设置拖拽态
|
|
||||||
*/
|
|
||||||
setDraggingState(state: boolean): void;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 是否拖拽态
|
|
||||||
*/
|
|
||||||
isDraggingState(): boolean;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 设置拷贝态
|
|
||||||
*/
|
|
||||||
setCopyState(state: boolean): void;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 是否拷贝态
|
|
||||||
*/
|
|
||||||
isCopyState(): boolean;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 清除所有态:拖拽态、拷贝态
|
|
||||||
*/
|
|
||||||
clearState(): void;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 在模拟器拖拽定位
|
|
||||||
*/
|
|
||||||
locate(e: LocateEvent): any;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 滚动视口到节点
|
|
||||||
*/
|
|
||||||
scrollToNode(node: Node, detail?: any): void;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 给 event 打补丁,添加 canvasX, globalX 等信息,用于拖拽
|
|
||||||
*/
|
|
||||||
fixEvent(e: LocateEvent): LocateEvent;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 全局坐标系转化为本地坐标系
|
|
||||||
*/
|
|
||||||
toLocalPoint(point: Point): Point;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 本地坐标系转化为全局坐标系
|
|
||||||
*/
|
|
||||||
toGlobalPoint(point: Point): Point;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据组件信息获取组件类
|
|
||||||
*/
|
|
||||||
getComponent(componentName: string): Component | any;
|
|
||||||
/**
|
|
||||||
* 根据节点获取节点的组件实例
|
|
||||||
*/
|
|
||||||
getComponentInstance(node: Node): ComponentInstance[] | null;
|
|
||||||
/**
|
|
||||||
* 根据节点获取节点的组件运行上下文
|
|
||||||
*/
|
|
||||||
getComponentContext(node: Node): object;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 设置挂起
|
|
||||||
*/
|
|
||||||
setSuspense(suspended: boolean): void;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 销毁
|
|
||||||
*/
|
|
||||||
purge(): void;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 组件类定义
|
|
||||||
*/
|
|
||||||
export type Component = ComponentType<any> | object;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 组件实例定义
|
|
||||||
*/
|
|
||||||
export type ComponentInstance = Element | ReactComponent<any> | object;
|
|
||||||
Loading…
x
Reference in New Issue
Block a user