mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-16 06:42:53 +00:00
refactor: remove dependency of nodeSymbol
This commit is contained in:
parent
1b74e71353
commit
67a5e724fd
@ -160,7 +160,7 @@ sidebar_position: 1
|
|||||||
|
|
||||||
`@type {IPublicModelComponentMeta | null}`
|
`@type {IPublicModelComponentMeta | null}`
|
||||||
|
|
||||||
相关类型:[IPublicTypeIconType](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/model/component-meta.ts)
|
相关类型:[IPublicModelComponentMeta](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/model/component-meta.ts)
|
||||||
|
|
||||||
|
|
||||||
### document
|
### document
|
||||||
@ -644,4 +644,4 @@ isConditionalVisible(): boolean | undefined;
|
|||||||
setConditionalVisible(): void;
|
setConditionalVisible(): void;
|
||||||
```
|
```
|
||||||
|
|
||||||
**@since v1.1.0**
|
**@since v1.1.0**
|
||||||
|
|||||||
@ -1149,7 +1149,7 @@ export class Node<Schema extends IPublicTypeNodeSchema = IPublicTypeNodeSchema>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: replace non standard metas with standard ones.
|
* @deprecated no one is using this, will be removed in a future release
|
||||||
*/
|
*/
|
||||||
getSuitablePlace(node: INode, ref: any): any {
|
getSuitablePlace(node: INode, ref: any): any {
|
||||||
const focusNode = this.document?.focusNode;
|
const focusNode = this.document?.focusNode;
|
||||||
|
|||||||
@ -9,9 +9,6 @@ import {
|
|||||||
IPublicEnumDragObjectType,
|
IPublicEnumDragObjectType,
|
||||||
IPublicTypeDragNodeObject,
|
IPublicTypeDragNodeObject,
|
||||||
} from '@alilc/lowcode-types';
|
} from '@alilc/lowcode-types';
|
||||||
import symbols from '../modules/symbols';
|
|
||||||
|
|
||||||
const { nodeSymbol } = symbols;
|
|
||||||
|
|
||||||
function insertChild(
|
function insertChild(
|
||||||
container: IPublicModelNode,
|
container: IPublicModelNode,
|
||||||
@ -163,6 +160,67 @@ function getPrevForSelect(prev: IPublicModelNode | null, head?: any, parent?: IP
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getSuitablePlaceForNode(targetNode: IPublicModelNode, node: IPublicModelNode, ref: any): any {
|
||||||
|
const { document } = targetNode;
|
||||||
|
if (!document) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const dragNodeObject: IPublicTypeDragNodeObject = {
|
||||||
|
type: IPublicEnumDragObjectType.Node,
|
||||||
|
nodes: [node],
|
||||||
|
};
|
||||||
|
|
||||||
|
const focusNode = document?.focusNode;
|
||||||
|
// 如果节点是模态框,插入到根节点下
|
||||||
|
if (node?.componentMeta?.isModal) {
|
||||||
|
return { container: focusNode, ref };
|
||||||
|
}
|
||||||
|
const canDropInFn = document.checkNesting;
|
||||||
|
|
||||||
|
if (!ref && focusNode && targetNode.contains(focusNode)) {
|
||||||
|
if (canDropInFn(focusNode, dragNodeObject)) {
|
||||||
|
return { container: focusNode };
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetNode.isRootNode && targetNode.children) {
|
||||||
|
const dropElement = targetNode.children.filter((c) => {
|
||||||
|
if (!c.isContainerNode) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (canDropInFn(c, dragNodeObject)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
})[0];
|
||||||
|
|
||||||
|
if (dropElement) {
|
||||||
|
return { container: dropElement, ref };
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canDropInFn(targetNode, dragNodeObject)) {
|
||||||
|
return { container: targetNode, ref };
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetNode.isContainerNode) {
|
||||||
|
if (canDropInFn(targetNode, dragNodeObject)) {
|
||||||
|
return { container: targetNode, ref };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetNode.parent) {
|
||||||
|
return getSuitablePlaceForNode(targetNode.parent, node, { index: targetNode.index });
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
// 注册默认的 setters
|
// 注册默认的 setters
|
||||||
export const builtinHotkey = (ctx: IPublicModelPluginContext) => {
|
export const builtinHotkey = (ctx: IPublicModelPluginContext) => {
|
||||||
return {
|
return {
|
||||||
@ -426,14 +484,14 @@ export const builtinHotkey = (ctx: IPublicModelPluginContext) => {
|
|||||||
const silbing = firstNode.prevSibling;
|
const silbing = firstNode.prevSibling;
|
||||||
if (silbing) {
|
if (silbing) {
|
||||||
if (silbing.isContainerNode) {
|
if (silbing.isContainerNode) {
|
||||||
const place = (silbing as any)[nodeSymbol].getSuitablePlace(firstNode, null);
|
const place = getSuitablePlaceForNode(silbing, firstNode, null);
|
||||||
silbing.insertAfter(firstNode, place.ref, true);
|
silbing.insertAfter(firstNode, place.ref, true);
|
||||||
} else {
|
} else {
|
||||||
parent.insertBefore(firstNode, silbing, true);
|
parent.insertBefore(firstNode, silbing, true);
|
||||||
}
|
}
|
||||||
firstNode?.select();
|
firstNode?.select();
|
||||||
} else {
|
} else {
|
||||||
const place = (parent as any)[nodeSymbol].getSuitablePlace(firstNode, null); // upwards
|
const place = getSuitablePlaceForNode(parent, firstNode, null); // upwards
|
||||||
if (place) {
|
if (place) {
|
||||||
const container = place.container.internalToShellNode();
|
const container = place.container.internalToShellNode();
|
||||||
container.insertBefore(firstNode, place.ref);
|
container.insertBefore(firstNode, place.ref);
|
||||||
@ -474,7 +532,7 @@ export const builtinHotkey = (ctx: IPublicModelPluginContext) => {
|
|||||||
}
|
}
|
||||||
firstNode?.select();
|
firstNode?.select();
|
||||||
} else {
|
} else {
|
||||||
const place = (parent as any)[nodeSymbol].getSuitablePlace(firstNode, null); // upwards
|
const place = getSuitablePlaceForNode(parent, firstNode, null); // upwards
|
||||||
if (place) {
|
if (place) {
|
||||||
const container = place.container.internalToShellNode();
|
const container = place.container.internalToShellNode();
|
||||||
container.insertAfter(firstNode, place.ref, true);
|
container.insertAfter(firstNode, place.ref, true);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user