From bc0c1fbb5ae90d2815a36867a6d8e26641f0db76 Mon Sep 17 00:00:00 2001 From: Hazem Nureldin Date: Thu, 23 Jul 2026 15:10:31 +0100 Subject: [PATCH] feat: display workflow submission time in the workflows list --- .../lib/components/BaseWorkflowRelay.tsx | 26 +++++++++++++++++++ .../lib/views/SingleWorkflowView.tsx | 18 +++++++------ .../relay-workflows-lib/relay.config.json | 5 +++- .../components/workflow/WorkflowAccordion.tsx | 6 +++++ frontend/workflows-lib/lib/types.ts | 1 + 5 files changed, 47 insertions(+), 9 deletions(-) diff --git a/frontend/relay-workflows-lib/lib/components/BaseWorkflowRelay.tsx b/frontend/relay-workflows-lib/lib/components/BaseWorkflowRelay.tsx index fb92e1a42..ccb891dc1 100644 --- a/frontend/relay-workflows-lib/lib/components/BaseWorkflowRelay.tsx +++ b/frontend/relay-workflows-lib/lib/components/BaseWorkflowRelay.tsx @@ -24,7 +24,24 @@ export const BaseWorkflowRelayFragment = graphql` } status { __typename + + ... on WorkflowRunningStatus { + startTime + } + + ... on WorkflowSucceededStatus { + startTime + } + + ... on WorkflowFailedStatus { + startTime + } + + ... on WorkflowErroredStatus { + startTime + } } + ...WorkflowTasksFragment } `; @@ -50,6 +67,14 @@ export default function BaseWorkflowRelay({ const navigate = useNavigate(); const data = useFragment(BaseWorkflowRelayFragment, fragmentRef); const statusText = data.status?.__typename ?? "Unknown"; + const submittedTime = + data.status?.__typename === "WorkflowRunningStatus" || + data.status?.__typename === "WorkflowSucceededStatus" || + data.status?.__typename === "WorkflowFailedStatus" || + data.status?.__typename === "WorkflowErroredStatus" + ? data.status.startTime + : undefined; + const [selectedTaskIds, setSelectedTaskIds] = useSelectedTaskIds(); const onNavigate = React.useCallback( @@ -94,6 +119,7 @@ export default function BaseWorkflowRelay({ instrumentSession: data.visit, status: statusText as WorkflowStatus, creator: data.creator.creatorId, + submittedTime, }} workflowLink={workflowLink} expanded={expanded} diff --git a/frontend/relay-workflows-lib/lib/views/SingleWorkflowView.tsx b/frontend/relay-workflows-lib/lib/views/SingleWorkflowView.tsx index 3aed782dc..788c85084 100644 --- a/frontend/relay-workflows-lib/lib/views/SingleWorkflowView.tsx +++ b/frontend/relay-workflows-lib/lib/views/SingleWorkflowView.tsx @@ -33,19 +33,21 @@ export default function SingleWorkflowView(props: SingleWorkflowViewProps) { name: props.workflowName, }, ); - const finished = - queryData.workflow?.status?.__typename && - finishedStatuses.has(queryData.workflow.status.__typename); + const [isNull, setIsNull] = useState(false); + const onNullSubscriptionData = () => { setIsNull(true); }; - return finished || isNull ? ( - + const workflow = queryData.workflow; + + const finished = + workflow?.status != null && + finishedStatuses.has(workflow.status.__typename); + + return workflow && (finished || isNull) ? ( + ) : ( = ({ Creator: {workflow.creator || "Unknown"} + + {workflow.submittedTime && ( + + Submitted: {new Date(workflow.submittedTime).toLocaleString()} + + )} {children} diff --git a/frontend/workflows-lib/lib/types.ts b/frontend/workflows-lib/lib/types.ts index e1ded1350..b58916174 100644 --- a/frontend/workflows-lib/lib/types.ts +++ b/frontend/workflows-lib/lib/types.ts @@ -45,6 +45,7 @@ export interface Workflow { instrumentSession: Visit; status: WorkflowStatus; creator: string; + submittedTime?: string; } export interface Visit {