Fix workflow run ouput format (#10302)
- Adapt the frontend to use the new output format
This commit is contained in:
committed by
GitHub
parent
ad9af65898
commit
77caf36d90
@ -231,7 +231,7 @@ export class WorkflowVisualizerPage {
|
|||||||
|
|
||||||
async closeSidePanel() {
|
async closeSidePanel() {
|
||||||
const closeButton = this.#page.getByTestId(
|
const closeButton = this.#page.getByTestId(
|
||||||
'page-header-close-command-menu-button',
|
'page-header-command-menu-button',
|
||||||
);
|
);
|
||||||
|
|
||||||
await closeButton.click();
|
await closeButton.click();
|
||||||
|
|||||||
@ -194,20 +194,20 @@ export const useRecordShowContainerTabs = (
|
|||||||
ifRelationsMissing: [],
|
ifRelationsMissing: [],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// workflowRunFlow: {
|
workflowRunFlow: {
|
||||||
// title: 'Flow',
|
title: 'Flow',
|
||||||
// position: 0,
|
position: 0,
|
||||||
// Icon: IconSettings,
|
Icon: IconSettings,
|
||||||
// cards: [{ type: CardType.WorkflowRunCard }],
|
cards: [{ type: CardType.WorkflowRunCard }],
|
||||||
// hide: {
|
hide: {
|
||||||
// ifMobile: false,
|
ifMobile: false,
|
||||||
// ifDesktop: false,
|
ifDesktop: false,
|
||||||
// ifInRightDrawer: false,
|
ifInRightDrawer: false,
|
||||||
// ifFeaturesDisabled: [FeatureFlagKey.IsWorkflowEnabled],
|
ifFeaturesDisabled: [FeatureFlagKey.IsWorkflowEnabled],
|
||||||
// ifRequiredObjectsInactive: [],
|
ifRequiredObjectsInactive: [],
|
||||||
// ifRelationsMissing: [],
|
ifRelationsMissing: [],
|
||||||
// },
|
},
|
||||||
// },
|
},
|
||||||
timeline: null,
|
timeline: null,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@ -188,8 +188,6 @@ export type WorkflowVersion = {
|
|||||||
|
|
||||||
type StepRunOutput = {
|
type StepRunOutput = {
|
||||||
id: string;
|
id: string;
|
||||||
name: string;
|
|
||||||
type: string;
|
|
||||||
outputs: {
|
outputs: {
|
||||||
attemptCount: number;
|
attemptCount: number;
|
||||||
result: object | undefined;
|
result: object | undefined;
|
||||||
@ -197,8 +195,14 @@ type StepRunOutput = {
|
|||||||
}[];
|
}[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type WorkflowRunOutputStepsOutput = Record<string, StepRunOutput>;
|
||||||
|
|
||||||
export type WorkflowRunOutput = {
|
export type WorkflowRunOutput = {
|
||||||
steps: Record<string, StepRunOutput>;
|
flow: {
|
||||||
|
trigger: WorkflowTrigger;
|
||||||
|
steps: WorkflowAction[];
|
||||||
|
};
|
||||||
|
stepsOutput?: WorkflowRunOutputStepsOutput;
|
||||||
error?: string;
|
error?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
import { useWorkflowVersion } from '@/workflow/hooks/useWorkflowVersion';
|
|
||||||
import { workflowVersionIdState } from '@/workflow/states/workflowVersionIdState';
|
import { workflowVersionIdState } from '@/workflow/states/workflowVersionIdState';
|
||||||
import { WorkflowRun } from '@/workflow/types/Workflow';
|
import { WorkflowRun } from '@/workflow/types/Workflow';
|
||||||
import { workflowDiagramState } from '@/workflow/workflow-diagram/states/workflowDiagramState';
|
import { workflowDiagramState } from '@/workflow/workflow-diagram/states/workflowDiagramState';
|
||||||
@ -14,8 +13,6 @@ export const WorkflowRunVisualizerEffect = ({
|
|||||||
workflowVersionId: string;
|
workflowVersionId: string;
|
||||||
workflowRun: WorkflowRun;
|
workflowRun: WorkflowRun;
|
||||||
}) => {
|
}) => {
|
||||||
const workflowVersion = useWorkflowVersion(workflowVersionId);
|
|
||||||
|
|
||||||
const setWorkflowVersionId = useSetRecoilState(workflowVersionIdState);
|
const setWorkflowVersionId = useSetRecoilState(workflowVersionIdState);
|
||||||
const setWorkflowDiagram = useSetRecoilState(workflowDiagramState);
|
const setWorkflowDiagram = useSetRecoilState(workflowDiagramState);
|
||||||
|
|
||||||
@ -24,26 +21,20 @@ export const WorkflowRunVisualizerEffect = ({
|
|||||||
}, [setWorkflowVersionId, workflowVersionId]);
|
}, [setWorkflowVersionId, workflowVersionId]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (
|
if (!isDefined(workflowRun.output)) {
|
||||||
!(
|
|
||||||
isDefined(workflowVersion) &&
|
|
||||||
isDefined(workflowVersion.trigger) &&
|
|
||||||
isDefined(workflowVersion.steps)
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
setWorkflowDiagram(undefined);
|
setWorkflowDiagram(undefined);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const nextWorkflowDiagram = generateWorkflowRunDiagram({
|
const nextWorkflowDiagram = generateWorkflowRunDiagram({
|
||||||
trigger: workflowVersion.trigger,
|
trigger: workflowRun.output.flow.trigger,
|
||||||
steps: workflowVersion.steps,
|
steps: workflowRun.output.flow.steps,
|
||||||
output: workflowRun.output,
|
stepsOutput: workflowRun.output.stepsOutput,
|
||||||
});
|
});
|
||||||
|
|
||||||
setWorkflowDiagram(nextWorkflowDiagram);
|
setWorkflowDiagram(nextWorkflowDiagram);
|
||||||
}, [setWorkflowDiagram, workflowRun.output, workflowVersion]);
|
}, [setWorkflowDiagram, workflowRun.output]);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
WorkflowRunOutput,
|
WorkflowRunOutputStepsOutput,
|
||||||
WorkflowStep,
|
WorkflowStep,
|
||||||
WorkflowTrigger,
|
WorkflowTrigger,
|
||||||
} from '@/workflow/types/Workflow';
|
} from '@/workflow/types/Workflow';
|
||||||
@ -76,18 +76,14 @@ describe('generateWorkflowRunDiagram', () => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
const output: WorkflowRunOutput = {
|
const stepsOutput: WorkflowRunOutputStepsOutput = {
|
||||||
steps: {
|
step1: {
|
||||||
step1: {
|
id: 'step1',
|
||||||
id: 'step1',
|
outputs: [],
|
||||||
name: 'Step 1',
|
|
||||||
outputs: [],
|
|
||||||
type: 'CODE',
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const result = generateWorkflowRunDiagram({ trigger, steps, output });
|
const result = generateWorkflowRunDiagram({ trigger, steps, stepsOutput });
|
||||||
|
|
||||||
expect(result).toMatchInlineSnapshot(`
|
expect(result).toMatchInlineSnapshot(`
|
||||||
{
|
{
|
||||||
@ -249,24 +245,20 @@ describe('generateWorkflowRunDiagram', () => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
const output: WorkflowRunOutput = {
|
const stepsOutput: WorkflowRunOutputStepsOutput = {
|
||||||
steps: {
|
step1: {
|
||||||
step1: {
|
id: 'step1',
|
||||||
id: 'step1',
|
outputs: [
|
||||||
name: 'Step 1',
|
{
|
||||||
outputs: [
|
attemptCount: 1,
|
||||||
{
|
result: undefined,
|
||||||
attemptCount: 1,
|
error: '',
|
||||||
result: undefined,
|
},
|
||||||
error: '',
|
],
|
||||||
},
|
|
||||||
],
|
|
||||||
type: 'CODE',
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const result = generateWorkflowRunDiagram({ trigger, steps, output });
|
const result = generateWorkflowRunDiagram({ trigger, steps, stepsOutput });
|
||||||
|
|
||||||
expect(result).toMatchInlineSnapshot(`
|
expect(result).toMatchInlineSnapshot(`
|
||||||
{
|
{
|
||||||
@ -428,48 +420,40 @@ describe('generateWorkflowRunDiagram', () => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
const output: WorkflowRunOutput = {
|
const stepsOutput: WorkflowRunOutputStepsOutput = {
|
||||||
steps: {
|
step1: {
|
||||||
step1: {
|
id: 'step1',
|
||||||
id: 'step1',
|
outputs: [
|
||||||
name: 'Step 1',
|
{
|
||||||
outputs: [
|
attemptCount: 1,
|
||||||
{
|
result: {},
|
||||||
attemptCount: 1,
|
error: undefined,
|
||||||
result: {},
|
},
|
||||||
error: undefined,
|
],
|
||||||
},
|
},
|
||||||
],
|
step2: {
|
||||||
type: 'CODE',
|
id: 'step2',
|
||||||
},
|
outputs: [
|
||||||
step2: {
|
{
|
||||||
id: 'step2',
|
attemptCount: 1,
|
||||||
name: 'Step 2',
|
result: {},
|
||||||
outputs: [
|
error: undefined,
|
||||||
{
|
},
|
||||||
attemptCount: 1,
|
],
|
||||||
result: {},
|
},
|
||||||
error: undefined,
|
step3: {
|
||||||
},
|
id: 'step3',
|
||||||
],
|
outputs: [
|
||||||
type: 'CODE',
|
{
|
||||||
},
|
attemptCount: 1,
|
||||||
step3: {
|
result: {},
|
||||||
id: 'step3',
|
error: undefined,
|
||||||
name: 'Step 3',
|
},
|
||||||
outputs: [
|
],
|
||||||
{
|
|
||||||
attemptCount: 1,
|
|
||||||
result: {},
|
|
||||||
error: undefined,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
type: 'CODE',
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const result = generateWorkflowRunDiagram({ trigger, steps, output });
|
const result = generateWorkflowRunDiagram({ trigger, steps, stepsOutput });
|
||||||
|
|
||||||
expect(result).toMatchInlineSnapshot(`
|
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(`
|
expect(result).toMatchInlineSnapshot(`
|
||||||
{
|
{
|
||||||
@ -815,24 +799,20 @@ describe('generateWorkflowRunDiagram', () => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
const output: WorkflowRunOutput = {
|
const stepsOutput: WorkflowRunOutputStepsOutput = {
|
||||||
steps: {
|
step1: {
|
||||||
step1: {
|
id: 'step1',
|
||||||
id: 'step1',
|
outputs: [
|
||||||
name: 'Step 1',
|
{
|
||||||
outputs: [
|
attemptCount: 1,
|
||||||
{
|
result: {},
|
||||||
attemptCount: 1,
|
error: undefined,
|
||||||
result: {},
|
},
|
||||||
error: undefined,
|
],
|
||||||
},
|
|
||||||
],
|
|
||||||
type: 'CODE',
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const result = generateWorkflowRunDiagram({ trigger, steps, output });
|
const result = generateWorkflowRunDiagram({ trigger, steps, stepsOutput });
|
||||||
|
|
||||||
expect(result).toMatchInlineSnapshot(`
|
expect(result).toMatchInlineSnapshot(`
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
WorkflowRunOutput,
|
WorkflowRunOutputStepsOutput,
|
||||||
WorkflowStep,
|
WorkflowStep,
|
||||||
WorkflowTrigger,
|
WorkflowTrigger,
|
||||||
} from '@/workflow/types/Workflow';
|
} from '@/workflow/types/Workflow';
|
||||||
@ -21,11 +21,11 @@ import { v4 } from 'uuid';
|
|||||||
export const generateWorkflowRunDiagram = ({
|
export const generateWorkflowRunDiagram = ({
|
||||||
trigger,
|
trigger,
|
||||||
steps,
|
steps,
|
||||||
output,
|
stepsOutput,
|
||||||
}: {
|
}: {
|
||||||
trigger: WorkflowTrigger;
|
trigger: WorkflowTrigger;
|
||||||
steps: Array<WorkflowStep>;
|
steps: Array<WorkflowStep>;
|
||||||
output: WorkflowRunOutput | null;
|
stepsOutput: WorkflowRunOutputStepsOutput | undefined;
|
||||||
}): WorkflowRunDiagram => {
|
}): WorkflowRunDiagram => {
|
||||||
const triggerBase = getWorkflowDiagramTriggerNode({ trigger });
|
const triggerBase = getWorkflowDiagramTriggerNode({ trigger });
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ export const generateWorkflowRunDiagram = ({
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const runResult = output?.steps[nodeId];
|
const runResult = stepsOutput?.[nodeId];
|
||||||
|
|
||||||
let runStatus: WorkflowDiagramRunStatus;
|
let runStatus: WorkflowDiagramRunStatus;
|
||||||
if (skippedExecution) {
|
if (skippedExecution) {
|
||||||
|
|||||||
@ -46,7 +46,7 @@ export type WorkflowRunOutput = {
|
|||||||
trigger: WorkflowTrigger;
|
trigger: WorkflowTrigger;
|
||||||
steps: WorkflowAction[];
|
steps: WorkflowAction[];
|
||||||
};
|
};
|
||||||
stepsOutput: Record<string, StepRunOutput>;
|
stepsOutput?: Record<string, StepRunOutput>;
|
||||||
error?: string;
|
error?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -70,7 +70,7 @@ export class WorkflowExecutorWorkspaceService {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const stepOutput = workflowExecutorState.stepsOutput[step.id];
|
const stepOutput = workflowExecutorState.stepsOutput?.[step.id];
|
||||||
|
|
||||||
const error =
|
const error =
|
||||||
result.error?.errorMessage ??
|
result.error?.errorMessage ??
|
||||||
|
|||||||
Reference in New Issue
Block a user