diff --git a/packages/editor-ui/src/stores/workflows.ee.ts b/packages/editor-ui/src/stores/workflows.ee.ts index cbd33f072e..30bf43e87d 100644 --- a/packages/editor-ui/src/stores/workflows.ee.ts +++ b/packages/editor-ui/src/stores/workflows.ee.ts @@ -9,8 +9,6 @@ import {useSettingsStore} from "@/stores/settings"; import {defineStore} from "pinia"; import {useWorkflowsStore} from "@/stores/workflows"; -// @TODO Move to workflows store as part of workflows store refactoring -// export const useWorkflowsEEStore = defineStore(STORES.WORKFLOWS_EE, { state() { return {}; }, actions: { diff --git a/packages/editor-ui/src/stores/workflows.ts b/packages/editor-ui/src/stores/workflows.ts index b5c045cc17..351b9d48d2 100644 --- a/packages/editor-ui/src/stores/workflows.ts +++ b/packages/editor-ui/src/stores/workflows.ts @@ -1,4 +1,11 @@ -import { DEFAULT_NEW_WORKFLOW_NAME, DUPLICATE_POSTFFIX, MAX_WORKFLOW_NAME_LENGTH, PLACEHOLDER_EMPTY_WORKFLOW_ID, STORES } from "@/constants"; +import { + DEFAULT_NEW_WORKFLOW_NAME, + DUPLICATE_POSTFFIX, + EnterpriseEditionFeature, + MAX_WORKFLOW_NAME_LENGTH, + PLACEHOLDER_EMPTY_WORKFLOW_ID, + STORES, +} from "@/constants"; import { IExecutionResponse, IExecutionsCurrentSummaryExtended, @@ -13,34 +20,59 @@ import { IWorkflowsMap, WorkflowsState, } from "@/Interface"; -import { defineStore } from "pinia"; -import { IConnection, IConnections, IDataObject, INode, INodeConnections, INodeCredentials, INodeCredentialsDetails, INodeExecutionData, INodeIssueData, IPinData, IRunData, ITaskData, IWorkflowSettings } from 'n8n-workflow'; +import {defineStore} from "pinia"; +import { + IConnection, + IConnections, + IDataObject, + INode, + INodeConnections, + INodeCredentials, + INodeCredentialsDetails, + INodeExecutionData, + INodeIssueData, + IPinData, + IRunData, + ITaskData, + IWorkflowSettings, +} from 'n8n-workflow'; import Vue from "vue"; -import { useRootStore } from "./n8nRootStore"; -import { getActiveWorkflows, getCurrentExecutions, getFinishedExecutions, getNewWorkflow, getWorkflows } from "@/api/workflows"; -import { useUIStore } from "./ui"; -import { getPairedItemsMapping } from "@/pairedItemUtils"; -import { dataPinningEventBus } from "@/event-bus/data-pinning-event-bus"; -import { isJsonKeyObject } from "@/utils"; -import { stringSizeInBytes } from "@/components/helpers"; -import { useNDVStore } from "./ndv"; -import { useNodeTypesStore } from "./nodeTypes"; +import {useRootStore} from "./n8nRootStore"; +import { + getActiveWorkflows, + getCurrentExecutions, + getFinishedExecutions, + getNewWorkflow, + getWorkflows, +} from "@/api/workflows"; +import {useUIStore} from "./ui"; +import {getPairedItemsMapping} from "@/pairedItemUtils"; +import {dataPinningEventBus} from "@/event-bus/data-pinning-event-bus"; +import {isJsonKeyObject} from "@/utils"; +import {stringSizeInBytes} from "@/components/helpers"; +import {useNDVStore} from "./ndv"; +import {useNodeTypesStore} from "./nodeTypes"; +import {useWorkflowsEEStore} from "@/stores/workflows.ee"; +import {useUsersStore} from "@/stores/users"; +import {useSettingsStore} from "@/stores/settings"; + +const createEmptyWorkflow = (): IWorkflowDb => ({ + id: PLACEHOLDER_EMPTY_WORKFLOW_ID, + name: '', + active: false, + createdAt: -1, + updatedAt: -1, + connections: {}, + nodes: [], + settings: {}, + tags: [], + pinData: {}, + hash: '', +}); export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, { state: (): WorkflowsState => ({ - workflow: { - id: PLACEHOLDER_EMPTY_WORKFLOW_ID, - name: '', - active: false, - createdAt: -1, - updatedAt: -1, - connections: {}, - nodes: [], - settings: {}, - tags: [], - pinData: {}, - hash: '', - }, + workflow: createEmptyWorkflow(), activeWorkflows: [], activeExecutions: [], currentWorkflowExecutions: [], @@ -199,6 +231,8 @@ export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, { }, async getNewWorkflowData(name?: string): Promise { + const workflowsEEStore = useWorkflowsEEStore(); + let workflowData = { name: '', onboardingFlowEnabled: false, @@ -213,9 +247,21 @@ export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, { } this.setWorkflowName({ newName: workflowData.name, setStateDirty: false }); + return workflowData; }, + resetWorkflow() { + const usersStore = useUsersStore(); + const settingsStore = useSettingsStore(); + + this.workflow = createEmptyWorkflow(); + + if (settingsStore.isEnterpriseFeatureEnabled(EnterpriseEditionFeature.WorkflowSharing)) { + Vue.set(this.workflow, 'ownedBy', usersStore.currentUser); + } + }, + setWorkflowId (id: string): void { this.workflow.id = id === 'new' ? PLACEHOLDER_EMPTY_WORKFLOW_ID : id; }, diff --git a/packages/editor-ui/src/views/NodeView.vue b/packages/editor-ui/src/views/NodeView.vue index d74fae4b99..84cca8ed14 100644 --- a/packages/editor-ui/src/views/NodeView.vue +++ b/packages/editor-ui/src/views/NodeView.vue @@ -841,7 +841,6 @@ export default mixins( this.workflowsStore.setWorkflowPinData(data.pinData || {}); this.workflowsStore.setWorkflowHash(data.hash); - // @TODO this.workflowsStore.addWorkflow({ id: data.id, name: data.name, @@ -853,15 +852,22 @@ export default mixins( updatedAt: data.updatedAt, nodes: data.nodes, connections: data.connections, + hash: '', }); - this.workflowsEEStore.setWorkflowOwnedBy({ - workflowId: data.id, - ownedBy: data.ownedBy, - }); - this.workflowsEEStore.setWorkflowSharedWith({ - workflowId: data.id, - sharedWith: data.sharedWith, - }); + + if (data.ownedBy) { + this.workflowsEEStore.setWorkflowOwnedBy({ + workflowId: data.id, + ownedBy: data.ownedBy, + }); + } + + if (data.sharedWith) { + this.workflowsEEStore.setWorkflowSharedWith({ + workflowId: data.id, + sharedWith: data.sharedWith, + }); + } if (data.usedCredentials) { this.credentialsStore.addCredentials(data.usedCredentials); @@ -3084,6 +3090,8 @@ export default mixins( return Promise.resolve(data); }, resetWorkspace() { + this.workflowsStore.resetWorkflow(); + // Reset nodes this.deleteEveryEndpoint(); @@ -3104,7 +3112,6 @@ export default mixins( this.workflowsStore.resetAllNodesIssues(); // vm.$forceUpdate(); - this.workflowsStore.$patch({ workflow: {} }); this.workflowsStore.setActive(false); this.workflowsStore.setWorkflowId(PLACEHOLDER_EMPTY_WORKFLOW_ID); this.workflowsStore.setWorkflowName({ newName: '', setStateDirty: false });