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 (
-
+ 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") {