diff --git a/packages/core/src/execution-engine/__tests__/workflow-execute.test.ts b/packages/core/src/execution-engine/__tests__/workflow-execute.test.ts index 8021724a46..3958d5a7e6 100644 --- a/packages/core/src/execution-engine/__tests__/workflow-execute.test.ts +++ b/packages/core/src/execution-engine/__tests__/workflow-execute.test.ts @@ -1965,7 +1965,7 @@ describe('WorkflowExecute', () => { test('should return true when node has no input connections', () => { workflow.nodes = {}; - workflow.connectionsByDestinationNode = {}; + workflow.setConnections({}); const hasInputData = workflowExecute.ensureInputData(workflow, node, executionData); @@ -1978,11 +1978,11 @@ describe('WorkflowExecute', () => { [parentNode.name]: parentNode, }; - workflow.connectionsByDestinationNode = { - [node.name]: { - main: [[{ node: parentNode.name, type: NodeConnectionTypes.Main, index: 0 }]], + workflow.setConnections({ + [parentNode.name]: { + main: [[{ node: node.name, type: NodeConnectionTypes.Main, index: 0 }]], }, - }; + }); const hasInputData = workflowExecute.ensureInputData(workflow, node, executionData); @@ -1996,11 +1996,11 @@ describe('WorkflowExecute', () => { [parentNode.name]: parentNode, }; - workflow.connectionsByDestinationNode = { - [node.name]: { - main: [[{ node: parentNode.name, type: NodeConnectionTypes.Main, index: 0 }]], + workflow.setConnections({ + [parentNode.name]: { + main: [[{ node: node.name, type: NodeConnectionTypes.Main, index: 0 }]], }, - }; + }); executionData.data = { main: [[{ json: { test: 'data' } }]] }; @@ -2015,11 +2015,11 @@ describe('WorkflowExecute', () => { [parentNode.name]: parentNode, }; - workflow.connectionsByDestinationNode = { - [node.name]: { - main: [[{ node: parentNode.name, type: NodeConnectionTypes.Main, index: 0 }]], + workflow.setConnections({ + [parentNode.name]: { + main: [[{ node: node.name, type: NodeConnectionTypes.Main, index: 0 }]], }, - }; + }); executionData.data = { main: [null] }; diff --git a/packages/frontend/editor-ui/src/components/AskAssistant/Agent/AskAssistantBuild.test.ts b/packages/frontend/editor-ui/src/components/AskAssistant/Agent/AskAssistantBuild.test.ts index 07deadce09..b37a493d5c 100644 --- a/packages/frontend/editor-ui/src/components/AskAssistant/Agent/AskAssistantBuild.test.ts +++ b/packages/frontend/editor-ui/src/components/AskAssistant/Agent/AskAssistantBuild.test.ts @@ -55,7 +55,6 @@ vi.mock('vue-router', () => { vi.mock('@/composables/useWorkflowSaving', () => ({ useWorkflowSaving: vi.fn().mockReturnValue({ - getCurrentWorkflow: vi.fn(), saveCurrentWorkflow: vi.fn(), getWorkflowDataToSave: vi.fn(), setDocumentTitle: vi.fn(), diff --git a/packages/frontend/editor-ui/src/components/ButtonParameter/ButtonParameter.test.ts b/packages/frontend/editor-ui/src/components/ButtonParameter/ButtonParameter.test.ts index ea87551c9e..536a309d67 100644 --- a/packages/frontend/editor-ui/src/components/ButtonParameter/ButtonParameter.test.ts +++ b/packages/frontend/editor-ui/src/components/ButtonParameter/ButtonParameter.test.ts @@ -58,9 +58,9 @@ describe('ButtonParameter', () => { } as any); vi.mocked(useWorkflowsStore).mockReturnValue({ - getCurrentWorkflow: vi.fn().mockReturnValue({ + workflowObject: { getParentNodesByDepth: vi.fn().mockReturnValue([]), - }), + }, getNodeByName: vi.fn().mockReturnValue({}), } as any); diff --git a/packages/frontend/editor-ui/src/components/ButtonParameter/utils.ts b/packages/frontend/editor-ui/src/components/ButtonParameter/utils.ts index c10624e499..4264a901e4 100644 --- a/packages/frontend/editor-ui/src/components/ButtonParameter/utils.ts +++ b/packages/frontend/editor-ui/src/components/ButtonParameter/utils.ts @@ -19,12 +19,11 @@ export type TextareaRowData = { export function getParentNodes() { const activeNode = useNDVStore().activeNode; - const { getCurrentWorkflow, getNodeByName } = useWorkflowsStore(); - const workflow = getCurrentWorkflow(); + const { workflowObject, getNodeByName } = useWorkflowsStore(); - if (!activeNode || !workflow) return []; + if (!activeNode || !workflowObject) return []; - return workflow + return workflowObject .getParentNodesByDepth(activeNode?.name) .filter(({ name }, i, nodes) => { return name !== activeNode.name && nodes.findIndex((node) => node.name === name) === i; diff --git a/packages/frontend/editor-ui/src/components/CodeNodeEditor/AskAI/AskAI.vue b/packages/frontend/editor-ui/src/components/CodeNodeEditor/AskAI/AskAI.vue index d2f81498fd..48b49abd91 100644 --- a/packages/frontend/editor-ui/src/components/CodeNodeEditor/AskAI/AskAI.vue +++ b/packages/frontend/editor-ui/src/components/CodeNodeEditor/AskAI/AskAI.vue @@ -91,12 +91,11 @@ function getErrorMessageByStatusCode(statusCode: number, message: string | undef function getParentNodes() { const activeNode = useNDVStore().activeNode; - const { getCurrentWorkflow, getNodeByName } = useWorkflowsStore(); - const workflow = getCurrentWorkflow(); + const { workflowObject, getNodeByName } = useWorkflowsStore(); - if (!activeNode || !workflow) return []; + if (!activeNode || !workflowObject) return []; - return workflow + return workflowObject .getParentNodesByDepth(activeNode?.name) .filter(({ name }, i, nodes) => { return name !== activeNode.name && nodes.findIndex((node) => node.name === name) === i; diff --git a/packages/frontend/editor-ui/src/components/CodeNodeEditor/types.ts b/packages/frontend/editor-ui/src/components/CodeNodeEditor/types.ts index 7403a52e7d..638ebc8844 100644 --- a/packages/frontend/editor-ui/src/components/CodeNodeEditor/types.ts +++ b/packages/frontend/editor-ui/src/components/CodeNodeEditor/types.ts @@ -1,15 +1,3 @@ -import type { EditorView } from '@codemirror/view'; -import type { Workflow, CodeExecutionMode, CodeNodeEditorLanguage } from 'n8n-workflow'; import type { Node } from 'estree'; -import type { DefineComponent } from 'vue'; - -export type CodeNodeEditorMixin = InstanceType< - DefineComponent & { - editor: EditorView | null; - mode: CodeExecutionMode; - language: CodeNodeEditorLanguage; - getCurrentWorkflow(): Workflow; - } ->; export type RangeNode = Node & { range: [number, number] }; diff --git a/packages/frontend/editor-ui/src/components/ExpressionEditModal.vue b/packages/frontend/editor-ui/src/components/ExpressionEditModal.vue index 6202314b05..7530453541 100644 --- a/packages/frontend/editor-ui/src/components/ExpressionEditModal.vue +++ b/packages/frontend/editor-ui/src/components/ExpressionEditModal.vue @@ -66,12 +66,11 @@ const expressionResultRef = ref>(); const theme = outputTheme(); const activeNode = computed(() => ndvStore.activeNode); -const workflow = computed(() => workflowsStore.getCurrentWorkflow()); const inputEditor = computed(() => expressionInputRef.value?.editor); const parentNodes = computed(() => { const node = activeNode.value; if (!node) return []; - const nodes = workflow.value.getParentNodesByDepth(node.name); + const nodes = workflowsStore.workflowObject.getParentNodesByDepth(node.name); return nodes.filter(({ name }) => name !== node.name); }); diff --git a/packages/frontend/editor-ui/src/components/FocusPanel.vue b/packages/frontend/editor-ui/src/components/FocusPanel.vue index 3ac7df0b5e..c2fbb53d57 100644 --- a/packages/frontend/editor-ui/src/components/FocusPanel.vue +++ b/packages/frontend/editor-ui/src/components/FocusPanel.vue @@ -120,9 +120,7 @@ const { workflowRunData } = useExecutionData({ node }); const hasNodeRun = computed(() => { if (!node.value) return true; - const parentNode = workflowsStore - .getCurrentWorkflow() - .getParentNodes(node.value.name, 'main', 1)[0]; + const parentNode = workflowsStore.workflowObject.getParentNodes(node.value.name, 'main', 1)[0]; return Boolean( parentNode && workflowRunData.value && diff --git a/packages/frontend/editor-ui/src/components/FromAiParametersModal.test.ts b/packages/frontend/editor-ui/src/components/FromAiParametersModal.test.ts index 1c102c3425..38ea55652f 100644 --- a/packages/frontend/editor-ui/src/components/FromAiParametersModal.test.ts +++ b/packages/frontend/editor-ui/src/components/FromAiParametersModal.test.ts @@ -7,9 +7,12 @@ import userEvent from '@testing-library/user-event'; import { useWorkflowsStore } from '@/stores/workflows.store'; import { useAgentRequestStore } from '@n8n/stores/useAgentRequestStore'; import { useRouter } from 'vue-router'; +import type { Workflow } from 'n8n-workflow'; import { NodeConnectionTypes } from 'n8n-workflow'; import { useNodeTypesStore } from '@/stores/nodeTypes.store'; import { nextTick } from 'vue'; +import { mock } from 'vitest-mock-extended'; +import { createTestWorkflow } from '@/__tests__/mocks'; const ModalStub = { template: ` @@ -63,10 +66,14 @@ const mockRunData = { }, }; -const mockWorkflow = { +const mockWorkflow = createTestWorkflow({ id: 'test-workflow', +}); + +const mockWorkflowObject = mock({ + id: mockWorkflow.id, getChildNodes: () => ['Parent Node'], -}; +}); const mockTools = [ { @@ -106,6 +113,7 @@ describe('FromAiParametersModal', () => { }, [STORES.WORKFLOWS]: { workflow: mockWorkflow, + workflowObject: mockWorkflowObject, workflowExecutionData: mockRunData, }, }, @@ -121,7 +129,6 @@ describe('FromAiParametersModal', () => { return mockParentNode; } }); - workflowsStore.getCurrentWorkflow = vi.fn().mockReturnValue(mockWorkflow); agentRequestStore = useAgentRequestStore(); agentRequestStore.clearAgentRequests = vi.fn(); agentRequestStore.setAgentRequestForNode = vi.fn(); diff --git a/packages/frontend/editor-ui/src/components/FromAiParametersModal.vue b/packages/frontend/editor-ui/src/components/FromAiParametersModal.vue index 5ab4d1f3dc..4362043df1 100644 --- a/packages/frontend/editor-ui/src/components/FromAiParametersModal.vue +++ b/packages/frontend/editor-ui/src/components/FromAiParametersModal.vue @@ -45,8 +45,7 @@ const node = computed(() => const parentNode = computed(() => { if (!node.value) return undefined; - const workflow = workflowsStore.getCurrentWorkflow(); - const parentNodes = workflow.getChildNodes(node.value.name, 'ALL', 1); + const parentNodes = workflowsStore.workflowObject.getChildNodes(node.value.name, 'ALL', 1); if (parentNodes.length === 0) return undefined; return workflowsStore.getNodeByName(parentNodes[0])?.name; }); diff --git a/packages/frontend/editor-ui/src/components/InputPanel.test.ts b/packages/frontend/editor-ui/src/components/InputPanel.test.ts index a409192952..991530887e 100644 --- a/packages/frontend/editor-ui/src/components/InputPanel.test.ts +++ b/packages/frontend/editor-ui/src/components/InputPanel.test.ts @@ -97,7 +97,7 @@ const render = (props: Partial = {}, pinData?: INodeExecutionData[], runD runIndex: 0, currentNodeName: nodes[0].name, activeNodeName: nodes[1].name, - workflow: workflowObject, + workflowObject, displayMode: 'schema', focusedMappableInput: '', isMappingOnboarded: false, diff --git a/packages/frontend/editor-ui/src/components/InputPanel.vue b/packages/frontend/editor-ui/src/components/InputPanel.vue index 0537b60047..fa5b545747 100644 --- a/packages/frontend/editor-ui/src/components/InputPanel.vue +++ b/packages/frontend/editor-ui/src/components/InputPanel.vue @@ -35,7 +35,7 @@ type MappingMode = 'debugging' | 'mapping'; export type Props = { runIndex: number; - workflow: Workflow; + workflowObject: Workflow; pushRef: string; activeNodeName: string; currentNodeName?: string; @@ -103,7 +103,7 @@ const activeNode = computed(() => workflowsStore.getNodeByName(props.activeNodeN const rootNode = computed(() => { if (!activeNode.value) return null; - return props.workflow.getChildNodes(activeNode.value.name, 'ALL').at(0) ?? null; + return props.workflowObject.getChildNodes(activeNode.value.name, 'ALL').at(0) ?? null; }); const hasRootNodeRun = computed(() => { @@ -134,12 +134,12 @@ const isActiveNodeConfig = computed(() => { let inputs = activeNodeType.value?.inputs ?? []; let outputs = activeNodeType.value?.outputs ?? []; - if (props.workflow && activeNode.value) { - const node = props.workflow.getNode(activeNode.value.name); + if (props.workflowObject && activeNode.value) { + const node = props.workflowObject.getNode(activeNode.value.name); if (node && activeNodeType.value) { - inputs = NodeHelpers.getNodeInputs(props.workflow, node, activeNodeType.value); - outputs = NodeHelpers.getNodeOutputs(props.workflow, node, activeNodeType.value); + inputs = NodeHelpers.getNodeInputs(props.workflowObject, node, activeNodeType.value); + outputs = NodeHelpers.getNodeOutputs(props.workflowObject, node, activeNodeType.value); } } @@ -192,7 +192,7 @@ const isExecutingPrevious = computed(() => { const rootNodesParents = computed(() => { if (!rootNode.value) return []; - return props.workflow.getParentNodesByDepth(rootNode.value); + return props.workflowObject.getParentNodesByDepth(rootNode.value); }); const currentNode = computed(() => { @@ -219,7 +219,7 @@ const parentNodes = computed(() => { return []; } - const parents = props.workflow + const parents = props.workflowObject .getParentNodesByDepth(activeNode.value.name) .filter((parent) => parent.name !== activeNode.value?.name); return uniqBy(parents, (parent) => parent.name); @@ -376,7 +376,7 @@ function handleChangeCollapsingColumn(columnName: string | null) { :class="[$style.runData, { [$style.runDataV2]: isNDVV2 }]" :node="currentNode" :nodes="isMappingMode ? rootNodesParents : parentNodes" - :workflow="workflow" + :workflow-object="workflowObject" :run-index="isMappingMode ? 0 : runIndex" :linked-runs="linkedRuns" :can-link-runs="!mappedNode && canLinkRuns" @@ -430,7 +430,7 @@ function handleChangeCollapsingColumn(columnName: string | null) { @@ -444,7 +444,7 @@ function handleChangeCollapsingColumn(columnName: string | null) {
diff --git a/packages/frontend/editor-ui/src/components/NDVFloatingNodes.vue b/packages/frontend/editor-ui/src/components/NDVFloatingNodes.vue index 3981377d8c..5ea850a257 100644 --- a/packages/frontend/editor-ui/src/components/NDVFloatingNodes.vue +++ b/packages/frontend/editor-ui/src/components/NDVFloatingNodes.vue @@ -76,18 +76,18 @@ function getINodesFromNames(names: string[]): NodeConfig[] { const connectedNodes = computed< Record> >(() => { - const workflow = workflowsStore.getCurrentWorkflow(); + const workflowObject = workflowsStore.workflowObject; const rootName = props.rootNode.name; return { [FloatingNodePosition.top]: getINodesFromNames( - workflow.getChildNodes(rootName, 'ALL_NON_MAIN'), + workflowObject.getChildNodes(rootName, 'ALL_NON_MAIN'), ), [FloatingNodePosition.right]: getINodesFromNames( - workflow.getChildNodes(rootName, NodeConnectionTypes.Main, 1), + workflowObject.getChildNodes(rootName, NodeConnectionTypes.Main, 1), ).reverse(), [FloatingNodePosition.left]: getINodesFromNames( - workflow.getParentNodes(rootName, NodeConnectionTypes.Main, 1), + workflowObject.getParentNodes(rootName, NodeConnectionTypes.Main, 1), ).reverse(), }; }); diff --git a/packages/frontend/editor-ui/src/components/NDVSubConnections.test.ts b/packages/frontend/editor-ui/src/components/NDVSubConnections.test.ts index 4688c5ecf4..81ec9fbba2 100644 --- a/packages/frontend/editor-ui/src/components/NDVSubConnections.test.ts +++ b/packages/frontend/editor-ui/src/components/NDVSubConnections.test.ts @@ -69,7 +69,7 @@ vi.mock('@/stores/nodeTypes.store', () => ({ vi.mock('@/stores/workflows.store', () => ({ useWorkflowsStore: vi.fn(() => ({ - getCurrentWorkflow: vi.fn(() => new Workflow(mockWorkflowData)), + workflowObject: new Workflow(mockWorkflowData), getNodeByName: mockGetNodeByName, })), })); diff --git a/packages/frontend/editor-ui/src/components/NDVSubConnections.vue b/packages/frontend/editor-ui/src/components/NDVSubConnections.vue index 383ee83fd9..fb4b8203af 100644 --- a/packages/frontend/editor-ui/src/components/NDVSubConnections.vue +++ b/packages/frontend/editor-ui/src/components/NDVSubConnections.vue @@ -11,6 +11,7 @@ import type { NodeConnectionType, INodeInputConfiguration, INodeTypeDescription, + Workflow, } from 'n8n-workflow'; import { useDebounce } from '@/composables/useDebounce'; import { OnClickOutside } from '@vueuse/components'; @@ -59,10 +60,11 @@ const nodeType = computed(() => const nodeData = computed(() => workflowsStore.getNodeByName(props.rootNode.name)); const ndvStore = useNDVStore(); -const workflow = computed(() => workflowsStore.getCurrentWorkflow()); + +const workflowObject = computed(() => workflowsStore.workflowObject as Workflow); const nodeInputIssues = computed(() => { - const issues = nodeHelpers.getNodeIssues(nodeType.value, props.rootNode, workflow.value, [ + const issues = nodeHelpers.getNodeIssues(nodeType.value, props.rootNode, workflowObject.value, [ 'typeUnknown', 'parameters', 'credentials', @@ -82,7 +84,8 @@ const connectedNodes = computed>(() => { // Get input-index-specific connections using the per-type index const nodeConnections = - workflow.value.connectionsByDestinationNode[props.rootNode.name]?.[connection.type] ?? []; + workflowObject.value.connectionsByDestinationNode[props.rootNode.name]?.[connection.type] ?? + []; const inputConnections = nodeConnections[typeIndex] ?? []; const nodeNames = inputConnections.map((conn) => conn.node); const nodes = getINodesFromNames(nodeNames); @@ -159,7 +162,7 @@ function getINodesFromNames(names: string[]): NodeConfig[] { if (node) { const matchedNodeType = nodeTypesStore.getNodeType(node.type); if (matchedNodeType) { - const issues = nodeHelpers.getNodeIssues(matchedNodeType, node, workflow.value); + const issues = nodeHelpers.getNodeIssues(matchedNodeType, node, workflowObject.value); const stringifiedIssues = issues ? nodeHelpers.nodeIssuesToString(issues, node) : ''; return { node, nodeType: matchedNodeType, issues: stringifiedIssues }; } @@ -187,7 +190,7 @@ function isNodeInputConfiguration( function getPossibleSubInputConnections(): INodeInputConfiguration[] { if (!nodeType.value || !props.rootNode) return []; - const inputs = NodeHelpers.getNodeInputs(workflow.value, props.rootNode, nodeType.value); + const inputs = NodeHelpers.getNodeInputs(workflowObject.value, props.rootNode, nodeType.value); const nonMainInputs = inputs.filter((input): input is INodeInputConfiguration => { if (!isNodeInputConfiguration(input)) return false; diff --git a/packages/frontend/editor-ui/src/components/NodeDetailsView.test.ts b/packages/frontend/editor-ui/src/components/NodeDetailsView.test.ts index a5d13a464a..48a1feb8a5 100644 --- a/packages/frontend/editor-ui/src/components/NodeDetailsView.test.ts +++ b/packages/frontend/editor-ui/src/components/NodeDetailsView.test.ts @@ -1,10 +1,8 @@ import { createPinia, setActivePinia } from 'pinia'; -import { waitFor, waitForElementToBeRemoved, fireEvent } from '@testing-library/vue'; -import { mock } from 'vitest-mock-extended'; +import { waitFor, fireEvent } from '@testing-library/vue'; import NodeDetailsView from '@/components/NodeDetailsView.vue'; import { VIEWS } from '@/constants'; -import type { IWorkflowDb } from '@/Interface'; import { useSettingsStore } from '@/stores/settings.store'; import { useUsersStore } from '@/stores/users.store'; import { useNDVStore } from '@/stores/ndv.store'; @@ -13,7 +11,12 @@ import { useWorkflowsStore } from '@/stores/workflows.store'; import { createComponentRenderer } from '@/__tests__/render'; import { setupServer } from '@/__tests__/server'; -import { defaultNodeDescriptions, mockNodes } from '@/__tests__/mocks'; +import { + createTestWorkflow, + createTestWorkflowObject, + defaultNodeDescriptions, + mockNodes, +} from '@/__tests__/mocks'; import { cleanupAppModals, createAppModals } from '@/__tests__/utils'; vi.mock('vue-router', () => { @@ -26,7 +29,7 @@ vi.mock('vue-router', () => { async function createPiniaStore(isActiveNode: boolean) { const node = mockNodes[0]; - const workflow = mock({ + const workflow = createTestWorkflow({ connections: {}, active: true, nodes: [node], @@ -41,6 +44,7 @@ async function createPiniaStore(isActiveNode: boolean) { nodeTypesStore.setNodeTypes(defaultNodeDescriptions); workflowsStore.workflow = workflow; + workflowsStore.workflowObject = createTestWorkflowObject(workflow); workflowsStore.nodeMetadata[node.name] = { pristine: true }; if (isActiveNode) { @@ -52,7 +56,7 @@ async function createPiniaStore(isActiveNode: boolean) { return { pinia, - currentWorkflow: workflowsStore.getCurrentWorkflow(), + workflowObject: workflowsStore.workflowObject, nodeName: node.name, }; } @@ -78,13 +82,13 @@ describe('NodeDetailsView', () => { }); it('should render correctly', async () => { - const { pinia, currentWorkflow } = await createPiniaStore(true); + const { pinia, workflowObject } = await createPiniaStore(true); const renderComponent = createComponentRenderer(NodeDetailsView, { props: { teleported: false, appendToBody: false, - workflowObject: currentWorkflow, + workflowObject, }, global: { mocks: { @@ -104,14 +108,13 @@ describe('NodeDetailsView', () => { describe('keyboard listener', () => { test('should register and unregister keydown listener based on modal open state', async () => { - const { pinia, currentWorkflow, nodeName } = await createPiniaStore(false); - const ndvStore = useNDVStore(); + const { pinia, workflowObject } = await createPiniaStore(true); const renderComponent = createComponentRenderer(NodeDetailsView, { props: { teleported: false, appendToBody: false, - workflowObject: currentWorkflow, + workflowObject, }, global: { mocks: { @@ -122,15 +125,13 @@ describe('NodeDetailsView', () => { }, }); - const { getByTestId, queryByTestId } = renderComponent({ + const { getByTestId, queryByTestId, unmount } = renderComponent({ pinia, }); const addEventListenerSpy = vi.spyOn(document, 'addEventListener'); const removeEventListenerSpy = vi.spyOn(document, 'removeEventListener'); - ndvStore.activeNodeName = nodeName; - await waitFor(() => expect(getByTestId('ndv')).toBeInTheDocument()); await waitFor(() => expect(queryByTestId('ndv-modal')).toBeInTheDocument()); @@ -141,9 +142,7 @@ describe('NodeDetailsView', () => { true, ); - ndvStore.activeNodeName = null; - - await waitForElementToBeRemoved(queryByTestId('ndv-modal')); + unmount(); expect(removeEventListenerSpy).toHaveBeenCalledWith('keydown', expect.any(Function), true); @@ -152,14 +151,14 @@ describe('NodeDetailsView', () => { }); test('should unregister keydown listener on unmount', async () => { - const { pinia, currentWorkflow, nodeName } = await createPiniaStore(false); + const { pinia, workflowObject, nodeName } = await createPiniaStore(false); const ndvStore = useNDVStore(); const renderComponent = createComponentRenderer(NodeDetailsView, { props: { teleported: false, appendToBody: false, - workflowObject: currentWorkflow, + workflowObject, }, global: { mocks: { @@ -194,14 +193,13 @@ describe('NodeDetailsView', () => { }); test("should emit 'saveKeyboardShortcut' when save shortcut keybind is pressed", async () => { - const { pinia, currentWorkflow, nodeName } = await createPiniaStore(false); - const ndvStore = useNDVStore(); + const { pinia, workflowObject } = await createPiniaStore(true); const renderComponent = createComponentRenderer(NodeDetailsView, { props: { teleported: false, appendToBody: false, - workflowObject: currentWorkflow, + workflowObject, }, global: { mocks: { @@ -216,8 +214,6 @@ describe('NodeDetailsView', () => { pinia, }); - ndvStore.activeNodeName = nodeName; - await waitFor(() => expect(getByTestId('ndv')).toBeInTheDocument()); await waitFor(() => expect(queryByTestId('ndv-modal')).toBeInTheDocument()); diff --git a/packages/frontend/editor-ui/src/components/NodeDetailsView.vue b/packages/frontend/editor-ui/src/components/NodeDetailsView.vue index fed95d455b..ad8755adb2 100644 --- a/packages/frontend/editor-ui/src/components/NodeDetailsView.vue +++ b/packages/frontend/editor-ui/src/components/NodeDetailsView.vue @@ -756,7 +756,7 @@ onBeforeUnmount(() => { /> {