import { CheckCircledIcon, CrossCircledIcon, CubeIcon, ExternalLinkIcon, } from "@radix-ui/react-icons"; import { workflowBlockTitle } from "../editor/nodes/types"; import { WorkflowBlockIcon } from "../editor/nodes/WorkflowBlockIcon"; import { isAction, isWorkflowRunBlock, WorkflowRunBlock, } from "../types/workflowRunTypes"; import { ActionCard } from "./ActionCard"; import { ActionItem, WorkflowRunOverviewActiveElement, } from "./WorkflowRunOverview"; import { cn } from "@/util/utils"; import { isTaskVariantBlock } from "../types/workflowTypes"; import { Link } from "react-router-dom"; import { useCallback } from "react"; import { Status } from "@/api/types"; type Props = { activeItem: WorkflowRunOverviewActiveElement; block: WorkflowRunBlock; subBlocks: Array; onBlockItemClick: (block: WorkflowRunBlock) => void; onActionClick: (action: ActionItem) => void; }; function WorkflowRunTimelineBlockItem({ activeItem, block, subBlocks, onBlockItemClick, onActionClick, }: Props) { const actions = block.actions ?? []; const hasActiveAction = isAction(activeItem) && Boolean( block.actions?.find( (action) => action.action_id === activeItem.action_id, ), ); const isActiveBlock = isWorkflowRunBlock(activeItem) && activeItem.workflow_run_block_id === block.workflow_run_block_id; const showDiagnosticLink = isTaskVariantBlock(block) && (hasActiveAction || isActiveBlock); const refCallback = useCallback((element: HTMLDivElement | null) => { if ( element && isWorkflowRunBlock(activeItem) && activeItem.workflow_run_block_id === block.workflow_run_block_id ) { element.scrollIntoView({ behavior: "smooth", block: "start", }); } // this should only run once at mount. // eslint-disable-next-line react-hooks/exhaustive-deps }, []); const showStatusIndicator = block.status !== null; const showSuccessIndicator = showStatusIndicator && block.status === Status.Completed; const showFailureIndicator = showStatusIndicator && (block.status === Status.Failed || block.status === Status.Terminated || block.status === Status.TimedOut || block.status === Status.Canceled); return (
{ event.stopPropagation(); onBlockItemClick(block); }} ref={refCallback} >
{workflowBlockTitle[block.block_type]} {block.label}
{showFailureIndicator && (
)} {showSuccessIndicator && (
)}
{showDiagnosticLink ? (
Diagnostics
) : ( <> Block )}
{block.description ? (
{block.description}
) : null}
{actions.map((action, index) => { return ( { event.stopPropagation(); const actionItem: ActionItem = { block, action, }; onActionClick(actionItem); }} /> ); })} {subBlocks.map((block) => { return ( ); })}
); } export { WorkflowRunTimelineBlockItem };