Skip to content

Commit 1b74e71

Browse files
JackLianliujuping
authored andcommitted
refactor: remove dependency of documentSymbol
1 parent 093eeb9 commit 1b74e71

6 files changed

Lines changed: 48 additions & 36 deletions

File tree

packages/designer/src/component-meta.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ import {
1313
IPublicTypeMetadataTransducer,
1414
IPublicModelComponentMeta,
1515
} from '@alilc/lowcode-types';
16-
import { deprecate, isRegExp, isTitleConfig } from '@alilc/lowcode-utils';
16+
import { deprecate, isRegExp, isTitleConfig, isNode } from '@alilc/lowcode-utils';
1717
import { computed, createModuleEventBus, IEventBus } from '@alilc/lowcode-editor-core';
18-
import { isNode, Node, INode } from './document';
18+
import { Node, INode } from './document';
1919
import { Designer } from './designer';
2020
import {
2121
IconContainer,
@@ -161,6 +161,9 @@ export class ComponentMeta implements IComponentMeta {
161161
return this._acceptable!;
162162
}
163163

164+
// compatiable vision
165+
prototype?: any;
166+
164167
constructor(readonly designer: Designer, metadata: IPublicTypeComponentMetadata) {
165168
this.parseMetadata(metadata);
166169
}
@@ -347,8 +350,6 @@ export class ComponentMeta implements IComponentMeta {
347350
};
348351
}
349352

350-
// compatiable vision
351-
prototype?: any;
352353
}
353354

354355
export function isComponentMeta(obj: any): obj is ComponentMeta {
@@ -373,4 +374,3 @@ function preprocessMetadata(metadata: IPublicTypeComponentMetadata): IPublicType
373374
configure: {},
374375
};
375376
}
376-

packages/designer/src/document/document-model.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ import { IProject, Project } from '../project';
1717
import { ISimulatorHost } from '../simulator';
1818
import { ComponentMeta } from '../component-meta';
1919
import { IDropLocation, Designer, IHistory } from '../designer';
20-
import { Node, insertChildren, insertChild, isNode, RootNode, INode } from './node/node';
20+
import { Node, insertChildren, insertChild, RootNode, INode } from './node/node';
2121
import { Selection, ISelection } from './selection';
2222
import { History } from './history';
2323
import { IModalNodesManager, ModalNodesManager } from './node';
24-
import { uniqueId, isPlainObject, compatStage, isJSExpression, isDOMText, isNodeSchema, isDragNodeObject, isDragNodeDataObject } from '@alilc/lowcode-utils';
24+
import { uniqueId, isPlainObject, compatStage, isJSExpression, isDOMText, isNodeSchema, isDragNodeObject, isDragNodeDataObject, isNode } from '@alilc/lowcode-utils';
2525
import { EDITOR_EVENT } from '../types';
2626

2727
export type GetDataType<T, NodeType> = T extends undefined
@@ -32,7 +32,7 @@ export type GetDataType<T, NodeType> = T extends undefined
3232
: any
3333
: T;
3434

