diff --git a/packages/twenty-front/src/modules/command-menu/pages/workflow/step/edit/components/CommandMenuWorkflowEditStepContent.tsx b/packages/twenty-front/src/modules/command-menu/pages/workflow/step/edit/components/CommandMenuWorkflowEditStepContent.tsx index 31f36eb580..8eafc9561b 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/workflow/step/edit/components/CommandMenuWorkflowEditStepContent.tsx +++ b/packages/twenty-front/src/modules/command-menu/pages/workflow/step/edit/components/CommandMenuWorkflowEditStepContent.tsx @@ -1,10 +1,12 @@ +import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue'; import { useFlowOrThrow } from '@/workflow/hooks/useFlowOrThrow'; import { WorkflowWithCurrentVersion } from '@/workflow/types/Workflow'; -import { useWorkflowSelectedNodeOrThrow } from '@/workflow/workflow-diagram/hooks/useWorkflowSelectedNodeOrThrow'; +import { workflowSelectedNodeComponentState } from '@/workflow/workflow-diagram/states/workflowSelectedNodeComponentState'; import { WorkflowStepDetail } from '@/workflow/workflow-steps/components/WorkflowStepDetail'; import { useUpdateStep } from '@/workflow/workflow-steps/hooks/useUpdateStep'; import { useUpdateWorkflowVersionTrigger } from '@/workflow/workflow-trigger/hooks/useUpdateWorkflowVersionTrigger'; import styled from '@emotion/styled'; +import { isDefined } from 'twenty-shared/utils'; const StyledContainer = styled.div` display: flex; @@ -18,13 +20,19 @@ export const CommandMenuWorkflowEditStepContent = ({ workflow: WorkflowWithCurrentVersion; }) => { const flow = useFlowOrThrow(); - const workflowSelectedNode = useWorkflowSelectedNodeOrThrow(); + const workflowSelectedNode = useRecoilComponentValue( + workflowSelectedNodeComponentState, + ); const { updateTrigger } = useUpdateWorkflowVersionTrigger({ workflow }); const { updateStep } = useUpdateStep({ workflow, }); + if (!isDefined(workflowSelectedNode)) { + return null; + } + return ( { const flow = useFlowOrThrow(); - const workflowSelectedNode = useWorkflowSelectedNodeOrThrow(); + const workflowSelectedNode = useRecoilComponentValue( + workflowSelectedNodeComponentState, + ); const workflowRunId = useWorkflowRunIdOrThrow(); const workflowRun = useWorkflowRun({ workflowRunId }); @@ -60,7 +62,7 @@ export const CommandMenuWorkflowRunViewStepContent = () => { commandMenuPageComponentInstance.instanceId, ); - if (!isDefined(workflowRun)) { + if (!isDefined(workflowRun) || !isDefined(workflowSelectedNode)) { return null; } diff --git a/packages/twenty-front/src/modules/command-menu/pages/workflow/step/view/components/CommandMenuWorkflowViewStepContent.tsx b/packages/twenty-front/src/modules/command-menu/pages/workflow/step/view/components/CommandMenuWorkflowViewStepContent.tsx index 2742cf763a..4c9f264fdc 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/workflow/step/view/components/CommandMenuWorkflowViewStepContent.tsx +++ b/packages/twenty-front/src/modules/command-menu/pages/workflow/step/view/components/CommandMenuWorkflowViewStepContent.tsx @@ -1,8 +1,10 @@ +import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue'; import { useFlowOrThrow } from '@/workflow/hooks/useFlowOrThrow'; import { WorkflowStepContextProvider } from '@/workflow/states/context/WorkflowStepContext'; -import { useWorkflowSelectedNodeOrThrow } from '@/workflow/workflow-diagram/hooks/useWorkflowSelectedNodeOrThrow'; +import { workflowSelectedNodeComponentState } from '@/workflow/workflow-diagram/states/workflowSelectedNodeComponentState'; import { WorkflowStepDetail } from '@/workflow/workflow-steps/components/WorkflowStepDetail'; import styled from '@emotion/styled'; +import { isDefined } from 'twenty-shared/utils'; const StyledContainer = styled.div` display: flex; @@ -12,7 +14,13 @@ const StyledContainer = styled.div` export const CommandMenuWorkflowViewStepContent = () => { const flow = useFlowOrThrow(); - const workflowSelectedNode = useWorkflowSelectedNodeOrThrow(); + const workflowSelectedNode = useRecoilComponentValue( + workflowSelectedNodeComponentState, + ); + + if (!isDefined(workflowSelectedNode)) { + return null; + } return ( { - const workflowSelectedNode = useRecoilComponentValue( - workflowSelectedNodeComponentState, - ); - - if (!isDefined(workflowSelectedNode)) { - throw new Error( - 'Expected a node to be selected. A node must have been selected before running this code.', - ); - } - - return workflowSelectedNode; -}; diff --git a/packages/twenty-front/src/modules/workflow/workflow-variables/hooks/useAvailableVariablesInWorkflowStep.ts b/packages/twenty-front/src/modules/workflow/workflow-variables/hooks/useAvailableVariablesInWorkflowStep.ts index 2b0fbff7cb..f5ad84e1a2 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-variables/hooks/useAvailableVariablesInWorkflowStep.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-variables/hooks/useAvailableVariablesInWorkflowStep.ts @@ -1,7 +1,8 @@ +import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue'; import { useFlowOrThrow } from '@/workflow/hooks/useFlowOrThrow'; import { stepsOutputSchemaFamilySelector } from '@/workflow/states/selectors/stepsOutputSchemaFamilySelector'; import { InputSchemaPropertyType } from '@/workflow/types/InputSchema'; -import { useWorkflowSelectedNodeOrThrow } from '@/workflow/workflow-diagram/hooks/useWorkflowSelectedNodeOrThrow'; +import { workflowSelectedNodeComponentState } from '@/workflow/workflow-diagram/states/workflowSelectedNodeComponentState'; import { getPreviousSteps } from '@/workflow/workflow-steps/utils/getWorkflowPreviousSteps'; import { TRIGGER_STEP_ID } from '@/workflow/workflow-trigger/constants/TriggerStepId'; import { @@ -22,14 +23,15 @@ export const useAvailableVariablesInWorkflowStep = ({ shouldDisplayRecordObjects: boolean; fieldTypesToExclude?: InputSchemaPropertyType[]; }): StepOutputSchema[] => { - const workflowSelectedNode = useWorkflowSelectedNodeOrThrow(); + const workflowSelectedNode = useRecoilComponentValue( + workflowSelectedNodeComponentState, + ); const flow = useFlowOrThrow(); const steps = flow.steps ?? []; - const previousStepIds: string[] = getPreviousSteps( - steps, - workflowSelectedNode, - ).map((step) => step.id); + const previousStepIds: string[] = isDefined(workflowSelectedNode) + ? getPreviousSteps(steps, workflowSelectedNode).map((step) => step.id) + : []; const availableStepsOutputSchema: StepOutputSchema[] = useRecoilValue( stepsOutputSchemaFamilySelector({