Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f9fb834

Browse files
feat(site): allow starting task workspace from task page
1 parent 6d39077 commit f9fb834

File tree

1 file changed

+47
-22
lines changed

1 file changed

+47
-22
lines changed

site/src/pages/TaskPage/TaskPage.tsx

Lines changed: 47 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { AI_PROMPT_PARAMETER_NAME, type Task } from "modules/tasks/tasks";
1919
import { WorkspaceBuildLogs } from "modules/workspaces/WorkspaceBuildLogs/WorkspaceBuildLogs";
2020
import { type FC, type ReactNode, useLayoutEffect, useRef } from "react";
2121
import { Helmet } from "react-helmet-async";
22-
import { useQuery } from "react-query";
22+
import { useMutation, useQuery, useQueryClient } from "react-query";
2323
import { Panel, PanelGroup, PanelResizeHandle } from "react-resizable-panels";
2424
import { Link as RouterLink, useParams } from "react-router";
2525
import type { FixedSizeList } from "react-window";
@@ -31,6 +31,7 @@ import {
3131
import { TaskApps } from "./TaskApps";
3232
import { TaskSidebar } from "./TaskSidebar";
3333
import { TaskTopbar } from "./TaskTopbar";
34+
import { startWorkspace } from "api/queries/workspaces";
3435

3536
const TaskPage = () => {
3637
const { workspace: workspaceName, username } = useParams() as {
@@ -119,27 +120,7 @@ const TaskPage = () => {
119120
</div>
120121
);
121122
} else if (task.workspace.latest_build.status !== "running") {
122-
content = (
123-
<Margins>
124-
<div className="w-full min-h-80 flex items-center justify-center">
125-
<div className="flex flex-col items-center">
126-
<h3 className="m-0 font-medium text-content-primary text-base">
127-
Workspace is not running
128-
</h3>
129-
<span className="text-content-secondary text-sm">
130-
Apps and previous statuses are not available
131-
</span>
132-
<Button size="sm" className="mt-4" asChild>
133-
<RouterLink
134-
to={`/@${task.workspace.owner_name}/${task.workspace.name}`}
135-
>
136-
View workspace
137-
</RouterLink>
138-
</Button>
139-
</div>
140-
</div>
141-
</Margins>
142-
);
123+
content = <WorkspaceNotRunning task={task} />;
143124
} else if (agent && ["created", "starting"].includes(agent.lifecycle_state)) {
144125
content = <TaskStartingAgent agent={agent} />;
145126
} else {
@@ -174,6 +155,50 @@ const TaskPage = () => {
174155

175156
export default TaskPage;
176157

158+
type WorkspaceNotRunningProps = {
159+
task: Task;
160+
};
161+
162+
const WorkspaceNotRunning: FC<WorkspaceNotRunningProps> = ({ task }) => {
163+
const queryClient = useQueryClient();
164+
165+
const mutateStartWorkspace = useMutation({
166+
...startWorkspace(task?.workspace, queryClient),
167+
});
168+
169+
return (
170+
<Margins>
171+
<div className="w-full min-h-80 flex items-center justify-center">
172+
<div className="flex flex-col items-center">
173+
<h3 className="m-0 font-medium text-content-primary text-base">
174+
Workspace is not running
175+
</h3>
176+
<span className="text-content-secondary text-sm">
177+
Apps and previous statuses are not available
178+
</span>
179+
<div className="flex flex-row mt-4 gap-4">
180+
<Button
181+
size="sm"
182+
onClick={() => {
183+
mutateStartWorkspace?.mutate({});
184+
}}
185+
>
186+
Start workspace
187+
</Button>
188+
<Button size="sm" asChild>
189+
<RouterLink
190+
to={`/@${task.workspace.owner_name}/${task.workspace.name}`}
191+
>
192+
View workspace
193+
</RouterLink>
194+
</Button>
195+
</div>
196+
</div>
197+
</div>
198+
</Margins>
199+
);
200+
};
201+
177202
type TaskBuildingWorkspaceProps = { task: Task };
178203

179204
const TaskBuildingWorkspace: FC<TaskBuildingWorkspaceProps> = ({ task }) => {

0 commit comments

Comments
 (0)