35-
export interface IDocumentModel extends Omit< IPublicModelDocumentModel, 'selection' > {
35+
export interface IDocumentModel extends Omit< IPublicModelDocumentModel, 'selection' | 'checkNesting' > {
3636

3737
readonly designer: Designer;
3838

@@ -59,6 +59,11 @@ export interface IDocumentModel extends Omit< IPublicModelDocumentModel, 'select
5959

6060
get rootNode(): INode | null;
6161

62+
checkNesting(
63+
dropTarget: INode,
64+
dragObject: IPublicTypeDragNodeObject | IPublicTypeNodeSchema | INode | IPublicTypeDragNodeDataObject,
65+
): boolean;
66+
6267
}
6368

6469
export class DocumentModel implements IDocumentModel {
@@ -569,7 +574,10 @@ export class DocumentModel implements IDocumentModel {
569574
this.rootNode = null;
570575
}
571576

572-
checkNesting(dropTarget: INode, dragObject: IPublicTypeDragNodeObject | IPublicTypeNodeSchema | Node | IPublicTypeDragNodeDataObject): boolean {
577+
checkNesting(
578+
dropTarget: INode,
579+
dragObject: IPublicTypeDragNodeObject | IPublicTypeNodeSchema | INode | IPublicTypeDragNodeDataObject,
580+
): boolean {
573581
let items: Array<Node | IPublicTypeNodeSchema>;
574582
if (isDragNodeDataObject(dragObject)) {
575583
items = Array.isArray(dragObject.data) ? dragObject.data : [dragObject.data];

packages/designer/src/document/node/node.ts

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
IPublicModelExclusiveGroup,
1717
IPublicEnumTransformStage,
1818
} from '@alilc/lowcode-types';
19-
import { compatStage, isDOMText, isJSExpression } from '@alilc/lowcode-utils';
19+
import { compatStage, isDOMText, isJSExpression, isNode } from '@alilc/lowcode-utils';
2020
import { SettingTopEntry } from '@alilc/lowcode-designer';
2121
import { Props, getConvertedExtraKey, IProps } from './props/props';
2222
import { DocumentModel, IDocumentModel } from '../document-model';
@@ -109,6 +109,8 @@ export interface INode extends IPublicModelNode {
109109
getExtraProp(key: string, createIfNone?: boolean): IProp | null;
110110

111111
replaceChild(node: INode, data: any): INode;
112+
113+
getSuitablePlace(node: INode, ref: any): any;
112114
}
113115

114116
/**
@@ -913,7 +915,7 @@ export class Node<Schema extends IPublicTypeNodeSchema = IPublicTypeNodeSchema>
913915
/**
914916
* 判断是否包含特定节点
915917
*/
916-
contains(node: Node): boolean {
918+
contains(node: INode): boolean {
917919
return contains(this, node);
918920
}
919921

@@ -1149,14 +1151,14 @@ export class Node<Schema extends IPublicTypeNodeSchema = IPublicTypeNodeSchema>
11491151
/**
11501152
* TODO: replace non standard metas with standard ones.
11511153
*/
1152-
getSuitablePlace(node: Node, ref: any): any {
1154+
getSuitablePlace(node: INode, ref: any): any {
11531155
const focusNode = this.document?.focusNode;
11541156
// 如果节点是模态框,插入到根节点下
11551157
if (node?.componentMeta?.isModal) {
11561158
return { container: focusNode, ref };
11571159
}
11581160

1159-
if (!ref && this.contains(focusNode)) {
1161+
if (!ref && focusNode && this.contains(focusNode)) {
11601162
const rootCanDropIn = focusNode.componentMeta?.prototype?.options?.canDropIn;
11611163
if (
11621164
rootCanDropIn === undefined ||
@@ -1171,7 +1173,7 @@ export class Node<Schema extends IPublicTypeNodeSchema = IPublicTypeNodeSchema>
11711173

11721174
if (this.isRoot() && this.children) {
11731175
const dropElement = this.children.filter((c) => {
1174-
if (!c.isContainer()) {
1176+
if (!c.isContainerNode) {
11751177
return false;
11761178
}
11771179
const canDropIn = c.componentMeta?.prototype?.options?.canDropIn;
@@ -1304,22 +1306,15 @@ export type PageNode = Node<IPublicTypePageSchema>;
13041306
export type ComponentNode = Node<IPublicTypeComponentSchema>;
13051307
export type RootNode = PageNode | ComponentNode;
13061308

1307-
/**
1308-
* @deprecated use same function from '@alilc/lowcode-utils' instead
1309-
*/
1310-
export function isNode(node: any): node is Node {
1311-
return node && node.isNode;
1312-
}
1313-
1314-
export function isRootNode(node: Node): node is RootNode {
1315-
return node && node.isRoot();
1309+
export function isRootNode(node: INode): node is INode {
1310+
return node && node.isRootNode;
13161311
}
13171312

1318-
export function isLowCodeComponent(node: Node): boolean {
1313+
export function isLowCodeComponent(node: INode): node is INode {
13191314
return node.componentMeta?.getMetadata().devMode === 'lowCode';
13201315
}
13211316

1322-
export function getZLevelTop(child: Node, zLevel: number): Node | null {
1317+
export function getZLevelTop(child: INode, zLevel: number): INode | null {
13231318
let l = child.zLevel;
13241319
if (l < zLevel || zLevel < 0) {
13251320
return null;
@@ -1340,12 +1335,12 @@ export function getZLevelTop(child: Node, zLevel: number): Node | null {
13401335
* @param node2 测试的被包含节点
13411336
* @returns 是否包含
13421337
*/
1343-
export function contains(node1: Node, node2: Node): boolean {
1338+
export function contains(node1: INode, node2: INode): boolean {
13441339
if (node1 === node2) {
13451340
return true;
13461341
}
13471342

1348-
if (!node1.isParental() || !node2.parent) {
1343+
if (!node1.isParentalNode || !node2.parent) {
13491344
return false;
13501345
}
13511346

@@ -1367,7 +1362,7 @@ export enum PositionNO {
13671362
BeforeOrAfter = 2,
13681363
TheSame = 0,
13691364
}
1370-
export function comparePosition(node1: Node, node2: Node): PositionNO {
1365+
export function comparePosition(node1: INode, node2: INode): PositionNO {
13711366
if (node1 === node2) {
13721367
return PositionNO.TheSame;
13731368
}

packages/designer/tests/document/node/node.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { DocumentModel } from '../../../src/document/document-model';
77
import {
88
isRootNode,
99
Node,
10-
isNode,
1110
comparePosition,
1211
contains,
1312
PositionNO,
@@ -23,6 +22,7 @@ import rootHeaderMetadata from '../../fixtures/component-metadata/root-header';
2322
import rootContentMetadata from '../../fixtures/component-metadata/root-content';
2423
import rootFooterMetadata from '../../fixtures/component-metadata/root-footer';
2524
import { shellModelFactory } from '../../../../engine/src/modules/shell-model-factory';
25+
import { isNode } from '@alilc/lowcode-utils';
2626

2727
describe('Node 方法测试', () => {
2828
let editor: Editor;

packages/engine/src/inner-plugins/builtin-hotkey.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import {
66
IPublicModelNode,
77
IPublicTypeNodeSchema,
88
IPublicTypeNodeData,
9+
IPublicEnumDragObjectType,
10+
IPublicTypeDragNodeObject,
911
} from '@alilc/lowcode-types';
1012
import symbols from '../modules/symbols';
1113

12-
const { nodeSymbol, documentSymbol } = symbols;
14+
const { nodeSymbol } = symbols;
1315

1416
function insertChild(
1517
container: IPublicModelNode,
@@ -265,10 +267,16 @@ export const builtinHotkey = (ctx: IPublicModelPluginContext) => {
265267
if (!target) {
266268
return;
267269
}
268-
let canAddComponentsTree = componentsTree.filter((i) => {
269-
return (doc as any)[documentSymbol].checkNestingUp(target, i);
270+
let canAddComponentsTree = componentsTree.filter((node: IPublicModelNode) => {
271+
const dragNodeObject: IPublicTypeDragNodeObject = {
272+
type: IPublicEnumDragObjectType.Node,
273+
nodes: [node],
274+
};
275+
return doc.checkNesting(target, dragNodeObject);
270276
});
271-
if (canAddComponentsTree.length === 0) return;
277+
if (canAddComponentsTree.length === 0) {
278+
return;
279+
}
272280
const nodes = insertChildren(target, canAddComponentsTree, index);
273281
if (nodes) {
274282
doc.selection.selectAll(nodes.map((o) => o.id));

packages/shell/src/model/document-model.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {
88
GlobalEvent,
99
IPublicModelDocumentModel,
1010
IPublicTypeOnChangeOptions,
11-
IPublicModelDragObject,
1211
IPublicTypeDragNodeObject,
1312
IPublicTypeDragNodeDataObject,
1413
IPublicModelNode,
@@ -227,9 +226,11 @@ export class DocumentModel implements IPublicModelDocumentModel {
227226
dropTarget: IPublicModelNode,
228227
dragObject: IPublicTypeDragNodeObject | IPublicTypeDragNodeDataObject,
229228
): boolean {
230-
let innerDragObject: IPublicModelDragObject = dragObject;
229+
let innerDragObject = dragObject;
231230
if (isDragNodeObject(dragObject)) {
232-
innerDragObject.nodes = innerDragObject.nodes.map((node: Node) => (node[nodeSymbol] || node));
231+
innerDragObject.nodes = innerDragObject.nodes?.map(
232+
(node: IPublicModelNode) => ((node as any)[nodeSymbol] || node),
233+
);
233234
}
234235
return this[documentSymbol].checkNesting(
235236
((dropTarget as any)[nodeSymbol] || dropTarget) as any,

0 commit comments

Comments
 (0)