From a5a92ec8b17ef930a640b80fe13fb006eada7e48 Mon Sep 17 00:00:00 2001 From: Alex Grozav Date: Thu, 5 Sep 2024 08:03:19 +0300 Subject: [PATCH] feat(editor): Add support for nodes with multiple main inputs in new canvas (no-changelog) (#10659) --- .../render-types/CanvasNodeDefault.spec.ts | 40 +++++++++++++++++++ .../nodes/render-types/CanvasNodeDefault.vue | 10 ++++- .../CanvasNodeDefault.spec.ts.snap | 10 ++--- 3 files changed, 53 insertions(+), 7 deletions(-) diff --git a/packages/editor-ui/src/components/canvas/elements/nodes/render-types/CanvasNodeDefault.spec.ts b/packages/editor-ui/src/components/canvas/elements/nodes/render-types/CanvasNodeDefault.spec.ts index d276e660f..084597e4d 100644 --- a/packages/editor-ui/src/components/canvas/elements/nodes/render-types/CanvasNodeDefault.spec.ts +++ b/packages/editor-ui/src/components/canvas/elements/nodes/render-types/CanvasNodeDefault.spec.ts @@ -26,6 +26,46 @@ describe('CanvasNodeDefault', () => { expect(getByTestId('canvas-default-node')).toMatchSnapshot(); }); + describe('inputs', () => { + it('should adjust height css variable based on the number of inputs (1 input)', () => { + const { getByText } = renderComponent({ + global: { + provide: { + ...createCanvasNodeProvide({ + data: { + inputs: [{ type: NodeConnectionType.Main, index: 0 }], + }, + }), + }, + }, + }); + + const nodeElement = getByText('Test Node').closest('.node'); + expect(nodeElement).toHaveStyle({ '--canvas-node--main-input-count': '1' }); // height calculation based on the number of inputs + }); + + it('should adjust height css variable based on the number of inputs (multiple inputs)', () => { + const { getByText } = renderComponent({ + global: { + provide: { + ...createCanvasNodeProvide({ + data: { + inputs: [ + { type: NodeConnectionType.Main, index: 0 }, + { type: NodeConnectionType.Main, index: 0 }, + { type: NodeConnectionType.Main, index: 0 }, + ], + }, + }), + }, + }, + }); + + const nodeElement = getByText('Test Node').closest('.node'); + expect(nodeElement).toHaveStyle({ '--canvas-node--main-input-count': '3' }); // height calculation based on the number of inputs + }); + }); + describe('outputs', () => { it('should adjust height css variable based on the number of outputs (1 output)', () => { const { getByText } = renderComponent({ diff --git a/packages/editor-ui/src/components/canvas/elements/nodes/render-types/CanvasNodeDefault.vue b/packages/editor-ui/src/components/canvas/elements/nodes/render-types/CanvasNodeDefault.vue index 2bbb2421d..35ed5bfc0 100644 --- a/packages/editor-ui/src/components/canvas/elements/nodes/render-types/CanvasNodeDefault.vue +++ b/packages/editor-ui/src/components/canvas/elements/nodes/render-types/CanvasNodeDefault.vue @@ -30,7 +30,7 @@ const { hasIssues, render, } = useCanvasNode(); -const { mainOutputs, nonMainInputs, requiredNonMainInputs } = useNodeConnections({ +const { mainOutputs, mainInputs, nonMainInputs, requiredNonMainInputs } = useNodeConnections({ inputs, outputs, connections, @@ -67,6 +67,7 @@ const styles = computed(() => { stylesObject['--configurable-node--input-count'] = nonMainInputs.value.length + spacerCount; } + stylesObject['--canvas-node--main-input-count'] = mainInputs.value.length; stylesObject['--canvas-node--main-output-count'] = mainOutputs.value.length; return stylesObject; @@ -115,7 +116,12 @@ function openContextMenu(event: MouseEvent) {