Skip to content

Commit 6d0943a

Browse files
feat: don't redirect to task page when it is created (#19919)
**Demo:** https://github.com/user-attachments/assets/3ffaa13e-553f-43d2-9fad-d4d3ea7a4ede Closes #19675
1 parent 8f3e03a commit 6d0943a

File tree

3 files changed

+25
-11
lines changed

3 files changed

+25
-11
lines changed

site/src/pages/TasksPage/TaskPrompt.tsx

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import type {
1010
import { ErrorAlert } from "components/Alert/ErrorAlert";
1111
import { Button } from "components/Button/Button";
1212
import { ExternalImage } from "components/ExternalImage/ExternalImage";
13-
import { displayError } from "components/GlobalSnackbar/utils";
13+
import { displayError, displaySuccess } from "components/GlobalSnackbar/utils";
1414
import { Link } from "components/Link/Link";
1515
import {
1616
Select,
@@ -33,7 +33,6 @@ import { RedoIcon, RotateCcwIcon, SendIcon } from "lucide-react";
3333
import { AI_PROMPT_PARAMETER_NAME } from "modules/tasks/tasks";
3434
import { type FC, useEffect, useState } from "react";
3535
import { useMutation, useQuery, useQueryClient } from "react-query";
36-
import { useNavigate } from "react-router";
3736
import TextareaAutosize from "react-textarea-autosize";
3837
import { docs } from "utils/docs";
3938

@@ -50,8 +49,6 @@ export const TaskPrompt: FC<TaskPromptProps> = ({
5049
error,
5150
onRetry,
5251
}) => {
53-
const navigate = useNavigate();
54-
5552
if (error) {
5653
return <TaskPromptLoadingError error={error} onRetry={onRetry} />;
5754
}
@@ -64,8 +61,8 @@ export const TaskPrompt: FC<TaskPromptProps> = ({
6461
return (
6562
<CreateTaskForm
6663
templates={templates}
67-
onSuccess={(task) => {
68-
navigate(`/tasks/${task.owner_name}/${task.name}`);
64+
onSuccess={() => {
65+
displaySuccess("Task created successfully");
6966
}}
7067
/>
7168
);
@@ -195,9 +192,7 @@ const CreateTaskForm: FC<CreateTaskFormProps> = ({ templates, onSuccess }) => {
195192
template_version_preset_id: selectedPresetId,
196193
}),
197194
onSuccess: async (task) => {
198-
await queryClient.invalidateQueries({
199-
queryKey: ["tasks"],
200-
});
195+
await queryClient.invalidateQueries({ queryKey: ["tasks"] });
201196
onSuccess(task);
202197
},
203198
});

site/src/pages/TasksPage/TasksPage.stories.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ export const LoadedTasksWaitingForInputTab: Story = {
226226
};
227227

228228
export const CreateTaskSuccessfully: Story = {
229+
decorators: [withGlobalSnackbar],
229230
parameters: {
230231
reactRouter: reactRouterParameters({
231232
location: {
@@ -261,8 +262,17 @@ export const CreateTaskSuccessfully: Story = {
261262
await userEvent.click(submitButton);
262263
});
263264

264-
await step("Redirects to the task page", async () => {
265-
await canvas.findByText(/task page/i);
265+
await step("Displays success message", async () => {
266+
const body = within(canvasElement.ownerDocument.body);
267+
const successMessage = await body.findByText(/task created/i);
268+
expect(successMessage).toBeInTheDocument();
269+
});
270+
271+
await step("Find task in the table", async () => {
272+
const table = canvasElement.querySelector("table");
273+
await waitFor(() => {
274+
expect(table).toHaveTextContent(MockNewTaskData.prompt);
275+
});
266276
});
267277
},
268278
};

site/src/pages/TasksPage/TasksPage.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,15 @@ const TasksPage: FC = () => {
4343
queryKey: ["tasks", filter],
4444
queryFn: () => API.experimental.getTasks(filter),
4545
refetchInterval: 10_000,
46+
// TODO: Switch to sorting by latest_status_app.created_at once it’s reliable.
47+
// Currently, it doesn’t always update fast enough for a good UX, so we’re
48+
// temporarily sorting by workspace.created_at instead.
49+
select: (tasks) =>
50+
tasks.toSorted(
51+
(a, b) =>
52+
new Date(b.workspace.created_at).getTime() -
53+
new Date(a.workspace.created_at).getTime(),
54+
),
4655
});
4756
const idleTasks = tasksQuery.data?.filter(
4857
(task) => task.workspace.latest_app_status?.state === "idle",

0 commit comments

Comments
 (0)