Skip to content

Commit 7970b1e

Browse files
committed
修复子组件在组合内层级向上移动时,逻辑错误的问题
1 parent 6a0446b commit 7970b1e

File tree

2 files changed

+18
-13
lines changed

2 files changed

+18
-13
lines changed

src/modules/elements/ElementGroup.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export default class ElementGroup extends Element implements IElementGroup {
3838

3939
get firstDeeoSub(): IElement {
4040
let result = this.firstSub;
41-
while (result.isGroup) {
41+
while (result && result.isGroup) {
4242
result = (result as IElementGroup).firstSub;
4343
}
4444
return result;

src/modules/stage/StageStore.ts

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ export default class StageStore implements IStageStore {
631631
tree.unshift(treeNode);
632632
this._treeNodesMap.set(id, treeNode);
633633
if (isGroup) {
634-
const subTreeNodes = this._preserveGroupSubs(node, []);
634+
const subTreeNodes = this._findGroupSubs(node, []);
635635
treeNode.children = subTreeNodes;
636636
}
637637
}
@@ -675,7 +675,7 @@ export default class StageStore implements IStageStore {
675675
result.push(treeNode);
676676
this._treeNodesMap.set(prevId, treeNode);
677677
if (prevIsGroup) {
678-
this._preserveGroupSubs(prevNode, treeNode.children);
678+
this._findGroupSubs(prevNode, treeNode.children);
679679
}
680680
findedSubs.add(prevId);
681681
}
@@ -724,7 +724,7 @@ export default class StageStore implements IStageStore {
724724
result.push(treeNode);
725725
this._treeNodesMap.set(nextId, treeNode);
726726
if (nextIsGroup) {
727-
this._preserveGroupSubs(nextNode, treeNode.children);
727+
this._findGroupSubs(nextNode, treeNode.children);
728728
}
729729
}
730730
findedSubs.add(nextId);
@@ -744,7 +744,7 @@ export default class StageStore implements IStageStore {
744744
* @param result
745745
* @returns
746746
*/
747-
private _preserveGroupSubs(node: ILinkedNode<IElement>, result: ElementTreeNode[]): ElementTreeNode[] {
747+
private _findGroupSubs(node: ILinkedNode<IElement>, result: ElementTreeNode[]): ElementTreeNode[] {
748748
const {
749749
value: {
750750
isGroup,
@@ -2865,15 +2865,20 @@ export default class StageStore implements IStageStore {
28652865
// 判断是否是组合内部子组件移动排序
28662866
if (isGroupInternal) {
28672867
const subIds = group.subIds;
2868-
// 因为多个子组件在组合内部是不连续的,且tailNode可能是组合中最后一个子组件,所以,需要倒序查找第一个不在给定子组件集合中的子组件作为插入目标节点
2869-
for (let i = subIds.length - 1; i >= 0; i--) {
2870-
const targetIndex = elementIds.findIndex(id => id === subIds[i]);
2871-
if (targetIndex === -1) {
2872-
const targetId = subIds[i];
2873-
targetNode = this._elementsMap.get(targetId)?.node;
2874-
groupSubIds = LodashUtils.moveArrayElementsAfter(subIds, elementIds, targetId);
2875-
break;
2868+
const isTailInGroup = subIds[subIds.length - 1] === tailNode.value.id;
2869+
if (isTailInGroup) {
2870+
// 因为多个子组件在组合内部是不连续的,且tailNode可能是组合中最后一个子组件,所以,需要倒序查找第一个不在给定子组件集合中的子组件作为插入目标节点
2871+
for (let i = subIds.length - 1; i >= 0; i--) {
2872+
const targetIndex = elementIds.findIndex(id => id === subIds[i]);
2873+
if (targetIndex === -1) {
2874+
const targetId = subIds[i];
2875+
targetNode = this._elementsMap.get(targetId)?.node;
2876+
groupSubIds = LodashUtils.moveArrayElementsAfter(subIds, elementIds, targetId);
2877+
break;
2878+
}
28762879
}
2880+
} else {
2881+
groupSubIds = LodashUtils.moveArrayElementsAfter(subIds, elementIds, targetNode.value.id);
28772882
}
28782883
// 如果要插入的目标节点是当前组合,表示数据出现异常,终止节点移动
28792884
if (targetNode && targetNode.value === group) {

0 commit comments

Comments
 (0)