diff --git a/skyvern-frontend/src/routes/workflows/RunWorkflowForm.tsx b/skyvern-frontend/src/routes/workflows/RunWorkflowForm.tsx index 3255ae13..cf21b103 100644 --- a/skyvern-frontend/src/routes/workflows/RunWorkflowForm.tsx +++ b/skyvern-frontend/src/routes/workflows/RunWorkflowForm.tsx @@ -1,5 +1,11 @@ import { getClient } from "@/api/AxiosClient"; -import { Form, FormControl, FormField, FormItem } from "@/components/ui/form"; +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel, +} from "@/components/ui/form"; import { useCredentialGetter } from "@/hooks/useCredentialGetter"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { useForm } from "react-hook-form"; @@ -8,14 +14,6 @@ import { WorkflowParameterInput } from "./WorkflowParameterInput"; import { Button } from "@/components/ui/button"; import { toast } from "@/components/ui/use-toast"; import { CopyIcon, PlayIcon, ReloadIcon } from "@radix-ui/react-icons"; -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from "@/components/ui/table"; import { ToastAction } from "@radix-ui/react-toast"; import fetchToCurl from "fetch-to-curl"; import { apiBaseUrl } from "@/util/env"; @@ -115,133 +113,122 @@ function RunWorkflowForm({ workflowParameters, initialValues }: Props) { } return ( -
-
- - - - - - Parameter Name - - - Description - - - Input - - - - - {workflowParameters?.map((parameter) => { - return ( - { - if ( - parameter.workflow_parameter_type === "json" && - typeof value === "string" - ) { - try { - JSON.parse(value); - return true; - } catch (e) { - return "Invalid JSON"; - } - } - if (value === null) { - return "This field is required"; - } - }, - }} - render={({ field }) => { - return ( - - -
- {parameter.key} -
-
- -
{parameter.description}
-
- - - - - - {form.formState.errors[parameter.key] && ( -
- { - form.formState.errors[parameter.key] - ?.message - } -
- )} -
-
-
- ); - }} - /> - ); - })} -
-
-
- - -
-
- -
+ render={({ field }) => { + return ( + +
+ +
+
+ {parameter.key} + + {parameter.workflow_parameter_type} + +
+

+ {parameter.description} +

+
+
+
+ + + + {form.formState.errors[parameter.key] && ( +
+ {form.formState.errors[parameter.key]?.message} +
+ )} +
+
+
+ ); + }} + /> + ); + })} + {workflowParameters.length === 0 && ( +
No workflow parameters for this workflow.
+ )} +
+ + +
+ + ); } diff --git a/skyvern-frontend/src/routes/workflows/WorkflowParameterInput.tsx b/skyvern-frontend/src/routes/workflows/WorkflowParameterInput.tsx index 4bef8596..597496d7 100644 --- a/skyvern-frontend/src/routes/workflows/WorkflowParameterInput.tsx +++ b/skyvern-frontend/src/routes/workflows/WorkflowParameterInput.tsx @@ -16,11 +16,14 @@ function WorkflowParameterInput({ type, value, onChange }: Props) { if (type === "json") { return ( onChange(value)} value={ typeof value === "string" ? value : JSON.stringify(value, null, 2) } + minHeight="96px" + maxHeight="500px" /> ); } @@ -37,7 +40,7 @@ function WorkflowParameterInput({ type, value, onChange }: Props) { if (type === "integer") { return ( onChange(parseInt(e.target.value))} type="number" /> @@ -47,7 +50,7 @@ function WorkflowParameterInput({ type, value, onChange }: Props) { if (type === "float") { return ( onChange(parseFloat(e.target.value))} type="number" step="any" diff --git a/skyvern-frontend/src/routes/workflows/WorkflowRunParameters.tsx b/skyvern-frontend/src/routes/workflows/WorkflowRunParameters.tsx index c82ce04f..f4532645 100644 --- a/skyvern-frontend/src/routes/workflows/WorkflowRunParameters.tsx +++ b/skyvern-frontend/src/routes/workflows/WorkflowRunParameters.tsx @@ -3,27 +3,8 @@ import { useCredentialGetter } from "@/hooks/useCredentialGetter"; import { useQuery } from "@tanstack/react-query"; import { useLocation, useParams } from "react-router-dom"; import { RunWorkflowForm } from "./RunWorkflowForm"; -import { - WorkflowApiResponse, - WorkflowParameterValueType, -} from "./types/workflowTypes"; - -function defaultValue(type: WorkflowParameterValueType) { - switch (type) { - case "string": - return ""; - case "integer": - return 0; - case "float": - return 0.0; - case "boolean": - return false; - case "json": - return null; - case "file_url": - return null; - } -} +import { WorkflowApiResponse } from "./types/workflowTypes"; +import { Skeleton } from "@/components/ui/skeleton"; function WorkflowRunParameters() { const credentialGetter = useCredentialGetter(); @@ -65,18 +46,36 @@ function WorkflowRunParameters() { acc[curr.key] = Boolean(curr.default_value); return acc; } + if ( + curr.default_value === null && + curr.workflow_parameter_type === "string" + ) { + acc[curr.key] = ""; + return acc; + } if (curr.default_value) { acc[curr.key] = curr.default_value; return acc; } - acc[curr.key] = defaultValue(curr.workflow_parameter_type); + acc[curr.key] = null; return acc; }, {} as Record, ); if (isFetching) { - return
Getting workflow parameters...
; + return ( +
+
+

Run Parameters

+

+ Fill the placeholder values that you have linked throughout your + workflow. +

+
+ +
+ ); } if (!workflow || !workflowParameters || !initialValues) { diff --git a/skyvern-frontend/src/routes/workflows/editor/panels/WorkflowParameterAddPanel.tsx b/skyvern-frontend/src/routes/workflows/editor/panels/WorkflowParameterAddPanel.tsx index c7c2474f..920f311b 100644 --- a/skyvern-frontend/src/routes/workflows/editor/panels/WorkflowParameterAddPanel.tsx +++ b/skyvern-frontend/src/routes/workflows/editor/panels/WorkflowParameterAddPanel.tsx @@ -220,7 +220,9 @@ function WorkflowParameterAddPanel({ type, onClose, onSave }: Props) { parameterType: "workflow", dataType: parameterType, description, - defaultValue: defaultValue, + defaultValue: defaultValueState.hasDefaultValue + ? defaultValue + : null, }); } if (type === "credential") { diff --git a/skyvern-frontend/src/routes/workflows/editor/panels/WorkflowParameterEditPanel.tsx b/skyvern-frontend/src/routes/workflows/editor/panels/WorkflowParameterEditPanel.tsx index 5a8066c6..b271ce62 100644 --- a/skyvern-frontend/src/routes/workflows/editor/panels/WorkflowParameterEditPanel.tsx +++ b/skyvern-frontend/src/routes/workflows/editor/panels/WorkflowParameterEditPanel.tsx @@ -253,7 +253,9 @@ function WorkflowParameterEditPanel({ parameterType: "workflow", dataType: parameterType, description, - defaultValue: defaultValue, + defaultValue: defaultValueState.hasDefaultValue + ? defaultValue + : null, }); } if (type === "credential") {