From 31c456700a0458019d65fe7bde8aa4715344362b Mon Sep 17 00:00:00 2001 From: Alex Grozav Date: Tue, 25 Jun 2024 12:11:44 +0300 Subject: [PATCH] feat(editor): Compute node position and connections when creating new nodes in new canvas (no-changelog) (#9830) --- packages/editor-ui/src/__tests__/mocks.ts | 70 +- .../src/components/canvas/Canvas.vue | 33 +- .../src/components/canvas/WorkflowCanvas.vue | 4 + .../canvas/elements/nodes/CanvasNode.vue | 10 +- .../global/GlobalExecutionsListItem.test.ts | 2 +- .../__tests__/useCanvasOperations.spec.ts | 302 ++++- .../src/composables/useCanvasMouseSelect.ts | 7 +- .../src/composables/useCanvasOperations.ts | 708 +++++++++- packages/editor-ui/src/constants.ts | 1 + .../editor-ui/src/stores/nodeCreator.store.ts | 75 +- .../editor-ui/src/stores/workflows.store.ts | 28 + .../src/utils/__tests__/canvasUtilsV2.spec.ts | 30 + packages/editor-ui/src/utils/canvasUtilsV2.ts | 12 + packages/editor-ui/src/views/NodeView.v2.vue | 1202 +++++++---------- packages/editor-ui/src/views/NodeView.vue | 2 + 15 files changed, 1628 insertions(+), 858 deletions(-) diff --git a/packages/editor-ui/src/__tests__/mocks.ts b/packages/editor-ui/src/__tests__/mocks.ts index d8916bbc6..620d5aefe 100644 --- a/packages/editor-ui/src/__tests__/mocks.ts +++ b/packages/editor-ui/src/__tests__/mocks.ts @@ -24,39 +24,65 @@ import { SET_NODE_TYPE, } from '@/constants'; -const mockNode = (name: string, type: string, props: Partial = {}) => - mock({ name, type, ...props }); +export const mockNode = ({ + id = uuid(), + name, + type, + position = [0, 0], +}: { + id?: INode['id']; + name: INode['name']; + type: INode['type']; + position?: INode['position']; +}) => mock({ id, name, type, position }); -const mockLoadedClass = (name: string) => +export const mockNodeTypeDescription = ({ + name, + version = 1, + credentials = [], +}: { + name: INodeTypeDescription['name']; + version?: INodeTypeDescription['version']; + credentials?: INodeTypeDescription['credentials']; +}) => + mock({ + name, + displayName: name, + version, + defaults: { + name, + }, + defaultVersion: Array.isArray(version) ? version[version.length - 1] : version, + properties: [], + maxNodes: Infinity, + group: EXECUTABLE_TRIGGER_NODE_TYPES.includes(name) ? ['trigger'] : [], + inputs: ['main'], + outputs: ['main'], + credentials, + documentationUrl: 'https://docs', + webhooks: undefined, + }); + +export const mockLoadedNodeType = (name: string) => mock>({ type: mock({ // @ts-expect-error - description: mock({ - name, - displayName: name, - version: 1, - properties: [], - group: EXECUTABLE_TRIGGER_NODE_TYPES.includes(name) ? ['trigger'] : [], - inputs: ['main'], - outputs: ['main'], - documentationUrl: 'https://docs', - webhooks: undefined, - }), + description: mockNodeTypeDescription({ name }), }), }); export const mockNodes = [ - mockNode('Manual Trigger', MANUAL_TRIGGER_NODE_TYPE), - mockNode('Set', SET_NODE_TYPE), - mockNode('Code', CODE_NODE_TYPE), - mockNode('Rename', SET_NODE_TYPE), - mockNode('Chat Trigger', CHAT_TRIGGER_NODE_TYPE), - mockNode('Agent', AGENT_NODE_TYPE), - mockNode('End', NO_OP_NODE_TYPE), + mockNode({ name: 'Manual Trigger', type: MANUAL_TRIGGER_NODE_TYPE }), + mockNode({ name: 'Set', type: SET_NODE_TYPE }), + mockNode({ name: 'Code', type: CODE_NODE_TYPE }), + mockNode({ name: 'Rename', type: SET_NODE_TYPE }), + mockNode({ name: 'Chat Trigger', type: CHAT_TRIGGER_NODE_TYPE }), + mockNode({ name: 'Agent', type: AGENT_NODE_TYPE }), + mockNode({ name: 'End', type: NO_OP_NODE_TYPE }), ]; export const defaultNodeTypes = mockNodes.reduce((acc, { type }) => { - acc[type] = mockLoadedClass(type); + acc[type] = mockLoadedNodeType(type); return acc; }, {}); diff --git a/packages/editor-ui/src/components/canvas/Canvas.vue b/packages/editor-ui/src/components/canvas/Canvas.vue index 0adea73ad..1b6568ee0 100644 --- a/packages/editor-ui/src/components/canvas/Canvas.vue +++ b/packages/editor-ui/src/components/canvas/Canvas.vue @@ -1,6 +1,6 @@