in packages/engine/src/inner-plugins/builtin-hotkey.ts [163:221]
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 };
}
if (!ref && focusNode && targetNode.contains(focusNode)) {
if (document.checkNesting(focusNode, dragNodeObject)) {
return { container: focusNode };
}
return null;
}
if (targetNode.isRootNode && targetNode.children) {
const dropElement = targetNode.children.filter((c) => {
if (!c.isContainerNode) {
return false;
}
if (document.checkNesting(c, dragNodeObject)) {
return true;
}
return false;
})[0];
if (dropElement) {
return { container: dropElement, ref };
}
if (document.checkNesting(targetNode, dragNodeObject)) {
return { container: targetNode, ref };
}
return null;
}
if (targetNode.isContainerNode) {
if (document.checkNesting(targetNode, dragNodeObject)) {
return { container: targetNode, ref };
}
}
if (targetNode.parent) {
return getSuitablePlaceForNode(targetNode.parent, node, { index: targetNode.index });
}
return null;
}