From f82d7565a439ca4e7f4f9a2c5ab3c2576bdfdf2c Mon Sep 17 00:00:00 2001 From: frederick Date: Tue, 15 Sep 2026 11:21:04 +0100 Subject: [PATCH 01/21] updating the logging component to allow users to choose which workflow logs are displayed for. Currently limited to only successfull workflows. --- frontend/unified/src/App.tsx | 13 +- .../unified/src/components/InspectLogMeta.tsx | 155 +++++++++++++++--- .../src/components/JobsViewer/JobsTable.tsx | 38 +++-- 3 files changed, 168 insertions(+), 38 deletions(-) diff --git a/frontend/unified/src/App.tsx b/frontend/unified/src/App.tsx index b8fe598..0a99e60 100644 --- a/frontend/unified/src/App.tsx +++ b/frontend/unified/src/App.tsx @@ -5,7 +5,7 @@ import { SessionSelector, } from "./components/SessionSelector"; import { ScanSelector } from "./components/ScanSelector"; -import JobsViewer from "./components/JobsViewer/JobsViewer"; +import JobsTable from "./components/JobsViewer/JobsTable"; import { useState } from "react"; @@ -32,6 +32,7 @@ const BEAMLINE_TECHNIQUES_SUBSET = { [Beamline["I13-1"]]: [ Technique.Dpc, Technique.Ptycho, + Technique.Ptyrex, Technique.Tomo, Technique.Xanes, Technique.Xrd, @@ -93,6 +94,11 @@ export const App: React.FC = () => { const [customSession, setCustomSession] = useState( null ); + const [TableInfo, setTableInfo] = useState(0); + function setInfo(input: any) { + setTableInfo(input); + } + const { loading, error, data } = useQuery(SESSION_QUERY, { variables: {} }); if (loading) return

Loading...

; @@ -292,6 +298,7 @@ export const App: React.FC = () => { availableTemplates={filterTemplates( Technique[currentTechnique as keyof typeof Technique] )} + visit={selectedVisit} /> @@ -304,7 +311,7 @@ export const App: React.FC = () => { /> Log - + { Jobs - + diff --git a/frontend/unified/src/components/InspectLogMeta.tsx b/frontend/unified/src/components/InspectLogMeta.tsx index 5a046a6..f511e8b 100644 --- a/frontend/unified/src/components/InspectLogMeta.tsx +++ b/frontend/unified/src/components/InspectLogMeta.tsx @@ -1,5 +1,17 @@ -import React, { FC } from "react"; -import { Button, Stack } from "@mui/material"; +import React, { FC, useState } from "react"; +import { + Button, + Stack, + Menu, + MenuItem, + List, + ListItemButton, + ListItemText, + Paper, + Card, + Typography, + Divider, +} from "@mui/material"; import { useQuery } from "@apollo/client/react"; import { gql, type TypedDocumentNode } from "@apollo/client"; @@ -31,31 +43,77 @@ export const InspectLog_Query: TypedDocumentNode< } } } + ... on WorkflowErroredStatus { + message + tasks { + name + artifacts { + name + url + mimeType + } + } + } + ... on WorkflowFailedStatus { + message + tasks { + name + artifacts { + name + url + mimeType + } + } + } } } } `; -export const DisplayLogMeta: FC = (props: { visit: any }) => { +export const DisplayLogMeta: FC = (props: { visit: any; TableInfo: any }) => { + let x: any = []; + let workflownames: any = []; + let y: any = []; + + const style = { + width: "100%", + borderColor: "rgba(2, 2, 1, 0.5)", + }; + + //ToDO maybe need to Consider what to display if there is no workflow as then workflowsnames is empty + if (props.TableInfo !== undefined) { + props.TableInfo.workflows?.nodes.forEach((element: any) => { + if (element.status.__typename == "WorkflowSucceededStatus") { + workflownames.push(element.name); + } + }); + } + + const [selectedWorkflow, setSelectedWorkflow] = useState(0); + const { loading, error, data } = useQuery(InspectLog_Query, { - variables: { visitobj: props.visit, name: "example-template-599zg" }, + variables: { visitobj: props.visit, name: workflownames[0] }, //"example-template-599zg" }, }); - let x: any = []; if (data !== undefined && data !== null) { if (data.workflow !== undefined && data.workflow !== null) { - data.workflow.status?.tasks.forEach((element: any) => { - element.artifacts.forEach((subElement: any) => { - if (subElement !== undefined) { - if (subElement.url !== undefined) { - if (subElement.mimeType == "text/plain") { - x.push([subElement.url, element.name + ".log"]); + if (data.workflow.status?.__typename == "WorkflowSucceededStatus") { + data.workflow.status.tasks.forEach((element: any) => { + element.artifacts.forEach((subElement: any) => { + if (subElement !== undefined) { + if (subElement.url !== undefined) { + if (subElement.mimeType == "text/plain") { + x.push([subElement.url, element.name + ".log"]); + } } } - } + }); }); - }); + } else + y[0] = ["http://localhost:5173/unified", "Error-No-logs-found.log"]; } + } else { + y = ["http://localhost:5173/unified", "Error-No-logs-found.log"]; } const openInNewTab = (url: string) => { @@ -71,11 +129,7 @@ export const DisplayLogMeta: FC = (props: { visit: any }) => { {" "} {Arr.map((subArr: any) => { return ( - @@ -85,7 +139,70 @@ export const DisplayLogMeta: FC = (props: { visit: any }) => { ); } - return
{makeButtonArray(x)}
; + //Menu handling + const [anchorEl, setAnchorEl] = React.useState(null); + const open = Boolean(anchorEl); + const handleClose = () => { + setAnchorEl(null); + }; + const handleClickListItem = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + const handleMenuListItem = ( + event: React.MouseEvent, + index: number + ) => { + setSelectedWorkflow(index); + setAnchorEl(null); + }; + + return ( +
+ + + + + + + + + {workflownames.map((option: any, index: any) => ( + handleMenuListItem(event, index)} + > + {option} + + + ))} + + +

+ + + Choose a log from {workflownames[selectedWorkflow]}: + +

+ {makeButtonArray(x)} +

+ ); }; export default DisplayLogMeta; diff --git a/frontend/unified/src/components/JobsViewer/JobsTable.tsx b/frontend/unified/src/components/JobsViewer/JobsTable.tsx index 6f447f8..67989b0 100644 --- a/frontend/unified/src/components/JobsViewer/JobsTable.tsx +++ b/frontend/unified/src/components/JobsViewer/JobsTable.tsx @@ -3,7 +3,7 @@ import { WorkflowsQueryQuery, WorkflowsQueryQueryVariables, } from "./__generated__/JobsTable.generated"; -import { Suspense, useCallback, useState } from "react"; +import { Suspense, useCallback, useState, useEffect } from "react"; import { Visit } from "./JobsViewer"; import TableContent, { TABLECONTENT_FRAGMENT } from "./TableContent"; @@ -22,7 +22,7 @@ export const JOBSTABLE_QUERY: TypedDocumentNode< ${TABLECONTENT_FRAGMENT} `; -const JobsTable = ({ visit }: { visit: Visit }) => { +const JobsTable = ({ visit, setInfo }: { visit: Visit; setInfo: any }) => { const [selectedLimit, setSelectedLimit] = useState(5); const [currentPage, setCurrentPage] = useState(0); const [cursor, setCursor] = useState(null); @@ -45,21 +45,27 @@ const JobsTable = ({ visit }: { visit: Visit }) => { fetchPolicy: "cache-and-network", }); + useEffect(() => { + setInfo(data); + }); + return ( - - - {data && ( - - )} - - + + + + {data && ( + + )} + + + ); }; From aaf8230b5d6dff38baa2a8bed8fc575912b22568 Mon Sep 17 00:00:00 2001 From: Yousef Moazzam Date: Tue, 15 Sep 2026 13:52:34 +0100 Subject: [PATCH 02/21] Remove unnecessary wrapper function --- frontend/unified/src/App.tsx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/frontend/unified/src/App.tsx b/frontend/unified/src/App.tsx index 0a99e60..b768482 100644 --- a/frontend/unified/src/App.tsx +++ b/frontend/unified/src/App.tsx @@ -95,10 +95,6 @@ export const App: React.FC = () => { null ); const [TableInfo, setTableInfo] = useState(0); - function setInfo(input: any) { - setTableInfo(input); - } - const { loading, error, data } = useQuery(SESSION_QUERY, { variables: {} }); if (loading) return

