feat: add APIs for plugin-outline-pane which will be splitted in near future

This commit is contained in:
liujuping 2022-10-27 19:53:21 +08:00 committed by LeoYuan 袁力皓
parent e1153c9aae
commit 66f6918a69
14 changed files with 127 additions and 15 deletions

View File

@ -7,6 +7,10 @@ const DETECTING_CHANGE_EVENT = 'detectingChange';
export class Detecting { export class Detecting {
@obx.ref private _enable = true; @obx.ref private _enable = true;
/**
* hover
* TODO: 将该逻辑从设计器中抽离出来
*/
get enable() { get enable() {
return this._enable; return this._enable;
} }

View File

@ -8,3 +8,4 @@ export * from './location';
export * from './offset-observer'; export * from './offset-observer';
export * from './scroller'; export * from './scroller';
export * from './setting'; export * from './setting';
export * from './active-tracker';

View File

@ -5,11 +5,18 @@ import {
TransformStage, TransformStage,
LiveEditing, LiveEditing,
isDragNodeDataObject, isDragNodeDataObject,
isDragNodeObject,
isDragAnyObject,
DragObjectType, DragObjectType,
isNode, isNode,
isShaken,
contains,
LocationDetailType,
isLocationChildrenDetail,
ScrollTarget,
} from '@alilc/lowcode-designer'; } from '@alilc/lowcode-designer';
import { Editor } from '@alilc/lowcode-editor-core'; import { Editor } from '@alilc/lowcode-editor-core';
import { Dragon } from '@alilc/lowcode-shell'; import { designerCabinSymbol, Dragon } from '@alilc/lowcode-shell';
export default function getDesignerCabin(editor: Editor) { export default function getDesignerCabin(editor: Editor) {
const designer = editor.get('designer') as Designer; const designer = editor.get('designer') as Designer;
@ -23,5 +30,21 @@ export default function getDesignerCabin(editor: Editor) {
DragObjectType, DragObjectType,
isDragNodeDataObject, isDragNodeDataObject,
isNode, isNode,
[designerCabinSymbol]: {
isDragNodeObject,
isDragAnyObject,
isShaken,
contains,
LocationDetailType,
isLocationChildrenDetail,
ScrollTarget,
isSettingField,
TransformStage,
SettingField,
LiveEditing,
DragObjectType,
isDragNodeDataObject,
isNode,
},
}; };
} }

View File

