From 2c5eafabbb1baeb35d7c3b8eb698fb001c9e5f68 Mon Sep 17 00:00:00 2001 From: Camiel van Schoonhoven Date: Tue, 9 Dec 2025 10:37:48 -0800 Subject: [PATCH] Cleanup RunDetails --- .../Editor/Context/PipelineDetails.tsx | 2 +- src/components/PipelineRun/RunDetails.tsx | 199 +++++++----------- .../shared/ArtifactsList/ArtifactsList.tsx | 103 --------- .../PipelineIO.tsx | 0 4 files changed, 81 insertions(+), 223 deletions(-) delete mode 100644 src/components/shared/ArtifactsList/ArtifactsList.tsx rename src/components/shared/{ArtifactsList => Execution}/PipelineIO.tsx (100%) diff --git a/src/components/Editor/Context/PipelineDetails.tsx b/src/components/Editor/Context/PipelineDetails.tsx index 4436d4d44..f24a7b595 100644 --- a/src/components/Editor/Context/PipelineDetails.tsx +++ b/src/components/Editor/Context/PipelineDetails.tsx @@ -12,7 +12,7 @@ import { useComponentSpec } from "@/providers/ComponentSpecProvider"; import { getComponentFileFromList } from "@/utils/componentStore"; import { USER_PIPELINES_LIST_NAME } from "@/utils/constants"; -import PipelineIO from "../../shared/ArtifactsList/PipelineIO"; +import PipelineIO from "../../shared/Execution/PipelineIO"; import { PipelineValidationList } from "./PipelineValidationList"; import RenamePipeline from "./RenamePipeline"; diff --git a/src/components/PipelineRun/RunDetails.tsx b/src/components/PipelineRun/RunDetails.tsx index 617facaac..6e94efa4b 100644 --- a/src/components/PipelineRun/RunDetails.tsx +++ b/src/components/PipelineRun/RunDetails.tsx @@ -1,10 +1,7 @@ -import { Frown } from "lucide-react"; - -import { ArtifactsList } from "@/components/shared/ArtifactsList/ArtifactsList"; import { CopyText } from "@/components/shared/CopyText/CopyText"; import { BlockStack, InlineStack } from "@/components/ui/layout"; import { Spinner } from "@/components/ui/spinner"; -import { Text } from "@/components/ui/typography"; +import { Paragraph, Text } from "@/components/ui/typography"; import { useCheckComponentSpecFromPath } from "@/hooks/useCheckComponentSpecFromPath"; import { useUserDetails } from "@/hooks/useUserDetails"; import { useBackend } from "@/providers/BackendProvider"; @@ -17,6 +14,14 @@ import { isStatusInProgress, } from "@/services/executionService"; +import { + ActionBlock, + type ActionOrReactNode, +} from "../shared/ContextPanel/Blocks/ActionBlock"; +import { ContentBlock } from "../shared/ContextPanel/Blocks/ContentBlock"; +import { ListBlock } from "../shared/ContextPanel/Blocks/ListBlock"; +import { TextBlock } from "../shared/ContextPanel/Blocks/TextBlock"; +import PipelineIO from "../shared/Execution/PipelineIO"; import { InfoBox } from "../shared/InfoBox"; import { StatusBar, StatusText } from "../shared/Status"; import { TaskImplementation } from "../shared/TaskDetails"; @@ -52,29 +57,30 @@ export const RunDetails = () => { if (error || !details || !state || !componentSpec) { return ( -
- -
- Error loading run details. -
-
+ + + Pipeline Run could not be loaded. + + ); } if (isLoading) { return ( -
+ -

Loading run details...

-
+ Loading run details... + ); } if (!configured) { return ( - - Configure a backend to view execution artifacts. - + + + Configure a backend to view execution artifacts. + + ); } @@ -86,93 +92,67 @@ export const RunDetails = () => { const annotations = componentSpec.metadata?.annotations || {}; + const actions: ActionOrReactNode[] = []; + + actions.push( + , + ); + + if (canAccessEditorSpec && componentSpec.name) { + actions.push( + , + ); + } + + actions.push( + , + ); + + if (isInProgress && isRunCreator) { + actions.push(); + } + + if (isComplete) { + actions.push( + , + ); + } + return ( {componentSpec.name ?? "Unnamed Pipeline"} - - - {canAccessEditorSpec && componentSpec.name && ( - - )} - - {isInProgress && isRunCreator && ( - - )} - {isComplete && } - + {metadata && ( - - - Run Info - -
- {metadata.id && ( - - - Run Id: - -
- - {metadata.id} - -
-
- )} - {metadata.root_execution_id && ( - - - Execution Id: - -
- - {metadata.root_execution_id} - -
-
- )} - {metadata.created_by && ( - - - Created by: - -
{metadata.created_by}
-
- )} - {metadata.created_at && ( - - - Created at: - -
{new Date(metadata.created_at).toLocaleString()}
-
- )} -
-
+ )} {componentSpec.description && ( - - - Description - - - {componentSpec.description} - - + )} - - - Status - + {runStatus} @@ -180,39 +160,20 @@ export const RunDetails = () => { - + {Object.keys(annotations).length > 0 && ( - - - Annotations - -
    - {Object.entries(annotations).map(([key, value]) => ( -
  • - - {key}: - {" "} - - {String(value)} - -
  • - ))} -
-
+ ({ + label: key, + value: String(value), + }))} + marker="none" + /> )} - ({ - name: input.name, - type: typeof input.type === "string" ? input.type : "object", - value: input.value ?? input.default, - }))} - outputs={(componentSpec.outputs ?? []).map((output) => ({ - name: output.name, - type: typeof output.type === "string" ? output.type : "object", - }))} - /> +
); }; diff --git a/src/components/shared/ArtifactsList/ArtifactsList.tsx b/src/components/shared/ArtifactsList/ArtifactsList.tsx deleted file mode 100644 index 726ad4e64..000000000 --- a/src/components/shared/ArtifactsList/ArtifactsList.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import { type ReactNode } from "react"; - -import { CopyText } from "@/components/shared/CopyText/CopyText"; -import { BlockStack, InlineStack } from "@/components/ui/layout"; -import { Text } from "@/components/ui/typography"; - -interface ArtifactItem { - name: string; - type: string; - value?: string; - actions?: ReactNode; -} - -interface ArtifactsSectionProps { - title: string; - items: ArtifactItem[]; - emptyMessage?: string; - disableCopy?: boolean; -} - -const ArtifactsSection = ({ - title, - items, - emptyMessage = "None", - disableCopy = false, -}: ArtifactsSectionProps) => ( - - - {title} - - {items.length > 0 ? ( - - {items.map((item) => ( - - - - {item.name}: - - {item.value !== undefined ? ( - !disableCopy ? ( - - {item.value || "No value"} - - ) : ( - - {item.value || "No value"} - - ) - ) : ( - - — - - )} - - - {item.type} - - {item.actions} - - ))} - - ) : ( - - {emptyMessage} - - )} - -); - -interface ArtifactsListProps { - inputs: ArtifactItem[]; - outputs: ArtifactItem[]; -} - -export const ArtifactsList = ({ inputs, outputs }: ArtifactsListProps) => ( - - - Artifacts - - - - - - -); diff --git a/src/components/shared/ArtifactsList/PipelineIO.tsx b/src/components/shared/Execution/PipelineIO.tsx similarity index 100% rename from src/components/shared/ArtifactsList/PipelineIO.tsx rename to src/components/shared/Execution/PipelineIO.tsx