Set flow after step creation (#13725)

## Before


https://github.com/user-attachments/assets/5f89e2c5-af59-46eb-a0af-6eb0ab103291

## After


https://github.com/user-attachments/assets/11accdc5-a49c-4479-8686-b01f44519d81

## The issue

`getStepDefinitionOrThrow` throws if the provided `steps` aren't
defined. With my recent refactor, the side panel is opened immediately,
as we no longer open it in the `useOnSelectionChange` hook. We use a
`useEffect` to set the `flowState` whenever the workflow version
definition changes. As the side panel is now opened faster,
`getStepDefinitionOrThrow` throws before the `flowState` could have been
set.

In this PR, I only fixed the bug I encountered. We might want to replace
the synchronization `useEffect` with explicit `setFlow` calls whenever
we change the workflow version.
This commit is contained in:
Baptiste Devessier
2025-08-07 15:32:37 +02:00
committed by GitHub
parent 8a246b5422
commit 0822080105
2 changed files with 21 additions and 9 deletions
@@ -7,12 +7,17 @@ import {
CreateWorkflowVersionStepMutationVariables,
} from '~/generated-metadata/graphql';
import { useUpdateWorkflowVersionCache } from '@/workflow/workflow-steps/hooks/useUpdateWorkflowVersionCache';
import { flowComponentState } from '@/workflow/states/flowComponentState';
import { useSetRecoilComponentState } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentState';
import { isDefined } from 'twenty-shared/utils';
export const useCreateWorkflowVersionStep = () => {
const apolloCoreClient = useApolloCoreClient();
const { updateWorkflowVersionCache } = useUpdateWorkflowVersionCache();
const setFlow = useSetRecoilComponentState(flowComponentState);
const [mutate] = useMutation<
CreateWorkflowVersionStepMutation,
CreateWorkflowVersionStepMutationVariables
@@ -29,11 +34,19 @@ export const useCreateWorkflowVersionStep = () => {
const workflowVersionStepChanges = result?.data?.createWorkflowVersionStep;
updateWorkflowVersionCache({
const updatedWorkflowVersion = updateWorkflowVersionCache({
workflowVersionStepChanges,
workflowVersionId: input.workflowVersionId,
});
if (isDefined(updatedWorkflowVersion)) {
setFlow({
workflowVersionId: updatedWorkflowVersion.id,
trigger: updatedWorkflowVersion.trigger,
steps: updatedWorkflowVersion.steps,
});
}
return result;
};
@@ -5,12 +5,9 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSi
import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache';
import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordFromCache';
import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions';
import { WorkflowVersion } from '@/workflow/types/Workflow';
import { WorkflowAction, WorkflowVersion } from '@/workflow/types/Workflow';
import { isDefined } from 'twenty-shared/utils';
import {
WorkflowAction,
WorkflowVersionStepChanges,
} from '~/generated/graphql';
import { WorkflowVersionStepChanges } from '~/generated/graphql';
export const useUpdateWorkflowVersionCache = () => {
const apolloCoreClient = useApolloCoreClient();
@@ -33,7 +30,7 @@ export const useUpdateWorkflowVersionCache = () => {
}: {
workflowVersionStepChanges: WorkflowVersionStepChanges | undefined;
workflowVersionId: string;
}) => {
}): WorkflowVersion | undefined => {
if (!isDefined(workflowVersionStepChanges)) {
return;
}
@@ -63,11 +60,11 @@ export const useUpdateWorkflowVersionCache = () => {
...step,
nextStepIds: stepsNextStepIds[step.id] ?? step.nextStepIds,
})),
};
} satisfies WorkflowVersion;
if (isDefined(createdStep)) {
const formattedCreatedStep = {
...createdStep,
...(createdStep as WorkflowAction),
nextStepIds: createdStep.nextStepIds || [],
};
@@ -99,6 +96,8 @@ export const useUpdateWorkflowVersionCache = () => {
recordGqlFields,
objectPermissionsByObjectMetadataId,
});
return newCachedRecord;
};
return { updateWorkflowVersionCache };