Skip to content

Commit 9f7ec07

Browse files
authored
Navigate to task form when generating task from prompt (#968)
1 parent 628321e commit 9f7ec07

File tree

2 files changed

+44
-39
lines changed

2 files changed

+44
-39
lines changed

skyvern-frontend/src/routes/tasks/create/CreateNewTaskFormPage.tsx

+38-2
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
import { getClient } from "@/api/AxiosClient";
22
import { useCredentialGetter } from "@/hooks/useCredentialGetter";
33
import { useQuery } from "@tanstack/react-query";
4-
import { useParams } from "react-router-dom";
4+
import { useLocation, useParams } from "react-router-dom";
55
import { getSampleForInitialFormValues } from "../data/sampleTaskData";
66
import { SampleCase, sampleCases } from "../types";
77
import { CreateNewTaskForm } from "./CreateNewTaskForm";
88
import { SavedTaskForm } from "./SavedTaskForm";
9-
import { WorkflowParameter } from "@/api/types";
9+
import { TaskGenerationApiResponse, WorkflowParameter } from "@/api/types";
1010

1111
function CreateNewTaskFormPage() {
1212
const { template } = useParams();
1313
const credentialGetter = useCredentialGetter();
14+
const location = useLocation();
1415

1516
const { data, isFetching } = useQuery({
1617
queryKey: ["savedTask", template],
@@ -29,6 +30,41 @@ function CreateNewTaskFormPage() {
2930
return <div>Invalid template</div>;
3031
}
3132

33+
if (template === "from-prompt") {
34+
const data = location.state?.data as TaskGenerationApiResponse;
35+
if (!data.url) {
36+
return <div>Something went wrong, please try again</div>; // this should never happen
37+
}
38+
return (
39+
<div className="space-y-4">
40+
<header>
41+
<h1 className="text-3xl">Create New Task</h1>
42+
</header>
43+
<CreateNewTaskForm
44+
key={template}
45+
initialValues={{
46+
url: data.url,
47+
navigationGoal: data.navigation_goal,
48+
dataExtractionGoal: data.data_extraction_goal,
49+
navigationPayload:
50+
typeof data.navigation_payload === "string"
51+
? data.navigation_payload
52+
: JSON.stringify(data.navigation_payload, null, 2),
53+
extractedInformationSchema: JSON.stringify(
54+
data.extracted_information_schema,
55+
null,
56+
2,
57+
),
58+
errorCodeMapping: null,
59+
totpIdentifier: null,
60+
totpVerificationUrl: null,
61+
webhookCallbackUrl: null,
62+
}}
63+
/>
64+
</div>
65+
);
66+
}
67+
3268
if (sampleCases.includes(template as SampleCase)) {
3369
return (
3470
<div className="space-y-4">

skyvern-frontend/src/routes/tasks/create/PromptBox.tsx

+6-37
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,6 @@ import {
1616
ScrollBar,
1717
} from "@/components/ui/scroll-area";
1818

19-
function createTaskFromTaskGenerationParameters(
20-
values: TaskGenerationApiResponse,
21-
) {
22-
return {
23-
url: values.url,
24-
navigation_goal: values.navigation_goal,
25-
data_extraction_goal: values.data_extraction_goal,
26-
proxy_location: "RESIDENTIAL",
27-
navigation_payload: values.navigation_payload,
28-
extracted_information_schema: values.extracted_information_schema,
29-
};
30-
}
31-
3219
function createTemplateTaskFromTaskGenerationParameters(
3320
values: TaskGenerationApiResponse,
3421
) {
@@ -120,27 +107,6 @@ function PromptBox() {
120107
},
121108
});
122109

123-
const runTaskMutation = useMutation({
124-
mutationFn: async (params: TaskGenerationApiResponse) => {
125-
const client = await getClient(credentialGetter);
126-
const data = createTaskFromTaskGenerationParameters(params);
127-
return client.post<
128-
ReturnType<typeof createTaskFromTaskGenerationParameters>,
129-
{ data: { task_id: string } }
130-
>("/tasks", data);
131-
},
132-
onSuccess: (response) => {
133-
navigate(`/tasks/${response.data.task_id}/actions`);
134-
},
135-
onError: (error: AxiosError) => {
136-
toast({
137-
variant: "destructive",
138-
title: "Error running task",
139-
description: error.message,
140-
});
141-
},
142-
});
143-
144110
return (
145111
<div>
146112
<div
@@ -163,8 +129,7 @@ function PromptBox() {
163129
/>
164130
<div className="h-full">
165131
{getTaskFromPromptMutation.isPending ||
166-
saveTaskMutation.isPending ||
167-
runTaskMutation.isPending ? (
132+
saveTaskMutation.isPending ? (
168133
<ReloadIcon className="h-6 w-6 animate-spin" />
169134
) : (
170135
<PaperPlaneIcon
@@ -173,7 +138,11 @@ function PromptBox() {
173138
const taskGenerationResponse =
174139
await getTaskFromPromptMutation.mutateAsync(prompt);
175140
await saveTaskMutation.mutateAsync(taskGenerationResponse);
176-
await runTaskMutation.mutateAsync(taskGenerationResponse);
141+
navigate("/create/from-prompt", {
142+
state: {
143+
data: taskGenerationResponse,
144+
},
145+
});
177146
}}
178147
/>
179148
)}

0 commit comments

Comments
 (0)