diff --git a/src/Terrabuild.UI/src/App.tsx b/src/Terrabuild.UI/src/App.tsx index e0d466f2..ede54f05 100644 --- a/src/Terrabuild.UI/src/App.tsx +++ b/src/Terrabuild.UI/src/App.tsx @@ -1,6 +1,5 @@ import { useEffect, useMemo, useRef, useState } from "react"; import { - AppShell, Box, Stack, rgba, @@ -30,6 +29,7 @@ import BuildDetailsPanel from "./components/BuildDetailsPanel"; import BuildLogPanel from "./components/BuildLogPanel"; import GraphPanel from "./components/GraphPanel"; import NodeDetailsPanel from "./components/NodeDetailsPanel"; +import SidebarLayout from "./components/SidebarLayout"; import SidebarHeader from "./components/SidebarHeader"; import { GraphNode, @@ -870,44 +870,41 @@ const App = () => { : "Build Log"; return ( - - + mainStyle={{ minHeight: 0 }} + sidebar={ + <> + + + + - - - - { /> - - - - - { - flowInstance.current = instance; - }} - onNodesChange={handleNodesChange} - onEdgesChange={onEdgesChange} - onNodeClick={(_, node) => - loadProjectResults(node.data.meta as ProjectNode) - } - onNodeDragStart={(_, node) => setDraggedNodeId(node.id)} - onNodeDragStop={() => setDraggedNodeId(null)} - onReflow={() => { - setManualPositions({}); - setLayoutVersion((value) => value + 1); - }} - /> - - - setShowTerminal(false)} - terminalRef={terminalRef} - background={terminalBackground} + + } + > + + + { + flowInstance.current = instance; + }} + onNodesChange={handleNodesChange} + onEdgesChange={onEdgesChange} + onNodeClick={(_, node) => + loadProjectResults(node.data.meta as ProjectNode) + } + onNodeDragStart={(_, node) => setDraggedNodeId(node.id)} + onNodeDragStop={() => setDraggedNodeId(null)} + onReflow={() => { + setManualPositions({}); + setLayoutVersion((value) => value + 1); + }} /> - - + + setShowTerminal(false)} + terminalRef={terminalRef} + background={terminalBackground} + /> + + ); }; diff --git a/src/Terrabuild.UI/src/components/SidebarLayout.tsx b/src/Terrabuild.UI/src/components/SidebarLayout.tsx new file mode 100644 index 00000000..1d6d070e --- /dev/null +++ b/src/Terrabuild.UI/src/components/SidebarLayout.tsx @@ -0,0 +1,56 @@ +import { type CSSProperties, type ReactNode } from "react"; +import { Box, type MantineSpacing } from "@mantine/core"; + +type SidebarLayoutProps = { + sidebar: ReactNode; + children: ReactNode; + sidebarWidth?: number; + sidebarPadding?: MantineSpacing; + mainPadding?: MantineSpacing; + sidebarStyle?: CSSProperties; + mainStyle?: CSSProperties; +}; + +const SidebarLayout = ({ + sidebar, + children, + sidebarWidth = 360, + sidebarPadding = "md", + mainPadding = "md", + sidebarStyle, + mainStyle, +}: SidebarLayoutProps) => { + return ( + + + {sidebar} + + + {children} + + + ); +}; + +export default SidebarLayout;