From f7a9ef91166df1a71db1f7827cb43ffd687839d4 Mon Sep 17 00:00:00 2001 From: Alex Grozav Date: Thu, 17 Nov 2022 15:19:10 +0200 Subject: [PATCH] feat: Add duplicate workflow error handler (#4616) * feat: Add duplicate workflow error handler * refactor: Change translation string for existing duplicate workflow error --- .../components/DuplicateWorkflowDialog.vue | 62 ++++++++++++------- .../src/plugins/i18n/locales/en.json | 7 ++- 2 files changed, 44 insertions(+), 25 deletions(-) diff --git a/packages/editor-ui/src/components/DuplicateWorkflowDialog.vue b/packages/editor-ui/src/components/DuplicateWorkflowDialog.vue index 3c97c755d..4e679da3f 100644 --- a/packages/editor-ui/src/components/DuplicateWorkflowDialog.vue +++ b/packages/editor-ui/src/components/DuplicateWorkflowDialog.vue @@ -110,8 +110,8 @@ export default mixins(showMessage, workflowHelpers, restApi).extend({ const name = this.name.trim(); if (!name) { this.$showMessage({ - title: this.$locale.baseText('duplicateWorkflowDialog.showMessage.title'), - message: this.$locale.baseText('duplicateWorkflowDialog.showMessage.message'), + title: this.$locale.baseText('duplicateWorkflowDialog.errors.missingName.title'), + message: this.$locale.baseText('duplicateWorkflowDialog.errors.missingName.message'), type: "error", }); @@ -122,30 +122,46 @@ export default mixins(showMessage, workflowHelpers, restApi).extend({ this.isSaving = true; - let workflowToUpdate: IWorkflowDataUpdate | undefined; - if (currentWorkflowId !== PLACEHOLDER_EMPTY_WORKFLOW_ID) { - const { createdAt, updatedAt, ...workflow } = await this.restApi().getWorkflow(this.data.id); - workflowToUpdate = workflow; - } + try { + let workflowToUpdate: IWorkflowDataUpdate | undefined; + if (currentWorkflowId !== PLACEHOLDER_EMPTY_WORKFLOW_ID) { + const { createdAt, updatedAt, ...workflow } = await this.restApi().getWorkflow(this.data.id); + workflowToUpdate = workflow; + } - const saved = await this.saveAsNewWorkflow({ - name, - data: workflowToUpdate, - tags: this.currentTagIds, - resetWebhookUrls: true, - openInNewWindow: true, - resetNodeIds: true, - }); - - if (saved) { - this.closeDialog(); - this.$telemetry.track('User duplicated workflow', { - old_workflow_id: currentWorkflowId, - workflow_id: this.data.id, + const saved = await this.saveAsNewWorkflow({ + name, + data: workflowToUpdate, + tags: this.currentTagIds, + resetWebhookUrls: true, + openInNewWindow: true, + resetNodeIds: true, }); - } - this.isSaving = false; + if (saved) { + this.closeDialog(); + this.$telemetry.track('User duplicated workflow', { + old_workflow_id: currentWorkflowId, + workflow_id: this.data.id, + }); + } + } catch (error) { + if (error.httpStatusCode === 403) { + error.message = this.$locale.baseText('duplicateWorkflowDialog.errors.forbidden.message'); + + this.$showError( + error, + this.$locale.baseText('duplicateWorkflowDialog.errors.forbidden.title'), + ); + } else { + this.$showError( + error, + this.$locale.baseText('duplicateWorkflowDialog.errors.generic.title'), + ); + } + } finally { + this.isSaving = false; + } }, closeDialog(): void { this.modalBus.$emit("close"); diff --git a/packages/editor-ui/src/plugins/i18n/locales/en.json b/packages/editor-ui/src/plugins/i18n/locales/en.json index 1be9eaca1..d3391e155 100644 --- a/packages/editor-ui/src/plugins/i18n/locales/en.json +++ b/packages/editor-ui/src/plugins/i18n/locales/en.json @@ -375,8 +375,11 @@ "duplicateWorkflowDialog.duplicateWorkflow": "Duplicate Workflow", "duplicateWorkflowDialog.enterWorkflowName": "Enter workflow name", "duplicateWorkflowDialog.save": "@:_reusableBaseText.save", - "duplicateWorkflowDialog.showMessage.message": "Please enter a name.", - "duplicateWorkflowDialog.showMessage.title": "Name missing", + "duplicateWorkflowDialog.errors.missingName.title": "Name missing", + "duplicateWorkflowDialog.errors.missingName.message": "Please enter a name.", + "duplicateWorkflowDialog.errors.forbidden.title": "Duplicate workflow failed", + "duplicateWorkflowDialog.errors.forbidden.message": "This action is forbidden. Do you have the correct permissions?", + "duplicateWorkflowDialog.errors.generic.title": "Duplicate workflow failed", "error": "Error", "error.goBack": "Go back", "error.pageNotFound": "Oops, couldn’t find that",