diff --git a/frontend/tomography/src/components/loader/Loader.tsx b/frontend/tomography/src/components/loader/Loader.tsx index 0ba90610..e70f73b6 100644 --- a/frontend/tomography/src/components/loader/Loader.tsx +++ b/frontend/tomography/src/components/loader/Loader.tsx @@ -11,6 +11,7 @@ import { Modal, Tooltip, InputAdornment, + Stack, } from "@mui/material"; import ContrastIcon from "@mui/icons-material/Contrast"; import PreviewIcon from "@mui/icons-material/Visibility"; @@ -185,55 +186,25 @@ const Loader: React.FC = () => { - { - if (!autoToggles.dataPath) setDataPath(e.target.value); - }} - placeholder="path to the dataset in the input hdf5/NeXuS file containing image data" - sx={{ mb: 1 }} - InputProps={{ - endAdornment: ( - - - - ), - }} - /> - - {!showExtraFields && ( + { - if (!autoToggles.imagePath) setImageKeyPath(e.target.value); + if (!autoToggles.dataPath) setDataPath(e.target.value); }} - placeholder="path to the image key in your data" + placeholder="path to the dataset in the input hdf5/NeXuS file containing image data" sx={{ mb: 1 }} InputProps={{ endAdornment: ( + + ), + }} + /> + )} - {/* Input Fields */} - {mode === "setAddress" ? ( - { - if (!autoToggles.rotationAnglePath) - setRotationAnglesDataPath(e.target.value); - }} - placeholder="Path to rotation angle dataset in your data" + color="primary" + onChange={handleModeChange} + aria-label="Rotation Angle Mode" + fullWidth sx={{ mb: 1 }} - InputProps={{ - endAdornment: ( - - - - ), - }} - /> - ) : ( - - - - setUserDefinedRotationAngles( - Number(e.target.value), - parameters.rotation_angles.user_defined?.stop_angle || 0, - parameters.rotation_angles.user_defined?.angles_total || 0 - ) - } - placeholder="First angle" - /> - - - - setUserDefinedRotationAngles( - parameters.rotation_angles.user_defined?.start_angle || 0, - Number(e.target.value), - parameters.rotation_angles.user_defined?.angles_total || 0 - ) - } - placeholder="Last angle" - /> - - - - setUserDefinedRotationAngles( - parameters.rotation_angles.user_defined?.start_angle || 0, - parameters.rotation_angles.user_defined?.stop_angle || 0, - Number(e.target.value) - ) - } - placeholder="Total angles between" - /> - - - )} + > + + use rotation angle within data + + + set custom rotation angle + + - {showExtraFields && ( - - - - Darks - - - setDarks(e.target.value, parameters.darks?.data_path || "") - } - sx={{ mb: 1 }} - placeholder="path to the hdf5/NeXuS darks file " - /> - - setDarks(parameters.darks?.file || "", e.target.value) - } - sx={{ mb: 1 }} - placeholder="dataset that contains the darks data" - /> + {/* Input Fields */} + {mode === "setAddress" ? ( + { + if (!autoToggles.rotationAnglePath) + setRotationAnglesDataPath(e.target.value); + }} + placeholder="Path to rotation angle dataset in your data" + sx={{ mb: 1 }} + InputProps={{ + endAdornment: ( + + + + ), + }} + /> + ) : ( + + + + setUserDefinedRotationAngles( + Number(e.target.value), + parameters.rotation_angles.user_defined?.stop_angle || 0, + parameters.rotation_angles.user_defined?.angles_total || 0 + ) + } + placeholder="First angle" + /> + + + + setUserDefinedRotationAngles( + parameters.rotation_angles.user_defined?.start_angle || 0, + Number(e.target.value), + parameters.rotation_angles.user_defined?.angles_total || 0 + ) + } + placeholder="Last angle" + /> + + + + setUserDefinedRotationAngles( + parameters.rotation_angles.user_defined?.start_angle || 0, + parameters.rotation_angles.user_defined?.stop_angle || 0, + Number(e.target.value) + ) + } + placeholder="Total angles between" + /> + - - - Flats - - - setFlats(e.target.value, parameters.flats?.data_path || "") - } - sx={{ mb: 1 }} - placeholder="path to the hdf5/NeXuS flats file" - /> - - setFlats(parameters.flats?.file || "", e.target.value) - } - sx={{ mb: 1 }} - placeholder="dataset that contains the flats data" - /> + )} + + {showExtraFields && ( + + + + Darks + + + setDarks(e.target.value, parameters.darks?.data_path || "") + } + sx={{ mb: 1 }} + placeholder="path to the hdf5/NeXuS darks file " + /> + + setDarks(parameters.darks?.file || "", e.target.value) + } + sx={{ mb: 1 }} + placeholder="dataset that contains the darks data" + /> + + + + Flats + + + setFlats(e.target.value, parameters.flats?.data_path || "") + } + sx={{ mb: 1 }} + placeholder="path to the hdf5/NeXuS flats file" + /> + + setFlats(parameters.flats?.file || "", e.target.value) + } + sx={{ mb: 1 }} + placeholder="dataset that contains the flats data" + /> + - - )} + )} + { - - - - - - - - + ); diff --git a/frontend/unified/src/components/WorkflowsDataFetcher/WorkflowDataViewer.tsx b/frontend/unified/src/components/WorkflowsDataFetcher/WorkflowDataViewer.tsx index 6921bb69..00fadd1a 100644 --- a/frontend/unified/src/components/WorkflowsDataFetcher/WorkflowDataViewer.tsx +++ b/frontend/unified/src/components/WorkflowsDataFetcher/WorkflowDataViewer.tsx @@ -1,73 +1,115 @@ -import { - Accordion, - AccordionDetails, - AccordionSummary, - Typography, -} from "@mui/material"; +import { useEffect, useState } from "react"; +import { Tabs, Tab } from "@mui/material"; import { Visit } from "@diamondlightsource/sci-react-ui"; import LogStreamer from "./LogStreamer/LogStreamer"; import { Plot } from "./Plot/Plot"; import { useSuspenseQuery } from "@apollo/client/react"; import InspectLogMeta from "./InspectLogMeta"; -import { ChevronDown } from "lucide-react"; import { WORKFLOWDATAVIEWER_QUERY } from "../../graphql/WorkflowDataFetcher/WorkflowDataViewerQuery"; +import { Beamline } from "../../types"; +import { InstrumentSession } from "../SessionSelector"; +import ProcessingView from "../ProcessingView/ProcessingView"; + +const EMPTY_WORKFLOW_NAME_QUERY_ERROR = "resource name may not be empty"; const WorkflowDataViewer = ({ visit, selectedWorkflow, + beamline, + startTime, + scanIds, }: { visit: Visit; - selectedWorkflow: string; + selectedWorkflow: string | null; + beamline: Beamline; + startTime: InstrumentSession["startTime"]; + scanIds: number[]; }) => { + const [tabIndex, setTabIndex] = useState(0); const { data, error } = useSuspenseQuery(WORKFLOWDATAVIEWER_QUERY, { variables: { visit: visit, - name: selectedWorkflow, + name: selectedWorkflow ?? "", }, + errorPolicy: "all", }); - if (error) return <>Error: {error.message}; - if (!data) return <>No data; - if (!data.workflow) return <>No workflow data; + useEffect(() => { + if (!selectedWorkflow) { + setTabIndex(0); + } + }, [selectedWorkflow]); + + if (error && !error.message.includes(EMPTY_WORKFLOW_NAME_QUERY_ERROR)) + return <>Error: {error.message}; + if (!error && !data) return <>No data; return ( <> - - }> - Log - - - - - + setTabIndex(newValue)} + > + + + + + {selectedWorkflow && data && data.workflow && ( + <> + + + + - - }> - Log Stream - - - - - + + + + + )} - - }> - Plot - - - - - + + + ); }; +type TabContentProps = { + index: number; + selectedIndex: number; + children: React.ReactNode; +}; + +const TabContent = ({ children, index, selectedIndex }: TabContentProps) => { + return ; +}; + export default WorkflowDataViewer; diff --git a/frontend/unified/src/components/WorkflowsDataFetcher/WorkflowsDataFetcher.tsx b/frontend/unified/src/components/WorkflowsDataFetcher/WorkflowsDataFetcher.tsx index 7f5a3e73..56d8deb2 100644 --- a/frontend/unified/src/components/WorkflowsDataFetcher/WorkflowsDataFetcher.tsx +++ b/frontend/unified/src/components/WorkflowsDataFetcher/WorkflowsDataFetcher.tsx @@ -5,16 +5,28 @@ import { Accordion, AccordionDetails, AccordionSummary, - Stack, Typography, } from "@mui/material"; import { ChevronDown } from "lucide-react"; import WorkflowDataViewer from "./WorkflowDataViewer"; +import { Beamline } from "../../types"; +import { InstrumentSession } from "../SessionSelector"; -const WorkflowsDataFetcher = ({ visit }: { visit: Visit }) => { +const WorkflowsDataFetcher = ({ + visit, + beamline, + startTime, + scanIds, +}: { + visit: Visit; + + beamline: Beamline; + startTime: InstrumentSession["startTime"]; + scanIds: number[]; +}) => { const [selectedWorkflow, setSelectedWorkflow] = useState(null); return ( - + <> }> @@ -29,15 +41,16 @@ const WorkflowsDataFetcher = ({ visit }: { visit: Visit }) => { - {selectedWorkflow && ( - - - - )} - + + + + ); };