@ -8,6 +8,7 @@ import {
editorSymbol, editorSymbol,
settingPropEntrySymbol, settingPropEntrySymbol,
settingTopEntrySymbol, settingTopEntrySymbol,
designerCabinSymbol,
} from '@alilc/lowcode-shell'; } from '@alilc/lowcode-shell';
export default { export default {
@ -20,4 +21,5 @@ export default {
designerSymbol, designerSymbol,
settingPropEntrySymbol, settingPropEntrySymbol,
settingTopEntrySymbol, settingTopEntrySymbol,
designerCabinSymbol,
}; };

View File

@ -1,6 +1,6 @@
import { isFormEvent, compatibleLegaoSchema, getNodeSchemaById } from '@alilc/lowcode-utils'; import { isFormEvent, compatibleLegaoSchema, getNodeSchemaById } from '@alilc/lowcode-utils';
import { isNodeSchema } from '@alilc/lowcode-types'; import { isNodeSchema } from '@alilc/lowcode-types';
import { getConvertedExtraKey, getOriginalExtraKey } from '@alilc/lowcode-designer'; import { getConvertedExtraKey, getOriginalExtraKey, isNode, isSettingField } from '@alilc/lowcode-designer';
const utils = { const utils = {
isNodeSchema, isNodeSchema,

View File

@ -1,6 +1,6 @@
import { Component, MouseEvent as ReactMouseEvent } from 'react'; import { Component, MouseEvent as ReactMouseEvent } from 'react';
import { observer, Editor, globalContext } from '@alilc/lowcode-editor-core'; import { observer, Editor, globalContext } from '@alilc/lowcode-editor-core';
import { isRootNode, Node, DragObjectType, isShaken } from '@alilc/lowcode-designer'; import { Node, DragObjectType, isShaken } from '@alilc/lowcode-designer';
import { isFormEvent, canClickNode } from '@alilc/lowcode-utils'; import { isFormEvent, canClickNode } from '@alilc/lowcode-utils';
import { Tree } from '../tree'; import { Tree } from '../tree';
import RootTreeNodeView from './root-tree-node'; import RootTreeNodeView from './root-tree-node';

View File

@ -1,3 +1,4 @@
import Node from './node';
import { import {
Detecting as InnerDetecting, Detecting as InnerDetecting,
DocumentModel as InnerDocumentModel, DocumentModel as InnerDocumentModel,
@ -13,6 +14,13 @@ export default class Detecting {
this[detectingSymbol] = document.designer.detecting; this[detectingSymbol] = document.designer.detecting;
} }
/**
* hover
*/
get current() {
return Node.create(this[detectingSymbol].current);
}
/** /**
* hover * hover
* @param id id * @param id id

View File

@ -2,15 +2,15 @@ import { Editor } from '@alilc/lowcode-editor-core';
import { import {
DocumentModel as InnerDocumentModel, DocumentModel as InnerDocumentModel,
Node as InnerNode, Node as InnerNode,
ParentalNode,
IOnChangeOptions as InnerIOnChangeOptions, IOnChangeOptions as InnerIOnChangeOptions,
PropChangeOptions as InnerPropChangeOptions, DragObject as InnerDragObject,
DragNodeObject,
DragNodeDataObject,
isDragNodeObject,
} from '@alilc/lowcode-designer'; } from '@alilc/lowcode-designer';
import { import {
TransformStage, TransformStage,
RootSchema, RootSchema,
NodeSchema,
NodeData,
GlobalEvent, GlobalEvent,
} from '@alilc/lowcode-types'; } from '@alilc/lowcode-types';
import Node from './node'; import Node from './node';
@ -40,6 +40,8 @@ const Events = {
IMPORT_SCHEMA: 'shell.document.importSchema', IMPORT_SCHEMA: 'shell.document.importSchema',
}; };
const shellDocSymbol = Symbol('shellDocSymbol');
export default class DocumentModel { export default class DocumentModel {
private readonly [documentSymbol]: InnerDocumentModel; private readonly [documentSymbol]: InnerDocumentModel;
private readonly [editorSymbol]: Editor; private readonly [editorSymbol]: Editor;
@ -61,8 +63,13 @@ export default class DocumentModel {
} }
static create(document: InnerDocumentModel | undefined | null) { static create(document: InnerDocumentModel | undefined | null) {
if (document == undefined) return null; if (!document) return null;
return new DocumentModel(document); // @ts-ignore 直接返回已挂载的 shell doc 实例
if (document[shellDocSymbol]) return document[shellDocSymbol];
const shellDoc = new DocumentModel(document);
// @ts-ignore 直接返回已挂载的 shell doc 实例
document[shellDocSymbol] = shellDoc;
return shellDoc;
} }
/** /**
@ -200,6 +207,23 @@ export default class DocumentModel {
return this[documentSymbol].getComponentsMap(extraComps); return this[documentSymbol].getComponentsMap(extraComps);
} }
/**
*
* @param dropTarget
* @param dragObject
* @returns boolean
*/
checkNesting(dropTarget: Node, dragObject: DragNodeObject | DragNodeDataObject): boolean {
let innerDragObject: InnerDragObject = dragObject;
if (isDragNodeObject(dragObject)) {
innerDragObject.nodes = innerDragObject.nodes.map((node: Node) => (node[nodeSymbol] || node));
}
return this[documentSymbol].checkNesting(
(dropTarget[nodeSymbol] || dropTarget) as any,
innerDragObject as any,
);
}
/** /**
* document * document
*/ */

View File

@ -128,6 +128,13 @@ export default class Node {
return true; return true;
} }
/**
*
*/
get isLocked() {
return this[nodeSymbol].isLocked;
}
/** /**
* *
*/ */
@ -314,6 +321,14 @@ export default class Node {
return this[nodeSymbol].isConditionalVisible(); return this[nodeSymbol].isConditionalVisible();
} }
/**
*
* @param flag
*/
lock(flag?: boolean) {
this[nodeSymbol].lock(flag);
}
/** /**
* @deprecated use .props instead * @deprecated use .props instead
*/ */
@ -347,10 +362,11 @@ export default class Node {
* path * path
* props props * props props
* @param path a / a.b / a.0 * @param path a / a.b / a.0
* @param createIfNone
* @returns * @returns
*/ */
getExtraProp(path: string): Prop | null { getExtraProp(path: string, createIfNone?: boolean): Prop | null {
return Prop.create(this[nodeSymbol].getProp(getConvertedExtraKey(path))); return Prop.create(this[nodeSymbol].getExtraProp(path, createIfNone));
} }
/** /**
@ -460,4 +476,8 @@ export default class Node {
remove() { remove() {
this[nodeSymbol].remove(); this[nodeSymbol].remove();
} }
internalToShellNode() {
return this;
}
} }

View File

@ -4,18 +4,20 @@ import {
PropsReducer as PropsTransducer, PropsReducer as PropsTransducer,
TransformStage, TransformStage,
} from '@alilc/lowcode-designer'; } from '@alilc/lowcode-designer';
import { RootSchema, ProjectSchema } from '@alilc/lowcode-types'; import { RootSchema, ProjectSchema, IEditor } from '@alilc/lowcode-types';
import DocumentModel from './document-model'; import DocumentModel from './document-model';
import SimulatorHost from './simulator-host'; import SimulatorHost from './simulator-host';
import { projectSymbol, simulatorHostSymbol, simulatorRendererSymbol, documentSymbol } from './symbols'; import { editorSymbol, projectSymbol, simulatorHostSymbol, simulatorRendererSymbol, documentSymbol } from './symbols';
export default class Project { export default class Project {
private readonly [projectSymbol]: InnerProject; private readonly [projectSymbol]: InnerProject;
private readonly [editorSymbol]: IEditor;
private [simulatorHostSymbol]: BuiltinSimulatorHost; private [simulatorHostSymbol]: BuiltinSimulatorHost;
private [simulatorRendererSymbol]: any; private [simulatorRendererSymbol]: any;
constructor(project: InnerProject) { constructor(project: InnerProject) {
this[projectSymbol] = project; this[projectSymbol] = project;
this[editorSymbol] = project?.designer.editor;
} }
static create(project: InnerProject) { static create(project: InnerProject) {
@ -132,6 +134,15 @@ export default class Project {
this[projectSymbol].designer.addPropsReducer(transducer, stage); this[projectSymbol].designer.addPropsReducer(transducer, stage);
} }
/**
*
* @param fn
* @returns
*/
onRemoveDocument(fn: (data: { id: string}) => void) {
return this[editorSymbol].on('designer.document.remove', (data: { id: string }) => fn(data));
}
/** /**
* project document * project document
*/ */

View File

@ -71,6 +71,13 @@ export default class Prop {
return this[propSymbol].getValue(); return this[propSymbol].getValue();
} }
/**
*
*/
remove() {
this[propSymbol].remove();
}
/** /**
* *
* @param stage * @param stage

View File

@ -84,4 +84,15 @@ export default class Selection {
getNodes(): Node[] { getNodes(): Node[] {
return this[selectionSymbol].getNodes().map((node: InnerNode) => Node.create(node)); return this[selectionSymbol].getNodes().map((node: InnerNode) => Node.create(node));
} }
/**
*
* for example:
* getNodes() returns [A, subA, B], then
* getTopNodes() will return [A, B], subA will be removed
* @returns
*/
getTopNodes(): Node[] {
return this[selectionSymbol].getTopNodes().map((node: InnerNode) => Node.create(node));
}
} }

View File

@ -23,4 +23,5 @@ export const dropLocationSymbol = Symbol('dropLocation');
export const simulatorHostSymbol = Symbol('simulatorHost'); export const simulatorHostSymbol = Symbol('simulatorHost');
export const simulatorRendererSymbol = Symbol('simulatorRenderer'); export const simulatorRendererSymbol = Symbol('simulatorRenderer');
export const dragObjectSymbol = Symbol('dragObject'); export const dragObjectSymbol = Symbol('dragObject');
export const locateEventSymbol = Symbol('locateEvent'); export const locateEventSymbol = Symbol('locateEvent');
export const designerCabinSymbol = Symbol('designerCabin');

View File

@ -156,7 +156,7 @@ export interface Utils {
} }
export interface PluginProps { export interface PluginProps {
editor: IEditor; editor?: IEditor;
config: PluginConfig; config: PluginConfig;
[key: string]: any; [key: string]: any;
} }