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