diff --git a/packages/twenty-e2e-testing/lib/fixtures/blank-workflow.ts b/packages/twenty-e2e-testing/lib/fixtures/blank-workflow.ts index 3015680f7..463f28a49 100644 --- a/packages/twenty-e2e-testing/lib/fixtures/blank-workflow.ts +++ b/packages/twenty-e2e-testing/lib/fixtures/blank-workflow.ts @@ -231,7 +231,7 @@ export class WorkflowVisualizerPage { async closeSidePanel() { const closeButton = this.#page.getByTestId( - 'page-header-close-command-menu-button', + 'page-header-command-menu-button', ); await closeButton.click(); diff --git a/packages/twenty-front/src/modules/object-record/record-show/hooks/useRecordShowContainerTabs.ts b/packages/twenty-front/src/modules/object-record/record-show/hooks/useRecordShowContainerTabs.ts index cdf343009..7d0ae3ec1 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/hooks/useRecordShowContainerTabs.ts +++ b/packages/twenty-front/src/modules/object-record/record-show/hooks/useRecordShowContainerTabs.ts @@ -194,20 +194,20 @@ export const useRecordShowContainerTabs = ( ifRelationsMissing: [], }, }, - // workflowRunFlow: { - // title: 'Flow', - // position: 0, - // Icon: IconSettings, - // cards: [{ type: CardType.WorkflowRunCard }], - // hide: { - // ifMobile: false, - // ifDesktop: false, - // ifInRightDrawer: false, - // ifFeaturesDisabled: [FeatureFlagKey.IsWorkflowEnabled], - // ifRequiredObjectsInactive: [], - // ifRelationsMissing: [], - // }, - // }, + workflowRunFlow: { + title: 'Flow', + position: 0, + Icon: IconSettings, + cards: [{ type: CardType.WorkflowRunCard }], + hide: { + ifMobile: false, + ifDesktop: false, + ifInRightDrawer: false, + ifFeaturesDisabled: [FeatureFlagKey.IsWorkflowEnabled], + ifRequiredObjectsInactive: [], + ifRelationsMissing: [], + }, + }, timeline: null, }, }, diff --git a/packages/twenty-front/src/modules/workflow/types/Workflow.ts b/packages/twenty-front/src/modules/workflow/types/Workflow.ts index a6f22cd36..acc1d0772 100644 --- a/packages/twenty-front/src/modules/workflow/types/Workflow.ts +++ b/packages/twenty-front/src/modules/workflow/types/Workflow.ts @@ -188,8 +188,6 @@ export type WorkflowVersion = { type StepRunOutput = { id: string; - name: string; - type: string; outputs: { attemptCount: number; result: object | undefined; @@ -197,8 +195,14 @@ type StepRunOutput = { }[]; }; +export type WorkflowRunOutputStepsOutput = Record; + export type WorkflowRunOutput = { - steps: Record; + flow: { + trigger: WorkflowTrigger; + steps: WorkflowAction[]; + }; + stepsOutput?: WorkflowRunOutputStepsOutput; error?: string; }; diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowRunVisualizerEffect.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowRunVisualizerEffect.tsx index 6e8b96b5b..23f3be1e9 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowRunVisualizerEffect.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowRunVisualizerEffect.tsx @@ -1,4 +1,3 @@ -import { useWorkflowVersion } from '@/workflow/hooks/useWorkflowVersion'; import { workflowVersionIdState } from '@/workflow/states/workflowVersionIdState'; import { WorkflowRun } from '@/workflow/types/Workflow'; import { workflowDiagramState } from '@/workflow/workflow-diagram/states/workflowDiagramState'; @@ -14,8 +13,6 @@ export const WorkflowRunVisualizerEffect = ({ workflowVersionId: string; workflowRun: WorkflowRun; }) => { - const workflowVersion = useWorkflowVersion(workflowVersionId); - const setWorkflowVersionId = useSetRecoilState(workflowVersionIdState); const setWorkflowDiagram = useSetRecoilState(workflowDiagramState); @@ -24,26 +21,20 @@ export const WorkflowRunVisualizerEffect = ({ }, [setWorkflowVersionId, workflowVersionId]); useEffect(() => { - if ( - !( - isDefined(workflowVersion) && - isDefined(workflowVersion.trigger) && - isDefined(workflowVersion.steps) - ) - ) { + if (!isDefined(workflowRun.output)) { setWorkflowDiagram(undefined); return; } const nextWorkflowDiagram = generateWorkflowRunDiagram({ - trigger: workflowVersion.trigger, - steps: workflowVersion.steps, - output: workflowRun.output, + trigger: workflowRun.output.flow.trigger, + steps: workflowRun.output.flow.steps, + stepsOutput: workflowRun.output.stepsOutput, }); setWorkflowDiagram(nextWorkflowDiagram); - }, [setWorkflowDiagram, workflowRun.output, workflowVersion]); + }, [setWorkflowDiagram, workflowRun.output]); return null; }; diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/generateWorkflowRunDiagram.test.ts b/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/generateWorkflowRunDiagram.test.ts index 739a6b6b1..4e220a54c 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/generateWorkflowRunDiagram.test.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/generateWorkflowRunDiagram.test.ts @@ -1,5 +1,5 @@ import { - WorkflowRunOutput, + WorkflowRunOutputStepsOutput, WorkflowStep, WorkflowTrigger, } from '@/workflow/types/Workflow'; @@ -76,18 +76,14 @@ describe('generateWorkflowRunDiagram', () => { }, }, ]; - const output: WorkflowRunOutput = { - steps: { - step1: { - id: 'step1', - name: 'Step 1', - outputs: [], - type: 'CODE', - }, + const stepsOutput: WorkflowRunOutputStepsOutput = { + step1: { + id: 'step1', + outputs: [], }, }; - const result = generateWorkflowRunDiagram({ trigger, steps, output }); + const result = generateWorkflowRunDiagram({ trigger, steps, stepsOutput }); expect(result).toMatchInlineSnapshot(` { @@ -249,24 +245,20 @@ describe('generateWorkflowRunDiagram', () => { }, }, ]; - const output: WorkflowRunOutput = { - steps: { - step1: { - id: 'step1', - name: 'Step 1', - outputs: [ - { - attemptCount: 1, - result: undefined, - error: '', - }, - ], - type: 'CODE', - }, + const stepsOutput: WorkflowRunOutputStepsOutput = { + step1: { + id: 'step1', + outputs: [ + { + attemptCount: 1, + result: undefined, + error: '', + }, + ], }, }; - const result = generateWorkflowRunDiagram({ trigger, steps, output }); + const result = generateWorkflowRunDiagram({ trigger, steps, stepsOutput }); expect(result).toMatchInlineSnapshot(` { @@ -428,48 +420,40 @@ describe('generateWorkflowRunDiagram', () => { }, }, ]; - const output: WorkflowRunOutput = { - steps: { - step1: { - id: 'step1', - name: 'Step 1', - outputs: [ - { - attemptCount: 1, - result: {}, - error: undefined, - }, - ], - type: 'CODE', - }, - step2: { - id: 'step2', - name: 'Step 2', - outputs: [ - { - attemptCount: 1, - result: {}, - error: undefined, - }, - ], - type: 'CODE', - }, - step3: { - id: 'step3', - name: 'Step 3', - outputs: [ - { - attemptCount: 1, - result: {}, - error: undefined, - }, - ], - type: 'CODE', - }, + const stepsOutput: WorkflowRunOutputStepsOutput = { + step1: { + id: 'step1', + outputs: [ + { + attemptCount: 1, + result: {}, + error: undefined, + }, + ], + }, + step2: { + id: 'step2', + outputs: [ + { + attemptCount: 1, + result: {}, + error: undefined, + }, + ], + }, + step3: { + id: 'step3', + outputs: [ + { + attemptCount: 1, + result: {}, + error: undefined, + }, + ], }, }; - const result = generateWorkflowRunDiagram({ trigger, steps, output }); + const result = generateWorkflowRunDiagram({ trigger, steps, stepsOutput }); expect(result).toMatchInlineSnapshot(` { @@ -633,9 +617,9 @@ describe('generateWorkflowRunDiagram', () => { }, }, ]; - const output = null; + const stepsOutput = undefined; - const result = generateWorkflowRunDiagram({ trigger, steps, output }); + const result = generateWorkflowRunDiagram({ trigger, steps, stepsOutput }); expect(result).toMatchInlineSnapshot(` { @@ -815,24 +799,20 @@ describe('generateWorkflowRunDiagram', () => { }, }, ]; - const output: WorkflowRunOutput = { - steps: { - step1: { - id: 'step1', - name: 'Step 1', - outputs: [ - { - attemptCount: 1, - result: {}, - error: undefined, - }, - ], - type: 'CODE', - }, + const stepsOutput: WorkflowRunOutputStepsOutput = { + step1: { + id: 'step1', + outputs: [ + { + attemptCount: 1, + result: {}, + error: undefined, + }, + ], }, }; - const result = generateWorkflowRunDiagram({ trigger, steps, output }); + const result = generateWorkflowRunDiagram({ trigger, steps, stepsOutput }); expect(result).toMatchInlineSnapshot(` { diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/generateWorkflowRunDiagram.ts b/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/generateWorkflowRunDiagram.ts index ef30d2c0a..b9b62d4bd 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/generateWorkflowRunDiagram.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/generateWorkflowRunDiagram.ts @@ -1,5 +1,5 @@ import { - WorkflowRunOutput, + WorkflowRunOutputStepsOutput, WorkflowStep, WorkflowTrigger, } from '@/workflow/types/Workflow'; @@ -21,11 +21,11 @@ import { v4 } from 'uuid'; export const generateWorkflowRunDiagram = ({ trigger, steps, - output, + stepsOutput, }: { trigger: WorkflowTrigger; steps: Array; - output: WorkflowRunOutput | null; + stepsOutput: WorkflowRunOutputStepsOutput | undefined; }): WorkflowRunDiagram => { const triggerBase = getWorkflowDiagramTriggerNode({ trigger }); @@ -78,7 +78,7 @@ export const generateWorkflowRunDiagram = ({ }); } - const runResult = output?.steps[nodeId]; + const runResult = stepsOutput?.[nodeId]; let runStatus: WorkflowDiagramRunStatus; if (skippedExecution) { diff --git a/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts b/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts index dd558c076..2b3242d02 100644 --- a/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts +++ b/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts @@ -46,7 +46,7 @@ export type WorkflowRunOutput = { trigger: WorkflowTrigger; steps: WorkflowAction[]; }; - stepsOutput: Record; + stepsOutput?: Record; error?: string; }; diff --git a/packages/twenty-server/src/modules/workflow/workflow-executor/workspace-services/workflow-executor.workspace-service.ts b/packages/twenty-server/src/modules/workflow/workflow-executor/workspace-services/workflow-executor.workspace-service.ts index 0f96f07d5..50e3117b9 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-executor/workspace-services/workflow-executor.workspace-service.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-executor/workspace-services/workflow-executor.workspace-service.ts @@ -70,7 +70,7 @@ export class WorkflowExecutorWorkspaceService { }; } - const stepOutput = workflowExecutorState.stepsOutput[step.id]; + const stepOutput = workflowExecutorState.stepsOutput?.[step.id]; const error = result.error?.errorMessage ??