diff --git a/packages/twenty-front/src/modules/workflow/components/OverrideWorkflowDraftConfirmationModal.tsx b/packages/twenty-front/src/modules/workflow/components/OverrideWorkflowDraftConfirmationModal.tsx index c83bc48787f..8e87ef00de1 100644 --- a/packages/twenty-front/src/modules/workflow/components/OverrideWorkflowDraftConfirmationModal.tsx +++ b/packages/twenty-front/src/modules/workflow/components/OverrideWorkflowDraftConfirmationModal.tsx @@ -1,4 +1,3 @@ -import { CoreObjectNameSingular, AppPath } from 'twenty-shared/types'; import { ConfirmationModal, StyledCenteredButton, @@ -7,6 +6,7 @@ import { useModal } from '@/ui/layout/modal/hooks/useModal'; import { OVERRIDE_WORKFLOW_DRAFT_CONFIRMATION_MODAL_ID } from '@/workflow/constants/OverrideWorkflowDraftConfirmationModalId'; import { useCreateDraftFromWorkflowVersion } from '@/workflow/hooks/useCreateDraftFromWorkflowVersion'; import { useLingui } from '@lingui/react/macro'; +import { AppPath, CoreObjectNameSingular } from 'twenty-shared/types'; import { getAppPath } from 'twenty-shared/utils'; import { useNavigateApp } from '~/hooks/useNavigateApp'; @@ -58,6 +58,7 @@ export const OverrideWorkflowDraftConfirmationModal = ({ variant="secondary" title={t`Go to Draft`} fullWidth + justify="center" /> } /> diff --git a/packages/twenty-server/src/modules/workflow/workflow-builder/workflow-version/workflow-version.workspace-service.ts b/packages/twenty-server/src/modules/workflow/workflow-builder/workflow-version/workflow-version.workspace-service.ts index 554a3f98977..e9b33d994e7 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-builder/workflow-version/workflow-version.workspace-service.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-builder/workflow-version/workflow-version.workspace-service.ts @@ -77,44 +77,6 @@ export class WorkflowVersionWorkspaceService { assertWorkflowVersionTriggerIsDefined(workflowVersionToCopy); assertWorkflowVersionHasSteps(workflowVersionToCopy); - let draftWorkflowVersion = await workflowVersionRepository.findOne({ - where: { - workflowId, - status: WorkflowVersionStatus.DRAFT, - }, - }); - - if (!isDefined(draftWorkflowVersion)) { - const workflowVersionsCount = await workflowVersionRepository.count({ - where: { - workflowId, - }, - }); - - const position = await this.recordPositionService.buildRecordPosition( - { - value: 'first', - objectMetadata: { - isCustom: false, - nameSingular: 'workflowVersion', - }, - workspaceId, - }, - ); - - const insertResult = await workflowVersionRepository.insert({ - workflowId, - name: `v${workflowVersionsCount + 1}`, - status: WorkflowVersionStatus.DRAFT, - position, - }); - - draftWorkflowVersion = insertResult - .generatedMaps[0] as WorkflowVersionWorkspaceEntity; - } - - assertWorkflowVersionIsDraft(draftWorkflowVersion); - const newWorkflowVersionTrigger = workflowVersionToCopy.trigger; const newWorkflowVersionSteps: WorkflowAction[] = []; @@ -128,11 +90,56 @@ export class WorkflowVersionWorkspaceService { newWorkflowVersionSteps.push(duplicatedStep); } - await workflowVersionRepository.update(draftWorkflowVersion.id, { + const existingDraftVersion = await workflowVersionRepository.findOne({ + where: { + workflowId, + status: WorkflowVersionStatus.DRAFT, + }, + }); + + if (isDefined(existingDraftVersion)) { + assertWorkflowVersionIsDraft(existingDraftVersion); + + await workflowVersionRepository.update(existingDraftVersion.id, { + steps: newWorkflowVersionSteps, + trigger: newWorkflowVersionTrigger, + }); + + return { + ...existingDraftVersion, + name: existingDraftVersion.name ?? '', + steps: newWorkflowVersionSteps, + trigger: newWorkflowVersionTrigger, + }; + } + + const workflowVersionsCount = await workflowVersionRepository.count({ + where: { + workflowId, + }, + }); + + const position = await this.recordPositionService.buildRecordPosition({ + value: 'first', + objectMetadata: { + isCustom: false, + nameSingular: 'workflowVersion', + }, + workspaceId, + }); + + const insertResult = await workflowVersionRepository.insert({ + workflowId, + name: `v${workflowVersionsCount + 1}`, + status: WorkflowVersionStatus.DRAFT, steps: newWorkflowVersionSteps, trigger: newWorkflowVersionTrigger, + position, }); + const draftWorkflowVersion = insertResult + .generatedMaps[0] as WorkflowVersionWorkspaceEntity; + return { ...draftWorkflowVersion, name: draftWorkflowVersion.name ?? '',