import { LightningBoltIcon } from "@radix-ui/react-icons"; import { Tip } from "@/components/Tip"; import { Status } from "@/api/types"; import { StatusBadge } from "@/components/StatusBadge"; import { StatusFilterDropdown } from "@/components/StatusFilterDropdown"; import { Button } from "@/components/ui/button"; import { Pagination, PaginationContent, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from "@/components/ui/pagination"; import { Skeleton } from "@/components/ui/skeleton"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { basicLocalTimeFormat, basicTimeFormat } from "@/util/timeFormat"; import { cn } from "@/util/utils"; import { Pencil2Icon, PlayIcon } from "@radix-ui/react-icons"; import { useEffect, useState } from "react"; import { Link, useNavigate, useParams, useSearchParams, } from "react-router-dom"; import { useWorkflowQuery } from "./hooks/useWorkflowQuery"; import { useWorkflowRunsQuery } from "./hooks/useWorkflowRunsQuery"; import { WorkflowActions } from "./WorkflowActions"; function WorkflowPage() { const { workflowPermanentId } = useParams(); const [searchParams, setSearchParams] = useSearchParams(); const page = searchParams.get("page") ? Number(searchParams.get("page")) : 1; const [statusFilters, setStatusFilters] = useState>([]); const navigate = useNavigate(); const PAGE_SIZE = 10; const { data: workflowRuns, isLoading } = useWorkflowRunsQuery({ workflowPermanentId, statusFilters, page, refetchOnMount: "always", }); useEffect(() => { if (!isLoading && workflowRuns && workflowRuns.length === 0 && page > 1) { const params = new URLSearchParams(); params.set("page", String(page - 1)); setSearchParams(params, { replace: true }); } }, [workflowRuns, isLoading, page, setSearchParams]); const { data: workflow, isLoading: workflowIsLoading } = useWorkflowQuery({ workflowPermanentId, }); if (!workflowPermanentId) { return null; // this should never happen } return (
{workflowIsLoading ? ( <> ) : ( <>

{workflow?.title}

{workflowPermanentId}

)}
{workflow && ( navigate("/workflows")} /> )}

Past Runs

ID Status Created At {isLoading ? ( Loading... ) : workflowRuns?.length === 0 ? ( No workflow runs found ) : ( workflowRuns?.map((workflowRun) => { const workflowRunId = workflowRun.script_run === true ? (
{workflowRun.workflow_run_id ?? ""}
) : ( workflowRun.workflow_run_id ?? "" ); return ( { if (event.ctrlKey || event.metaKey) { window.open( window.location.origin + `/workflows/${workflowPermanentId}/${workflowRun.workflow_run_id}/overview`, "_blank", "noopener,noreferrer", ); return; } navigate( `/workflows/${workflowPermanentId}/${workflowRun.workflow_run_id}/overview`, ); }} className="cursor-pointer" > {workflowRunId} {basicLocalTimeFormat(workflowRun.created_at)} ); }) )}
{ if (page === 1) { return; } const params = new URLSearchParams(); params.set("page", String(Math.max(1, page - 1))); setSearchParams(params, { replace: true }); }} /> {page} { if (workflowRuns && workflowRuns.length < PAGE_SIZE) { return; } const params = new URLSearchParams(); params.set("page", String(page + 1)); setSearchParams(params, { replace: true }); }} />
); } export { WorkflowPage };