feat: add-create-update-record in workflow (#14654)

## Description

- this PR focuses on issue
https://github.com/twentyhq/core-team-issues/issues/1476
- Added upsert action


## Visual Appearance

<img width="1792" height="1041" alt="Screenshot 2025-10-03 at 12 57
58 PM"
src="https://github.com/user-attachments/assets/57afb96c-d4b3-4a87-95f0-11ac4bd61dd8"
/>




<img width="1792" height="1031" alt="Screenshot 2025-10-03 at 12 57
48 PM"
src="https://github.com/user-attachments/assets/9032d4c2-f0d2-46f1-8682-a7e5c280a303"
/>

---------

Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
Co-authored-by: Thomas Trompette <thomas.trompette@sfr.fr>
This commit is contained in:
Harshit Singh
2025-10-21 19:18:25 +05:30
committed by GitHub
parent f5f23a9d31
commit 27f50c4f4e
41 changed files with 879 additions and 268 deletions
@@ -80,6 +80,7 @@ describe('useCreateStep', () => {
stepType: 'CODE',
parentStepId: 'parent-step-id',
nextStepId: undefined,
parentStepConnectionOptions: undefined,
position: undefined,
});
});
@@ -1,7 +1,7 @@
import { useSetRecoilComponentState } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentState';
import { useGetUpdatableWorkflowVersionOrThrow } from '@/workflow/hooks/useGetUpdatableWorkflowVersionOrThrow';
import { workflowLastCreatedStepIdComponentState } from '@/workflow/states/workflowLastCreatedStepIdComponentState';
import { type WorkflowStepType } from '@/workflow/types/Workflow';
import { type WorkflowActionType } from '@/workflow/types/Workflow';
import { workflowSelectedNodeComponentState } from '@/workflow/workflow-diagram/states/workflowSelectedNodeComponentState';
import { type WorkflowStepConnectionOptions } from '@/workflow/workflow-diagram/workflow-iterator/types/WorkflowStepConnectionOptions';
import { useCreateWorkflowVersionStep } from '@/workflow/workflow-steps/hooks/useCreateWorkflowVersionStep';
@@ -35,7 +35,7 @@ export const useCreateStep = () => {
position,
connectionOptions,
}: {
newStepType: WorkflowStepType;
newStepType: WorkflowActionType;
parentStepId: string | undefined;
nextStepId: string | undefined;
position?: { x: number; y: number };
@@ -6,14 +6,13 @@ import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordF
import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordFromCache';
import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions';
import { UPDATE_WORKFLOW_RUN_STEP } from '@/workflow/graphql/mutations/updateWorkflowRunStep';
import { type WorkflowRun } from '@/workflow/types/Workflow';
import { type WorkflowStep, type WorkflowRun } from '@/workflow/types/Workflow';
import { useMutation } from '@apollo/client';
import { isDefined } from 'twenty-shared/utils';
import {
type UpdateWorkflowRunStepInput,
type UpdateWorkflowRunStepMutation,
type UpdateWorkflowRunStepMutationVariables,
type WorkflowAction,
} from '~/generated-metadata/graphql';
export const useUpdateWorkflowRunStep = () => {
@@ -60,7 +59,7 @@ export const useUpdateWorkflowRunStep = () => {
...cachedRecord.state,
flow: {
...cachedRecord.state.flow,
steps: cachedRecord.state.flow.steps.map((step: WorkflowAction) => {
steps: cachedRecord.state.flow.steps.map((step: WorkflowStep) => {
if (step.id === updatedStep.id) {
return updatedStep;
}
@@ -6,14 +6,16 @@ import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordF
import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordFromCache';
import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions';
import { UPDATE_WORKFLOW_VERSION_STEP } from '@/workflow/graphql/mutations/updateWorkflowVersionStep';
import { type WorkflowVersion } from '@/workflow/types/Workflow';
import {
type WorkflowVersion,
type WorkflowStep,
} from '@/workflow/types/Workflow';
import { useMutation } from '@apollo/client';
import { isDefined } from 'twenty-shared/utils';
import {
type UpdateWorkflowVersionStepInput,
type UpdateWorkflowVersionStepMutation,
type UpdateWorkflowVersionStepMutationVariables,
type WorkflowAction,
} from '~/generated-metadata/graphql';
export const useUpdateWorkflowVersionStep = () => {
@@ -52,7 +54,7 @@ export const useUpdateWorkflowVersionStep = () => {
const newCachedRecord = {
...cachedRecord,
steps: (cachedRecord.steps || []).map((step: WorkflowAction) => {
steps: (cachedRecord.steps || []).map((step: WorkflowStep) => {
if (step.id === updatedStep.id) {
return updatedStep;
}