diff --git a/packages/editor-bricks-helper/src/interfaces.ts b/packages/editor-bricks-helper/src/interfaces.ts index 5c1fe6e22b..e1d20fd239 100644 --- a/packages/editor-bricks-helper/src/interfaces.ts +++ b/packages/editor-bricks-helper/src/interfaces.ts @@ -161,6 +161,7 @@ export interface EventDetailOfNodeReorder { nodeUids: number[]; parentUid: number; nodeIds: string[]; + objectId?: string; } export interface EventDetailOfNodeDragStart { diff --git a/packages/editor-bricks-helper/src/internal/BuilderDataManager.spec.ts b/packages/editor-bricks-helper/src/internal/BuilderDataManager.spec.ts index 548114cb24..19e3ec6938 100644 --- a/packages/editor-bricks-helper/src/internal/BuilderDataManager.spec.ts +++ b/packages/editor-bricks-helper/src/internal/BuilderDataManager.spec.ts @@ -1567,6 +1567,7 @@ describe("move node or mount point", () => { nodeIds: ["B-003", "B-002", "B-004", "B-005", "B-006"], nodeUids: [4, 3, 5, 6, 7], parentUid: 2, + objectId: "STORYBOARD_BRICK", }); }); @@ -1592,6 +1593,7 @@ describe("move node or mount point", () => { nodeIds: ["B-002", "B-004", "B-003", "B-005", "B-006"], nodeUids: [3, 5, 4, 6, 7], parentUid: 2, + objectId: "STORYBOARD_BRICK", }); }); @@ -1637,6 +1639,7 @@ describe("move node or mount point", () => { nodeIds: ["B-002", "B-004", "B-003", "B-005", "B-006"], nodeUids: [3, 5, 4, 6, 7], parentUid: 2, + objectId: "STORYBOARD_BRICK", }); }); @@ -1662,6 +1665,7 @@ describe("move node or mount point", () => { nodeIds: ["B-003", "B-002", "B-004", "B-005", "B-006"], nodeUids: [4, 3, 5, 6, 7], parentUid: 2, + objectId: "STORYBOARD_BRICK", }); }); @@ -1707,6 +1711,7 @@ describe("move node or mount point", () => { nodeIds: ["B-005", "B-006", "B-002", "B-003", "B-004"], nodeUids: [6, 7, 3, 4, 5], parentUid: 2, + objectId: "STORYBOARD_BRICK", }); }); @@ -1752,6 +1757,7 @@ describe("move node or mount point", () => { nodeIds: ["B-005", "B-006", "B-002", "B-003", "B-004"], nodeUids: [6, 7, 3, 4, 5], parentUid: 2, + objectId: "STORYBOARD_BRICK", }); }); @@ -2113,10 +2119,14 @@ describe("BuilderDataManager for route of routes with wrapper", () => { manager.workbenchTreeNodeMove(node); expect(mockOnWorkbenchTreeNodeMove).toBeCalled(); expect(mockOnWorkbenchTreeNodeMove.mock.calls[0][0].detail).toEqual({ + nodeData: { + mountPoint: "", + parent: "abc", + }, nodeIds: ["B-003", "B-007", "B-005"], nodeInstanceId: "brick-b", nodeUid: 5, - objectId: undefined, + objectId: "STORYBOARD_BRICK", }); const node2: WorkbenchTreeNodeMoveProps = { @@ -2131,7 +2141,7 @@ describe("BuilderDataManager for route of routes with wrapper", () => { nodeIds: ["B-008", "B-003"], nodeInstanceId: "brick-b", nodeUid: 5, - objectId: undefined, + objectId: "STORYBOARD_BRICK", }); }); diff --git a/packages/editor-bricks-helper/src/internal/BuilderDataManager.ts b/packages/editor-bricks-helper/src/internal/BuilderDataManager.ts index bb5a637242..be16922a53 100644 --- a/packages/editor-bricks-helper/src/internal/BuilderDataManager.ts +++ b/packages/editor-bricks-helper/src/internal/BuilderDataManager.ts @@ -37,6 +37,7 @@ import { expandTemplateEdges } from "./expandTemplateEdges"; import { getAppendingNodesAndEdges } from "./getAppendingNodesAndEdges"; import { isParentExpandableTemplate } from "./isParentExpandableTemplate"; import { getSnippetNodeDetail } from "../DropZone/getSnippetNodeDetail"; +import { getObjectIdByNode } from "./getObjectIdByNode"; enum BuilderInternalEventType { NODE_ADD = "builder.node.add", @@ -482,6 +483,11 @@ export class BuilderDataManager { (edge) => orderedSiblingEdges.indexOf(edge) ); this.reorder(parentUid, orderedEdges); + this.eventTarget.dispatchEvent( + new CustomEvent(BuilderInternalEventType.NODE_UPDATE, { + detail: this.data, + }) + ); } private getDragInfo({ @@ -666,9 +672,8 @@ export class BuilderDataManager { const { rootId, nodes, edges, wrapperNode } = this.data; const { dragNodeUid, dragOverNodeUid, dragStatus } = detail; const nodeData = nodes.find((item) => item.$$uid === dragNodeUid); - const originParentUid = edges.find( - (edge) => edge.child === nodeData.$$uid - ).parent; + const originEdge = edges.find((edge) => edge.child === nodeData.$$uid); + const originParentUid = originEdge.parent; const originParentNode = nodes.find( (node) => node.$$uid === originParentUid ); @@ -716,7 +721,8 @@ export class BuilderDataManager { nodeUid: dragNodeUid, nodeInstanceId: nodeData.instanceId, nodeIds, - ...(originParentNode.instanceId !== parnetNodeData.instanceId + ...(originParentNode.instanceId !== parnetNodeData.instanceId || + originEdge.mountPoint !== mountPoint ? { nodeData: { parent: parnetNodeData.instanceId, @@ -724,11 +730,16 @@ export class BuilderDataManager { }, } : {}), - objectId: nodeData["_object_id"] as string, + objectId: getObjectIdByNode(nodeData), }, } ) ); + this.eventTarget.dispatchEvent( + new CustomEvent(BuilderInternalEventType.NODE_UPDATE, { + detail: this.data, + }) + ); } /** @@ -775,6 +786,9 @@ export class BuilderDataManager { nodeUids: childUids, parentUid, nodeIds: childIds, + objectId: getObjectIdByNode( + nodes.find((node) => node.$$uid === parentUid) + ), }, } ) diff --git a/packages/editor-bricks-helper/src/internal/getObjectIdByNode.spec.ts b/packages/editor-bricks-helper/src/internal/getObjectIdByNode.spec.ts new file mode 100644 index 0000000000..caf5ee8fe9 --- /dev/null +++ b/packages/editor-bricks-helper/src/internal/getObjectIdByNode.spec.ts @@ -0,0 +1,51 @@ +import { BuilderRuntimeNode } from "../interfaces"; +import { getObjectIdByNode } from "./getObjectIdByNode"; + +describe("getObjectIdByNode", () => { + it.each<[BuilderRuntimeNode, string]>([ + [ + { + type: "brick", + } as BuilderRuntimeNode, + "STORYBOARD_BRICK", + ], + [ + { + type: "provider", + } as BuilderRuntimeNode, + "STORYBOARD_BRICK", + ], + [ + { + type: "template", + } as BuilderRuntimeNode, + "STORYBOARD_BRICK", + ], + [ + { + type: "routes", + } as BuilderRuntimeNode, + "STORYBOARD_ROUTE", + ], + [ + { + type: "bricks", + } as BuilderRuntimeNode, + "STORYBOARD_ROUTE", + ], + [ + { + type: "redirect", + } as BuilderRuntimeNode, + "STORYBOARD_ROUTE", + ], + [ + { + type: "custom-template", + } as BuilderRuntimeNode, + "STORYBOARD_TEMPLATE", + ], + ])("should work", (node, result) => { + expect(getObjectIdByNode(node)).toEqual(result); + }); +}); diff --git a/packages/editor-bricks-helper/src/internal/getObjectIdByNode.ts b/packages/editor-bricks-helper/src/internal/getObjectIdByNode.ts new file mode 100644 index 0000000000..86e0b8efe3 --- /dev/null +++ b/packages/editor-bricks-helper/src/internal/getObjectIdByNode.ts @@ -0,0 +1,14 @@ +import { BuilderRuntimeNode } from "../interfaces"; +import { + isRouteNode, + isBrickNode, + isCustomTemplateNode, + isSnippetNode, +} from "@next-core/brick-utils"; + +export const getObjectIdByNode = (node: BuilderRuntimeNode): string => { + if (isRouteNode(node)) return "STORYBOARD_ROUTE"; + if (isBrickNode(node)) return "STORYBOARD_BRICK"; + if (isCustomTemplateNode(node)) return "STORYBOARD_TEMPLATE"; + if (isSnippetNode(node)) return "STORYBOARD_SNIPPET"; +};