blob: bfbe4bdf20cad503a233729ab54c11be3350ca7c [file]
import { useNavigate } from "react-router-dom";
import { useRunData } from "../Run/Run";
import { TaskView } from "./Task";
import { MAX_RUNS_QUERIED } from "../Runs";
import {
useIndividualNodeRunData,
useLatestDAGRuns,
} from "../../../../state/api/friendlyApi";
import { useURLParams } from "../../../../state/urlState";
import { Loading } from "../../../common/Loading";
import { ErrorPage } from "../../../common/Error";
export const TaskRunOutlet = () => {
const { runs, dagTemplates: projectVersions } = useRunData();
const { taskName, projectId } = useURLParams();
const availableRuns = useLatestDAGRuns({
projectId: projectId as number,
limit: MAX_RUNS_QUERIED,
});
const nav = useNavigate();
const nodeRunData = useIndividualNodeRunData({
dagRunIds: runs.map((i) => i.id as number).join(","),
nodeName: taskName as string,
});
if (
availableRuns.isLoading ||
availableRuns.isFetching ||
availableRuns.isUninitialized ||
nodeRunData.isLoading ||
nodeRunData.isFetching ||
nodeRunData.isUninitialized
) {
return <Loading />;
}
if (availableRuns.isError) {
return <ErrorPage message={`Failed to load runs`} />;
}
if (nodeRunData.isError) {
return <ErrorPage message={`Failed to load node run data`} />;
}
/**
* Sets the URL to replace /runs/<comma-separated list of run ids>/task/<task name> with the new list of run ids
*
* @param runIds
*/
const setRuns = (runIds: number[]) => {
nav(
`/dashboard/project/${projectId}/runs/${runIds.join(
","
)}/task/${taskName}`
);
};
return (
<TaskView
taskName={taskName as string}
projectId={projectId as number}
projectVersions={projectVersions}
// TODO -- we should be able to filter this out when we have more info
// But for now it might just be too much
knownRunIds={availableRuns.data?.map((i) => i.id as number) || []}
nodeRunData={nodeRunData.data || []}
setRuns={setRuns}
fullRuns={runs} // we don't really need the data -- we should just compute the node links here...
/>
);
};