diff --git a/app/frontend/src/App.tsx b/app/frontend/src/App.tsx index cb48f64..59ab6f6 100644 --- a/app/frontend/src/App.tsx +++ b/app/frontend/src/App.tsx @@ -1,108 +1,190 @@ import { useMemo, useState } from "react"; +import type { MouseEvent } from "react"; import { + AppBar, Box, + Button, + Drawer, List, ListItem, + ListItemButton, ListItemText, + Menu, + MenuItem, + Toolbar, Typography } from "@mui/material"; import { TOOLS } from "./tools/toolRegistry"; const App = () => { const [activeToolId, setActiveToolId] = useState(TOOLS[0]?.id ?? ""); + const [toolsAnchorEl, setToolsAnchorEl] = useState(null); + const [helpOpen, setHelpOpen] = useState(false); const activeTool = useMemo( () => TOOLS.find((tool) => tool.id === activeToolId) ?? TOOLS[0], [activeToolId] ); + const toolsMenuOpen = Boolean(toolsAnchorEl); + + const openToolsMenu = (event: MouseEvent) => { + setToolsAnchorEl(event.currentTarget); + }; + + const closeToolsMenu = () => { + setToolsAnchorEl(null); + }; + + const selectTool = (toolId: string) => { + setActiveToolId(toolId); + closeToolsMenu(); + }; + return ( - + + + + + + + {activeTool?.name ?? "Tool"} + + + + + + + + {TOOLS.map((tool) => ( + selectTool(tool.id)}> + {tool.name} + + ))} + + + setHelpOpen(false)}> + + + Help + + {activeTool?.helpContent ? ( + {activeTool.helpContent} + ) : ( + No help available for this tool. + )} + + setHelpOpen(false)}> + + + + + + + {activeTool ? activeTool.render() : null} + - - Tools - - - {TOOLS.map((tool) => ( - - setActiveToolId(tool.id)} - onKeyDown={(event) => { - if (event.key === "Enter" || event.key === " ") { - event.preventDefault(); - setActiveToolId(tool.id); - } - }} - sx={{ - width: "100%", - px: 1.5, - py: 1, - cursor: "pointer", - borderLeft: 2, - borderColor: tool.id === activeTool?.id ? "primary.main" : "transparent" - }} - > - + Tools + + + {TOOLS.map((tool) => ( + + setActiveToolId(tool.id)} + onKeyDown={(event) => { + if (event.key === "Enter" || event.key === " ") { + event.preventDefault(); + setActiveToolId(tool.id); } }} - /> - - - ))} - - + sx={{ + width: "100%", + px: 1.5, + py: 1, + cursor: "pointer", + borderLeft: 2, + borderColor: tool.id === activeTool?.id ? "primary.main" : "transparent" + }} + > + + + + ))} + + - {activeTool ? activeTool.render() : null} + {activeTool ? activeTool.render() : null} - - - Help - - {activeTool?.helpContent ? ( - {activeTool.helpContent} - ) : ( - No help available for this tool. - )} + + + Help + + {activeTool?.helpContent ? ( + {activeTool.helpContent} + ) : ( + No help available for this tool. + )} + );