import { useEffect, useMemo, useState } from "react"; import { useParams } from "react-router"; import type { BundledLanguage } from "@pierre/diffs"; import { useRunGraphSource, useRunStages } from "../lib/queries"; import { LoadingState } from "../components/state"; import { StageSidebar } from "../components/stage-sidebar"; import { CollapsibleFile } from "../components/collapsible-file"; import { registerDotLanguage } from "../data/register-dot-language"; import { mapRunStagesToSidebarStages } from "../lib/stage-sidebar"; export const handle = { wide: true }; export default function RunSource() { const { id } = useParams(); const stagesQuery = useRunStages(id); const sourceQuery = useRunGraphSource(id, true); const stages = useMemo( () => mapRunStagesToSidebarStages(stagesQuery.data), [stagesQuery.data], ); const [dotReady, setDotReady] = useState(false); useEffect(() => { let cancelled = false; registerDotLanguage().then(() => { if (!cancelled) setDotReady(true); }); return () => { cancelled = true; }; }, []); const source = sourceQuery.data; const loading = source === undefined && !sourceQuery.error; return (
{loading || !dotReady ? (
) : !source ? (

No graph source available for this run.

) : ( )}
); }