2024-04-01 21:34:52 +03:00
|
|
|
import { client } from "@/api/AxiosClient";
|
|
|
|
|
import { Status, TaskApiResponse } from "@/api/types";
|
|
|
|
|
import { keepPreviousData, useQuery } from "@tanstack/react-query";
|
|
|
|
|
import { useNavigate, useSearchParams } from "react-router-dom";
|
|
|
|
|
import {
|
|
|
|
|
Card,
|
|
|
|
|
CardContent,
|
|
|
|
|
CardDescription,
|
|
|
|
|
CardFooter,
|
|
|
|
|
CardHeader,
|
|
|
|
|
CardTitle,
|
|
|
|
|
} from "@/components/ui/card";
|
|
|
|
|
import { PAGE_SIZE } from "../constants";
|
|
|
|
|
import { basicTimeFormat } from "@/util/timeFormat";
|
2024-04-07 21:52:59 +03:00
|
|
|
import { LatestScreenshot } from "./LatestScreenshot";
|
2024-04-01 21:34:52 +03:00
|
|
|
|
|
|
|
|
function RunningTasks() {
|
|
|
|
|
const navigate = useNavigate();
|
|
|
|
|
const [searchParams] = useSearchParams();
|
|
|
|
|
const page = searchParams.get("page") ? Number(searchParams.get("page")) : 1;
|
|
|
|
|
|
2024-04-07 21:52:59 +03:00
|
|
|
const { data: tasks } = useQuery<Array<TaskApiResponse>>({
|
2024-04-01 21:34:52 +03:00
|
|
|
queryKey: ["tasks", page],
|
|
|
|
|
queryFn: async () => {
|
|
|
|
|
return client
|
|
|
|
|
.get("/tasks", {
|
|
|
|
|
params: {
|
2024-04-24 19:07:00 +03:00
|
|
|
page: 1,
|
2024-04-01 21:34:52 +03:00
|
|
|
page_size: PAGE_SIZE,
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
.then((response) => response.data);
|
|
|
|
|
},
|
|
|
|
|
refetchInterval: 3000,
|
|
|
|
|
placeholderData: keepPreviousData,
|
|
|
|
|
});
|
|
|
|
|
|
2024-04-07 21:52:59 +03:00
|
|
|
const runningTasks = tasks?.filter((task) => task.status === Status.Running);
|
2024-04-01 21:34:52 +03:00
|
|
|
|
2024-04-07 21:52:59 +03:00
|
|
|
if (runningTasks?.length === 0) {
|
2024-04-01 21:34:52 +03:00
|
|
|
return <div>No running tasks</div>;
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-07 21:52:59 +03:00
|
|
|
return runningTasks?.map((task) => {
|
2024-04-01 21:34:52 +03:00
|
|
|
return (
|
|
|
|
|
<Card
|
|
|
|
|
key={task.task_id}
|
|
|
|
|
className="hover:bg-primary-foreground cursor-pointer"
|
|
|
|
|
onClick={() => {
|
|
|
|
|
navigate(`/tasks/${task.task_id}`);
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
<CardHeader>
|
2024-04-07 21:52:59 +03:00
|
|
|
<CardTitle>{task.task_id}</CardTitle>
|
|
|
|
|
<CardDescription className="whitespace-nowrap overflow-hidden text-ellipsis">
|
|
|
|
|
{task.request.url}
|
|
|
|
|
</CardDescription>
|
2024-04-01 21:34:52 +03:00
|
|
|
</CardHeader>
|
2024-04-07 21:52:59 +03:00
|
|
|
<CardContent>
|
|
|
|
|
Latest screenshot:
|
|
|
|
|
<div className="w-40 h-40 border-2">
|
|
|
|
|
<LatestScreenshot id={task.task_id} />
|
|
|
|
|
</div>
|
|
|
|
|
</CardContent>
|
2024-04-01 21:34:52 +03:00
|
|
|
<CardFooter>Created: {basicTimeFormat(task.created_at)}</CardFooter>
|
|
|
|
|
</Card>
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export { RunningTasks };
|