diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateStep.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateStep.ts index 20b25dfab..fff48f470 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateStep.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateStep.ts @@ -10,12 +10,14 @@ import { workflowSelectedNodeComponentState } from '@/workflow/workflow-diagram/ import { useCreateWorkflowVersionStep } from '@/workflow/workflow-steps/hooks/useCreateWorkflowVersionStep'; import { workflowInsertStepIdsComponentState } from '@/workflow/workflow-steps/states/workflowInsertStepIdsComponentState'; import { isDefined } from 'twenty-shared/utils'; +import { useState } from 'react'; export const useCreateStep = ({ workflow, }: { workflow: WorkflowWithCurrentVersion; }) => { + const [isLoading, setIsLoading] = useState(false); const { createWorkflowVersionStep } = useCreateWorkflowVersionStep(); const setWorkflowSelectedNode = useSetRecoilComponentStateV2( workflowSelectedNodeComponentState, @@ -31,29 +33,42 @@ export const useCreateStep = ({ const { getUpdatableWorkflowVersion } = useGetUpdatableWorkflowVersion(); const createStep = async (newStepType: WorkflowStepType) => { - if (!isDefined(workflowInsertStepIds.parentStepId)) { - throw new Error( - 'No parentStepId. Please select a parent step to create from.', - ); - } - - const workflowVersionId = await getUpdatableWorkflowVersion(workflow); - - const createdStep = ( - await createWorkflowVersionStep({ - workflowVersionId, - stepType: newStepType, - parentStepId: workflowInsertStepIds.parentStepId, - nextStepId: workflowInsertStepIds.nextStepId, - }) - )?.data?.createWorkflowVersionStep; - - if (!createdStep) { + if (isLoading === true) { return; } - setWorkflowSelectedNode(createdStep.id); - setWorkflowLastCreatedStepId(createdStep.id); + setIsLoading(true); + + try { + if (!isDefined(workflowInsertStepIds.parentStepId)) { + throw new Error( + 'No parentStepId. Please select a parent step to create from.', + ); + } + + const workflowVersionId = await getUpdatableWorkflowVersion(workflow); + + const createdStep = ( + await createWorkflowVersionStep({ + workflowVersionId, + stepType: newStepType, + parentStepId: workflowInsertStepIds.parentStepId, + nextStepId: workflowInsertStepIds.nextStepId, + }) + )?.data?.createWorkflowVersionStep; + + if (!createdStep) { + return; + } + + setWorkflowSelectedNode(createdStep.id); + setWorkflowLastCreatedStepId(createdStep.id); + } catch (error) { + setIsLoading(false); + throw error; + } finally { + setIsLoading(false); + } }; return { diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.service.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.service.ts index 134b25e2f..bef901eee 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.service.ts @@ -224,7 +224,8 @@ export class ServerlessFunctionService { await this.serverlessFunctionRepository.softDelete({ id }); } else { await this.serverlessFunctionRepository.delete({ id }); - await this.fileStorageService.delete({ + // We don't need to await this + this.fileStorageService.delete({ folderPath: getServerlessFolder({ serverlessFunction: existingServerlessFunction, }),