From 4949b394947234c9ac5dd77faca24a99e7535731 Mon Sep 17 00:00:00 2001 From: Michael Quigley Date: Mon, 6 Jan 2025 13:31:28 -0500 Subject: [PATCH] improvements to interface-switching code (#724) --- ui100/src/ApiConsole.tsx | 26 +++++++++++++++++++++++--- ui100/src/PropertyTable.tsx | 2 +- ui100/src/SearchPanel.tsx | 11 +++++++++++ ui100/src/Visualizer.tsx | 24 +++++++++++------------- 4 files changed, 46 insertions(+), 17 deletions(-) create mode 100644 ui100/src/SearchPanel.tsx diff --git a/ui100/src/ApiConsole.tsx b/ui100/src/ApiConsole.tsx index e664c504..8c44020f 100644 --- a/ui100/src/ApiConsole.tsx +++ b/ui100/src/ApiConsole.tsx @@ -1,4 +1,4 @@ -import {useEffect, useRef, useState} from "react"; +import {useCallback, useEffect, useRef, useState} from "react"; import {Configuration, MetadataApi} from "./api"; import {mergeVisualOverview, nodesEqual, VisualOverview} from "./model/visualizer.ts"; import {Grid2} from "@mui/material"; @@ -9,6 +9,7 @@ import EnvironmentPanel from "./EnvironmentPanel.tsx"; import SharePanel from "./SharePanel.tsx"; import AccessPanel from "./AccessPanel.tsx"; import useStore from "./model/store.ts"; +import SearchPanel from "./SearchPanel.tsx"; interface ApiConsoleProps { logout: () => void; @@ -20,10 +21,29 @@ const ApiConsole = ({ logout }: ApiConsoleProps) => { const updateOverview = useStore((state) => state.updateOverview); const oldVov = useRef(overview); const selectedNode = useStore((state) => state.selectedNode); - const updateSelectedNode = useStore((state) => state.updateSelectedNode); const updateEnvironments = useStore((state) => state.updateEnvironments); + const [mainPanel, setMainPanel] = useState(); const [sidePanel, setSidePanel] = useState(<>); + let showVisualizer = true; + const handleKeyPress = useCallback((event) => { + if(event.ctrlKey === true && event.key === '`') { + showVisualizer = !showVisualizer; + if(showVisualizer) { + setMainPanel(); + } else { + setMainPanel(); + } + } + }, []); + + useEffect(() => { + document.addEventListener('keydown', handleKeyPress); + return () => { + document.removeEventListener('keydown', handleKeyPress); + }; + }, [handleKeyPress]); + const retrieveOverview = () => { let cfg = new Configuration({ headers: { @@ -114,7 +134,7 @@ const ApiConsole = ({ logout }: ApiConsoleProps) => { - + {mainPanel} {sidePanel} diff --git a/ui100/src/PropertyTable.tsx b/ui100/src/PropertyTable.tsx index d7735932..e5a60f66 100644 --- a/ui100/src/PropertyTable.tsx +++ b/ui100/src/PropertyTable.tsx @@ -1,4 +1,4 @@ -import React, {useEffect, useState} from "react"; +import {useEffect, useState} from "react"; import {camelToWords, objectToRows} from "./model/util.ts"; import {Paper, Table, TableBody, TableCell, TableRow} from "@mui/material"; diff --git a/ui100/src/SearchPanel.tsx b/ui100/src/SearchPanel.tsx new file mode 100644 index 00000000..6b70a805 --- /dev/null +++ b/ui100/src/SearchPanel.tsx @@ -0,0 +1,11 @@ +import {Paper} from "@mui/material"; + +const SearchPanel = () => { + return ( + +

SearchPanel

+
+ ); +}; + +export default SearchPanel; \ No newline at end of file diff --git a/ui100/src/Visualizer.tsx b/ui100/src/Visualizer.tsx index 5629e5f6..ff2fd5e9 100644 --- a/ui100/src/Visualizer.tsx +++ b/ui100/src/Visualizer.tsx @@ -18,11 +18,7 @@ import EnvironmentNode from "./EnvironmentNode.tsx"; import AccountNode from "./AccountNode.tsx"; import AccessNode from "./AccessNode.tsx"; import {Box} from "@mui/material"; - -interface VisualizerProps { - vov: VisualOverview; - onSelectionChanged: (node: Node) => void; -} +import useStore from "./model/store.ts"; const nodeTypes = { access: AccessNode, @@ -31,15 +27,17 @@ const nodeTypes = { share: ShareNode }; -const Visualizer = ({ vov, onSelectionChanged }: VisualizerProps) => { +const Visualizer = () => { + const overview = useStore((state) => state.overview); + const updateSelectedNode = useStore((state) => state.updateSelectedNode); const [nodes, setNodes, onNodesChange] = useNodesState([]); const [edges, setEdges, onEdgesChange] = useEdgesState([]); const onSelectionChange = ({ nodes }) => { if(nodes.length > 0) { - onSelectionChanged(nodes[0]); + updateSelectedNode(nodes[0]); } else { - onSelectionChanged(null as Node); + updateSelectedNode(null as Node); } }; @@ -72,12 +70,12 @@ const Visualizer = ({ vov, onSelectionChanged }: VisualizerProps) => { } useEffect(() => { - if(vov) { - let laidOut = layout(vov.nodes, vov.edges); + if(overview) { + let laidOut = layout(overview.nodes, overview.edges); setNodes(laidOut.nodes); setEdges(laidOut.edges); } - }, [vov]); + }, [overview]); return ( { ); } -export default ({ vov, onSelectionChanged }: VisualizerProps) => { +export default () => { return ( - + );