From 7383e7fd48b5c86d43fab4fa47cb1e7a4a4b4043 Mon Sep 17 00:00:00 2001 From: Csaba Tuncsik Date: Thu, 6 Jul 2023 16:01:52 +0200 Subject: [PATCH] fix(editor): Prevent keyboard shortcuts to edit workflows in readonly mode (#6613) --- .../src/components/WorkflowSettings.vue | 5 -- .../editor-ui/src/mixins/genericHelpers.ts | 22 +++------ packages/editor-ui/src/views/NodeView.vue | 47 +++++++++++++------ .../editor-ui/src/views/WorkflowsView.vue | 5 +- 4 files changed, 41 insertions(+), 38 deletions(-) diff --git a/packages/editor-ui/src/components/WorkflowSettings.vue b/packages/editor-ui/src/components/WorkflowSettings.vue index 0370c9bfc..590c606dd 100644 --- a/packages/editor-ui/src/components/WorkflowSettings.vue +++ b/packages/editor-ui/src/components/WorkflowSettings.vue @@ -391,7 +391,6 @@ import { useRootStore, useWorkflowsEEStore, useUsersStore, - useSourceControlStore, } from '@/stores'; import { createEventBus } from 'n8n-design-system'; @@ -469,7 +468,6 @@ export default defineComponent({ useSettingsStore, useWorkflowsStore, useWorkflowsEEStore, - useSourceControlStore, ), workflowName(): string { return this.workflowsStore.workflowName; @@ -493,9 +491,6 @@ export default defineComponent({ return this.workflowsEEStore.getWorkflowOwnerName(`${this.workflowId}`, fallback); }, - readOnlyEnv(): boolean { - return this.sourceControlStore.preferences.branchReadOnly; - }, }, async mounted() { this.executionTimeout = this.rootStore.executionTimeout; diff --git a/packages/editor-ui/src/mixins/genericHelpers.ts b/packages/editor-ui/src/mixins/genericHelpers.ts index 4a83b3d48..058ef713f 100644 --- a/packages/editor-ui/src/mixins/genericHelpers.ts +++ b/packages/editor-ui/src/mixins/genericHelpers.ts @@ -1,8 +1,9 @@ import { defineComponent } from 'vue'; +import { mapStores } from 'pinia'; import dateformat from 'dateformat'; - import { VIEWS } from '@/constants'; import { useToast } from '@/composables'; +import { useSourceControlStore } from '@/stores'; export const genericHelpers = defineComponent({ setup() { @@ -17,11 +18,15 @@ export const genericHelpers = defineComponent({ }; }, computed: { + ...mapStores(useSourceControlStore), isReadOnlyRoute(): boolean { return ![VIEWS.WORKFLOW, VIEWS.NEW_WORKFLOW, VIEWS.LOG_STREAMING_SETTINGS].includes( this.$route.name as VIEWS, ); }, + readOnlyEnv(): boolean { + return this.sourceControlStore.preferences.branchReadOnly; + }, }, methods: { displayTimer(msPassed: number, showMs = false): string { @@ -49,21 +54,6 @@ export const genericHelpers = defineComponent({ const [date, time] = formattedDate.split('#'); return { date, time }; }, - editAllowedCheck(): boolean { - if (this.isReadOnlyRoute) { - this.showMessage({ - // title: 'Workflow can not be changed!', - title: this.$locale.baseText('genericHelpers.showMessage.title'), - message: this.$locale.baseText('genericHelpers.showMessage.message'), - type: 'info', - duration: 0, - dangerouslyUseHTMLString: true, - }); - - return false; - } - return true; - }, /** * @note Loading helpers extracted as composable in useLoadingService diff --git a/packages/editor-ui/src/views/NodeView.vue b/packages/editor-ui/src/views/NodeView.vue index 4db82f27d..357badd1f 100644 --- a/packages/editor-ui/src/views/NodeView.vue +++ b/packages/editor-ui/src/views/NodeView.vue @@ -102,7 +102,7 @@ @addNode="onAddNode" /> -
+
{ @@ -2609,7 +2628,7 @@ export default defineComponent({ // Create connections in DOM this.instance?.connect({ uuids: uuid, - detachable: !this.isReadOnlyRoute, + detachable: !this.isReadOnlyRoute && !this.readOnlyEnv, }); setTimeout(() => { diff --git a/packages/editor-ui/src/views/WorkflowsView.vue b/packages/editor-ui/src/views/WorkflowsView.vue index b3798a237..45eece83a 100644 --- a/packages/editor-ui/src/views/WorkflowsView.vue +++ b/packages/editor-ui/src/views/WorkflowsView.vue @@ -112,6 +112,7 @@ import { useUsersStore } from '@/stores/users.store'; import { useWorkflowsStore } from '@/stores/workflows.store'; import { useCredentialsStore } from '@/stores/credentials.store'; import { useSourceControlStore } from '@/stores/sourceControl.store'; +import { genericHelpers } from '@/mixins/genericHelpers'; type IResourcesListLayoutInstance = Vue & { sendFiltersTelemetry: (source: string) => void }; @@ -123,6 +124,7 @@ const StatusFilter = { const WorkflowsView = defineComponent({ name: 'WorkflowsView', + mixins: [genericHelpers], components: { ResourcesListLayout, WorkflowCard, @@ -174,9 +176,6 @@ const WorkflowsView = defineComponent({ }, ]; }, - readOnlyEnv(): boolean { - return this.sourceControlStore.preferences.branchReadOnly; - }, }, methods: { addWorkflow() {