diff --git a/src/components/QuickScreenSettings.tsx b/src/components/QuickScreenSettings.tsx index 45e44df..6bc44cd 100644 --- a/src/components/QuickScreenSettings.tsx +++ b/src/components/QuickScreenSettings.tsx @@ -28,10 +28,13 @@ const Drawer = styled(MuiDrawer)(() => ({ } })); -export default function QuickScreenSettings() { +interface Props { + onAdd: () => void; +} + +export default function QuickScreenSettings({onAdd}: Props) { const theme = useTheme(); const navigate = useNavigate(); - /** * Loads a new blank quick screen */ @@ -47,7 +50,7 @@ export default function QuickScreenSettings() { * Adds a new screen to the current view to draw components from */ const onClickAdd = () => { - console.log("clicked add"); + onAdd(); }; /** @@ -80,7 +83,7 @@ export default function QuickScreenSettings() { }, { name: "Add", - text: "Add a .bob file to the view", + text: "Open a screen to add to the current Quick Screen", icon: , onClick: onClickAdd }, diff --git a/src/components/QuickScreens.tsx b/src/components/QuickScreens.tsx index f120802..e7a6b00 100644 --- a/src/components/QuickScreens.tsx +++ b/src/components/QuickScreens.tsx @@ -11,22 +11,31 @@ import { import { useRef } from "react"; import QuickScreenSettings from "./QuickScreenSettings"; import { useLocation } from "react-router"; +import {useState} from "react"; +import SourcePanel from "./SourcePanel"; const Paper = styled(MuiPaper)(({ theme }) => ({ height: `calc(${useWindowHeight()}px - ${APP_BAR_HEIGHT}px - 50px)`, margin: `calc(${APP_BAR_HEIGHT}px + 15px) 5px 5px 5px`, - width: `calc(${useWindowWidth()}px - 10px - ${theme.spacing(7)} - 8px)` + width: `calc(${useWindowWidth()}px - 10px - ${theme.spacing(7)} - 8px)`, + overflow: "hidden" })); export default function QuickScreens() { const displayUuidRef = useRef(); const location = useLocation(); const quickScreen = location.state?.pageState?.quickScreen; + const [showSourcePanel, setShowSourcePanel] = useState(false); return ( - - + + setShowSourcePanel(true)}/> + {showSourcePanel && ( + {}} + /> + )} {quickScreen ? ( void; +} + +export default function ScreenTreeView({onScreenSelected}: ScreenTreeViewProps) { const { state } = useContext(BeamlineTreeStateContext); - const { menuOpen } = useContext(MenuContext); const fileContext = useContext(FileContext); const [expandedScreens, setExpandedScreens] = useState([]); @@ -18,6 +20,22 @@ export default function ScreenTreeView() { }; const handleClick = (itemId: string) => { + if (onScreenSelected) { + const metadata = currentFileMetadata[itemId]; + + if (!metadata || metadata.exists === false) { + console.warn(`No metadata found for itemId: ${itemId}`); + return; + } + + if (onScreenSelected) { + onScreenSelected(metadata); + return; + } + + return; + } + const selectedBeamlineId = state.currentBeamline; const beamlineState = state.beamlines[selectedBeamlineId]; @@ -62,8 +80,6 @@ export default function ScreenTreeView() { }, [state.currentBeamline, state.beamlines, currentScreenTree]); return ( - <> - {menuOpen ? ( - ) : ( - <> - )} - ); } diff --git a/src/components/SourceDisplay.tsx b/src/components/SourceDisplay.tsx new file mode 100644 index 0000000..861ade8 --- /dev/null +++ b/src/components/SourceDisplay.tsx @@ -0,0 +1,43 @@ +import {EmbeddedDisplay, newRelativePosition} from "@diamondlightsource/cs-web-lib"; +import {Box, Typography} from "@mui/material"; +import {FileMetadata} from "../store"; +import FileStateContext from "../routes/DemoPage"; +import {useContext} from "react"; + +interface SourceDisplayProps { + file?: FileMetadata; +} + +export default function SourceDisplay({file}: SourceDisplayProps) { + const {state} = useContext(FileStateContext); + + if (!file) { + return ( + + Select a screen + + ); + } + + const displayFile = state.files.find( + f => f.name.endsWith(file.file) + ); + + console.log("Selected:", file); + console.log("Resolved:", displayFile); + return ( + + + + ); +} \ No newline at end of file diff --git a/src/components/SourcePanel.tsx b/src/components/SourcePanel.tsx new file mode 100644 index 0000000..8d63929 --- /dev/null +++ b/src/components/SourcePanel.tsx @@ -0,0 +1,47 @@ +import { Box } from "@mui/material"; +import SourceDisplay from "./SourceDisplay"; +import ScreenTreeView from "./ScreenTreeView"; +import {useState} from "react"; +import { FileMetadata } from "../store"; +import BeamlineSelect from "./BeamlineSelect"; + +interface SourcePanelProps { + onScreenSelected: (file: FileMetadata) => void; +} + +export default function SourcePanel({onScreenSelected}: SourcePanelProps){ + + + const [selectedFile, setSelectedFile] = + useState(); + + + const handleSelect = (file: FileMetadata) => { + setSelectedFile(file); + onScreenSelected(file); + }; + + return ( + + + + + + + + + + + ); +} \ No newline at end of file