Loading...

; @@ -321,7 +317,7 @@ export const App: React.FC = () => { Jobs - + From c8fefc635db29190219f0555d5b70b916b8fd033 Mon Sep 17 00:00:00 2001 From: Yousef Moazzam Date: Tue, 15 Sep 2026 14:01:27 +0100 Subject: [PATCH 03/21] Pass setter function through to `JobsTable` --- frontend/unified/src/App.tsx | 4 ++-- .../unified/src/components/JobsViewer/JobsTable.tsx | 8 +++++++- .../unified/src/components/JobsViewer/JobsViewer.tsx | 10 ++++++++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/frontend/unified/src/App.tsx b/frontend/unified/src/App.tsx index b768482..9431ff9 100644 --- a/frontend/unified/src/App.tsx +++ b/frontend/unified/src/App.tsx @@ -5,7 +5,7 @@ import { SessionSelector, } from "./components/SessionSelector"; import { ScanSelector } from "./components/ScanSelector"; -import JobsTable from "./components/JobsViewer/JobsTable"; +import JobsViewer from "./components/JobsViewer/JobsViewer"; import { useState } from "react"; @@ -317,7 +317,7 @@ export const App: React.FC = () => { Jobs - + diff --git a/frontend/unified/src/components/JobsViewer/JobsTable.tsx b/frontend/unified/src/components/JobsViewer/JobsTable.tsx index 67989b0..d149b2e 100644 --- a/frontend/unified/src/components/JobsViewer/JobsTable.tsx +++ b/frontend/unified/src/components/JobsViewer/JobsTable.tsx @@ -22,7 +22,13 @@ export const JOBSTABLE_QUERY: TypedDocumentNode< ${TABLECONTENT_FRAGMENT} `; -const JobsTable = ({ visit, setInfo }: { visit: Visit; setInfo: any }) => { +const JobsTable = ({ + visit, + setInfo, +}: { + visit: Visit; + setInfo: (_: number) => void; +}) => { const [selectedLimit, setSelectedLimit] = useState(5); const [currentPage, setCurrentPage] = useState(0); const [cursor, setCursor] = useState(null); diff --git a/frontend/unified/src/components/JobsViewer/JobsViewer.tsx b/frontend/unified/src/components/JobsViewer/JobsViewer.tsx index b4d5437..2eea7d4 100644 --- a/frontend/unified/src/components/JobsViewer/JobsViewer.tsx +++ b/frontend/unified/src/components/JobsViewer/JobsViewer.tsx @@ -7,10 +7,16 @@ export type Visit = { number: number; }; -const JobsViewer = ({ visit }: { visit: Visit }) => { +const JobsViewer = ({ + visit, + setInfo, +}: { + visit: Visit; + setInfo: (_: number) => void; +}) => { return ( - + ); }; From df85f6c8a1559ac1e7a8e3ae09d16213286a511f Mon Sep 17 00:00:00 2001 From: Yousef Moazzam Date: Tue, 15 Sep 2026 14:04:23 +0100 Subject: [PATCH 04/21] Add type to setter function --- frontend/unified/src/App.tsx | 5 ++++- frontend/unified/src/components/JobsViewer/JobsTable.tsx | 2 +- frontend/unified/src/components/JobsViewer/JobsViewer.tsx | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/frontend/unified/src/App.tsx b/frontend/unified/src/App.tsx index 9431ff9..0f6858b 100644 --- a/frontend/unified/src/App.tsx +++ b/frontend/unified/src/App.tsx @@ -21,6 +21,7 @@ import { SessionQueryQuery, SessionQueryQueryVariables, } from "./__generated__/App.generated"; +import { WorkflowsQueryQuery } from "./components/JobsViewer/__generated__/JobsTable.generated"; const VERTICAL_SPACING = 2; const HORIZONTAL_SPACING = 2; @@ -94,7 +95,9 @@ export const App: React.FC = () => { const [customSession, setCustomSession] = useState( null ); - const [TableInfo, setTableInfo] = useState(0); + const [TableInfo, setTableInfo] = useState( + undefined + ); const { loading, error, data } = useQuery(SESSION_QUERY, { variables: {} }); if (loading) return

Loading...

; diff --git a/frontend/unified/src/components/JobsViewer/JobsTable.tsx b/frontend/unified/src/components/JobsViewer/JobsTable.tsx index d149b2e..22d28dd 100644 --- a/frontend/unified/src/components/JobsViewer/JobsTable.tsx +++ b/frontend/unified/src/components/JobsViewer/JobsTable.tsx @@ -27,7 +27,7 @@ const JobsTable = ({ setInfo, }: { visit: Visit; - setInfo: (_: number) => void; + setInfo: (_: WorkflowsQueryQuery | undefined) => void; }) => { const [selectedLimit, setSelectedLimit] = useState(5); const [currentPage, setCurrentPage] = useState(0); diff --git a/frontend/unified/src/components/JobsViewer/JobsViewer.tsx b/frontend/unified/src/components/JobsViewer/JobsViewer.tsx index 2eea7d4..80efca1 100644 --- a/frontend/unified/src/components/JobsViewer/JobsViewer.tsx +++ b/frontend/unified/src/components/JobsViewer/JobsViewer.tsx @@ -1,5 +1,6 @@ import { Suspense } from "react"; import JobsTable from "./JobsTable"; +import { WorkflowsQueryQuery } from "./__generated__/JobsTable.generated"; export type Visit = { proposalCode: string; @@ -12,7 +13,7 @@ const JobsViewer = ({ setInfo, }: { visit: Visit; - setInfo: (_: number) => void; + setInfo: (_: WorkflowsQueryQuery | undefined) => void; }) => { return ( From 7045aa2de3cd26db390edfb4d21d354834c94b41 Mon Sep 17 00:00:00 2001 From: Yousef Moazzam Date: Tue, 15 Sep 2026 14:05:11 +0100 Subject: [PATCH 05/21] Remove unnecessary suspense --- .../src/components/JobsViewer/JobsTable.tsx | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/frontend/unified/src/components/JobsViewer/JobsTable.tsx b/frontend/unified/src/components/JobsViewer/JobsTable.tsx index 22d28dd..c35e09b 100644 --- a/frontend/unified/src/components/JobsViewer/JobsTable.tsx +++ b/frontend/unified/src/components/JobsViewer/JobsTable.tsx @@ -56,22 +56,20 @@ const JobsTable = ({ }); return ( - - - - {data && ( - - )} - - - + + + {data && ( + + )} + + ); }; From ab1bb0b8a56eaeb37f902dffe8505de2feeda859 Mon Sep 17 00:00:00 2001 From: Yousef Moazzam Date: Tue, 15 Sep 2026 14:08:59 +0100 Subject: [PATCH 06/21] Add types to log component props --- frontend/unified/src/components/InspectLogMeta.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/frontend/unified/src/components/InspectLogMeta.tsx b/frontend/unified/src/components/InspectLogMeta.tsx index f511e8b..2253b82 100644 --- a/frontend/unified/src/components/InspectLogMeta.tsx +++ b/frontend/unified/src/components/InspectLogMeta.tsx @@ -20,6 +20,8 @@ import { LogQueryQuery, LogQueryQueryVariables, } from "./__generated__/InspectLogMeta.generated"; +import { Visit } from "@diamondlightsource/sci-react-ui"; +import { WorkflowsQueryQuery } from "./JobsViewer/__generated__/JobsTable.generated"; export const InspectLog_Query: TypedDocumentNode< LogQueryQuery, @@ -70,7 +72,10 @@ export const InspectLog_Query: TypedDocumentNode< } `; -export const DisplayLogMeta: FC = (props: { visit: any; TableInfo: any }) => { +export const DisplayLogMeta: FC = (props: { + visit: Visit; + TableInfo: WorkflowsQueryQuery; +}) => { let x: any = []; let workflownames: any = []; let y: any = []; From f1e6c575117f65f8a04aca71f5a0a8481d7a3ccc Mon Sep 17 00:00:00 2001 From: Yousef Moazzam Date: Tue, 15 Sep 2026 14:11:23 +0100 Subject: [PATCH 07/21] Add type for log component props --- frontend/unified/src/components/InspectLogMeta.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/frontend/unified/src/components/InspectLogMeta.tsx b/frontend/unified/src/components/InspectLogMeta.tsx index 2253b82..dd8937f 100644 --- a/frontend/unified/src/components/InspectLogMeta.tsx +++ b/frontend/unified/src/components/InspectLogMeta.tsx @@ -72,7 +72,12 @@ export const InspectLog_Query: TypedDocumentNode< } `; -export const DisplayLogMeta: FC = (props: { +type DisplayLogMetaProps = { + visit: Visit; + TableInfo: WorkflowsQueryQuery; +}; + +export const DisplayLogMeta: FC = (props: { visit: Visit; TableInfo: WorkflowsQueryQuery; }) => { From 23ccad5924c6f5963edec512cb7cb0fb59acdb03 Mon Sep 17 00:00:00 2001 From: Yousef Moazzam Date: Tue, 15 Sep 2026 14:14:18 +0100 Subject: [PATCH 08/21] Remove unnecessary `any` type for workflow object --- frontend/unified/src/components/InspectLogMeta.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/unified/src/components/InspectLogMeta.tsx b/frontend/unified/src/components/InspectLogMeta.tsx index dd8937f..d89050f 100644 --- a/frontend/unified/src/components/InspectLogMeta.tsx +++ b/frontend/unified/src/components/InspectLogMeta.tsx @@ -92,9 +92,9 @@ export const DisplayLogMeta: FC = (props: { //ToDO maybe need to Consider what to display if there is no workflow as then workflowsnames is empty if (props.TableInfo !== undefined) { - props.TableInfo.workflows?.nodes.forEach((element: any) => { - if (element.status.__typename == "WorkflowSucceededStatus") { - workflownames.push(element.name); + props.TableInfo.workflows?.nodes.forEach((workflow) => { + if (workflow.status?.__typename == "WorkflowSucceededStatus") { + workflownames.push(workflow.name); } }); } From c88e911f07bd6fa02ce6e8bdcb36d374b154fbb9 Mon Sep 17 00:00:00 2001 From: Yousef Moazzam Date: Tue, 15 Sep 2026 14:15:10 +0100 Subject: [PATCH 09/21] Remove unnecessary `any` type for task and artifact objects --- frontend/unified/src/components/InspectLogMeta.tsx | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/frontend/unified/src/components/InspectLogMeta.tsx b/frontend/unified/src/components/InspectLogMeta.tsx index d89050f..4980ed4 100644 --- a/frontend/unified/src/components/InspectLogMeta.tsx +++ b/frontend/unified/src/components/InspectLogMeta.tsx @@ -108,14 +108,10 @@ export const DisplayLogMeta: FC = (props: { if (data !== undefined && data !== null) { if (data.workflow !== undefined && data.workflow !== null) { if (data.workflow.status?.__typename == "WorkflowSucceededStatus") { - data.workflow.status.tasks.forEach((element: any) => { - element.artifacts.forEach((subElement: any) => { - if (subElement !== undefined) { - if (subElement.url !== undefined) { - if (subElement.mimeType == "text/plain") { - x.push([subElement.url, element.name + ".log"]); - } - } + data.workflow.status.tasks.forEach((task) => { + task.artifacts.forEach((artifact) => { + if (artifact.mimeType == "text/plain") { + x.push([artifact.url, task.name + ".log"]); } }); }); From 78d761d9a1d395360ebf6924e3ad78eedc2ab861 Mon Sep 17 00:00:00 2001 From: Yousef Moazzam Date: Tue, 15 Sep 2026 14:19:25 +0100 Subject: [PATCH 10/21] Replace `any` type with string array type --- frontend/unified/src/components/InspectLogMeta.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/unified/src/components/InspectLogMeta.tsx b/frontend/unified/src/components/InspectLogMeta.tsx index 4980ed4..68d3ab1 100644 --- a/frontend/unified/src/components/InspectLogMeta.tsx +++ b/frontend/unified/src/components/InspectLogMeta.tsx @@ -82,7 +82,7 @@ export const DisplayLogMeta: FC = (props: { TableInfo: WorkflowsQueryQuery; }) => { let x: any = []; - let workflownames: any = []; + let workflownames: string[] = []; let y: any = []; const style = { @@ -179,7 +179,7 @@ export const DisplayLogMeta: FC = (props: { - {workflownames.map((option: any, index: any) => ( + {workflownames.map((option: string, index: number) => ( Date: Tue, 15 Sep 2026 14:23:48 +0100 Subject: [PATCH 11/21] Rename variable for clarity --- frontend/unified/src/components/InspectLogMeta.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/frontend/unified/src/components/InspectLogMeta.tsx b/frontend/unified/src/components/InspectLogMeta.tsx index 68d3ab1..3d8a6cb 100644 --- a/frontend/unified/src/components/InspectLogMeta.tsx +++ b/frontend/unified/src/components/InspectLogMeta.tsx @@ -81,7 +81,7 @@ export const DisplayLogMeta: FC = (props: { visit: Visit; TableInfo: WorkflowsQueryQuery; }) => { - let x: any = []; + let artifactUrlAndLogFileTuples: any = []; let workflownames: string[] = []; let y: any = []; @@ -111,7 +111,10 @@ export const DisplayLogMeta: FC = (props: { data.workflow.status.tasks.forEach((task) => { task.artifacts.forEach((artifact) => { if (artifact.mimeType == "text/plain") { - x.push([artifact.url, task.name + ".log"]); + artifactUrlAndLogFileTuples.push([ + artifact.url, + task.name + ".log", + ]); } }); }); @@ -206,7 +209,7 @@ export const DisplayLogMeta: FC = (props: { Choose a log from {workflownames[selectedWorkflow]}:

- {makeButtonArray(x)} + {makeButtonArray(artifactUrlAndLogFileTuples)} ); }; From 22c9cdec552c985af792495fb57e6a73c888dc41 Mon Sep 17 00:00:00 2001 From: Yousef Moazzam Date: Tue, 15 Sep 2026 14:25:14 +0100 Subject: [PATCH 12/21] Add type to artifact URL + logfile name variable --- frontend/unified/src/components/InspectLogMeta.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/unified/src/components/InspectLogMeta.tsx b/frontend/unified/src/components/InspectLogMeta.tsx index 3d8a6cb..2f30767 100644 --- a/frontend/unified/src/components/InspectLogMeta.tsx +++ b/frontend/unified/src/components/InspectLogMeta.tsx @@ -81,7 +81,7 @@ export const DisplayLogMeta: FC = (props: { visit: Visit; TableInfo: WorkflowsQueryQuery; }) => { - let artifactUrlAndLogFileTuples: any = []; + let artifactUrlAndLogFileTuples: [string, string][] = []; let workflownames: string[] = []; let y: any = []; From bf6051341dfc348298b18bb7b2abcd80154f8cfb Mon Sep 17 00:00:00 2001 From: Yousef Moazzam Date: Tue, 15 Sep 2026 14:28:47 +0100 Subject: [PATCH 13/21] Refactor button array generator function --- frontend/unified/src/components/InspectLogMeta.tsx | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/frontend/unified/src/components/InspectLogMeta.tsx b/frontend/unified/src/components/InspectLogMeta.tsx index 2f30767..2a1ff43 100644 --- a/frontend/unified/src/components/InspectLogMeta.tsx +++ b/frontend/unified/src/components/InspectLogMeta.tsx @@ -132,15 +132,18 @@ export const DisplayLogMeta: FC = (props: { } }; - function makeButtonArray(Arr: any) { + function makeButtonArray(artifactUrlsAndLogFilenames: [string, string][]) { return ( {" "} - {Arr.map((subArr: any) => { + {artifactUrlsAndLogFilenames.map(([artifactUrl, logFilename]) => { return ( - ); })}{" "} From b6716a23bdc980d34bcd1f4474f5e5a0affe3453 Mon Sep 17 00:00:00 2001 From: Yousef Moazzam Date: Tue, 15 Sep 2026 14:36:43 +0100 Subject: [PATCH 14/21] Fix incorrect comparison --- frontend/unified/src/components/InspectLogMeta.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/unified/src/components/InspectLogMeta.tsx b/frontend/unified/src/components/InspectLogMeta.tsx index 2a1ff43..bc983d4 100644 --- a/frontend/unified/src/components/InspectLogMeta.tsx +++ b/frontend/unified/src/components/InspectLogMeta.tsx @@ -189,7 +189,7 @@ export const DisplayLogMeta: FC = (props: { handleMenuListItem(event, index)} > {option} From 3c22b00d4e4d733ffe239baec4852a762d98fdd3 Mon Sep 17 00:00:00 2001 From: Yousef Moazzam Date: Tue, 15 Sep 2026 14:37:27 +0100 Subject: [PATCH 15/21] Remove unused variable --- frontend/unified/src/components/InspectLogMeta.tsx | 5 ----- 1 file changed, 5 deletions(-) diff --git a/frontend/unified/src/components/InspectLogMeta.tsx b/frontend/unified/src/components/InspectLogMeta.tsx index bc983d4..ef31930 100644 --- a/frontend/unified/src/components/InspectLogMeta.tsx +++ b/frontend/unified/src/components/InspectLogMeta.tsx @@ -85,11 +85,6 @@ export const DisplayLogMeta: FC = (props: { let workflownames: string[] = []; let y: any = []; - const style = { - width: "100%", - borderColor: "rgba(2, 2, 1, 0.5)", - }; - //ToDO maybe need to Consider what to display if there is no workflow as then workflowsnames is empty if (props.TableInfo !== undefined) { props.TableInfo.workflows?.nodes.forEach((workflow) => { From 7f499a7b3061b679ad2dbe010aeda2e45a2695bb Mon Sep 17 00:00:00 2001 From: Yousef Moazzam Date: Tue, 15 Sep 2026 14:37:48 +0100 Subject: [PATCH 16/21] Remove unused import --- frontend/unified/src/components/InspectLogMeta.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/unified/src/components/InspectLogMeta.tsx b/frontend/unified/src/components/InspectLogMeta.tsx index ef31930..63469e7 100644 --- a/frontend/unified/src/components/InspectLogMeta.tsx +++ b/frontend/unified/src/components/InspectLogMeta.tsx @@ -8,7 +8,6 @@ import { ListItemButton, ListItemText, Paper, - Card, Typography, Divider, } from "@mui/material"; From cc03786be2bc9c1aacb5264adedc6aabf5d7caef Mon Sep 17 00:00:00 2001 From: Yousef Moazzam Date: Tue, 15 Sep 2026 15:01:40 +0100 Subject: [PATCH 17/21] Remove unnecessary `null` check of query response --- frontend/unified/src/components/InspectLogMeta.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/unified/src/components/InspectLogMeta.tsx b/frontend/unified/src/components/InspectLogMeta.tsx index 63469e7..73d3ee6 100644 --- a/frontend/unified/src/components/InspectLogMeta.tsx +++ b/frontend/unified/src/components/InspectLogMeta.tsx @@ -99,7 +99,7 @@ export const DisplayLogMeta: FC = (props: { variables: { visitobj: props.visit, name: workflownames[0] }, //"example-template-599zg" }, }); - if (data !== undefined && data !== null) { + if (data !== undefined) { if (data.workflow !== undefined && data.workflow !== null) { if (data.workflow.status?.__typename == "WorkflowSucceededStatus") { data.workflow.status.tasks.forEach((task) => { From 8de9173b5c412650d203882db403a44cd95441f5 Mon Sep 17 00:00:00 2001 From: Yousef Moazzam Date: Tue, 15 Sep 2026 15:02:22 +0100 Subject: [PATCH 18/21] Remove commented-out code --- frontend/unified/src/components/InspectLogMeta.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/unified/src/components/InspectLogMeta.tsx b/frontend/unified/src/components/InspectLogMeta.tsx index 73d3ee6..7f5a793 100644 --- a/frontend/unified/src/components/InspectLogMeta.tsx +++ b/frontend/unified/src/components/InspectLogMeta.tsx @@ -96,7 +96,7 @@ export const DisplayLogMeta: FC = (props: { const [selectedWorkflow, setSelectedWorkflow] = useState(0); const { loading, error, data } = useQuery(InspectLog_Query, { - variables: { visitobj: props.visit, name: workflownames[0] }, //"example-template-599zg" }, + variables: { visitobj: props.visit, name: workflownames[0] }, }); if (data !== undefined) { From 3dc389a7db8b4df71b7b6499e993c8f358cd6ace Mon Sep 17 00:00:00 2001 From: Yousef Moazzam Date: Tue, 15 Sep 2026 15:04:08 +0100 Subject: [PATCH 19/21] Remove unnecessary check if workflow is `undefined` --- frontend/unified/src/components/InspectLogMeta.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/unified/src/components/InspectLogMeta.tsx b/frontend/unified/src/components/InspectLogMeta.tsx index 7f5a793..6854f81 100644 --- a/frontend/unified/src/components/InspectLogMeta.tsx +++ b/frontend/unified/src/components/InspectLogMeta.tsx @@ -100,7 +100,7 @@ export const DisplayLogMeta: FC = (props: { }); if (data !== undefined) { - if (data.workflow !== undefined && data.workflow !== null) { + if (data.workflow !== null) { if (data.workflow.status?.__typename == "WorkflowSucceededStatus") { data.workflow.status.tasks.forEach((task) => { task.artifacts.forEach((artifact) => { From 48cf4bdc483829deed3d6fbf0b337f11003233f8 Mon Sep 17 00:00:00 2001 From: Yousef Moazzam Date: Tue, 15 Sep 2026 15:05:40 +0100 Subject: [PATCH 20/21] Add key to buttons rendered from array --- frontend/unified/src/components/InspectLogMeta.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/unified/src/components/InspectLogMeta.tsx b/frontend/unified/src/components/InspectLogMeta.tsx index 6854f81..ca620e8 100644 --- a/frontend/unified/src/components/InspectLogMeta.tsx +++ b/frontend/unified/src/components/InspectLogMeta.tsx @@ -133,6 +133,7 @@ export const DisplayLogMeta: FC = (props: { {artifactUrlsAndLogFilenames.map(([artifactUrl, logFilename]) => { return (