diff --git a/frontend/src/components/explorer/explorer.tsx b/frontend/src/components/explorer/explorer.tsx index f578bc37..98bc0d29 100644 --- a/frontend/src/components/explorer/explorer.tsx +++ b/frontend/src/components/explorer/explorer.tsx @@ -1,5 +1,11 @@ import React, { useEffect, useState } from "react"; -import ReactFlow, { useEdgesState, useNodesState } from "reactflow"; +import ReactFlow, { + Controls, + useEdgesState, + useNodesInitialized, + useNodesState, + useReactFlow, +} from "reactflow"; import "reactflow/dist/style.css"; import { CustomEdge } from "./components/customEdge"; import { ChildNode, ParentNode } from "./components/customNode"; @@ -29,6 +35,8 @@ const nodeTypes = { const Explorer = ({ resourceList, closeResourceList }) => { const navigate = useNavigate(); + const reactFlowInstance = useReactFlow(); + const nodesInitialized = useNodesInitialized(); const { id: resourceId } = useParams(); const { type: resourceType } = useParams(); const [nodes, setNodes] = useNodesState([]); @@ -51,6 +59,12 @@ const Explorer = ({ resourceList, closeResourceList }) => { } }, [resourceId, resourceType]); + useEffect(() => { + if (nodesInitialized) { + reactFlowInstance.fitView(); + } + }, [nodesInitialized]); + const openEntitlementsDetails = (entitlement) => { setResourceDetailsOpen({ entitlementOpened: true, @@ -60,7 +74,6 @@ const Explorer = ({ resourceList, closeResourceList }) => { const openResourceDetails = async (resourceType: string, nodeId: string) => { const resourceDetails = await fetchResourceDetails(resourceType, nodeId); - console.log("resource details", resourceDetails) setResourceDetailsOpen({ resourceOpened: true, resource: resourceDetails, @@ -136,7 +149,9 @@ const Explorer = ({ resourceList, closeResourceList }) => { } fitView attributionPosition="bottom-left" - /> + > + + )} {resourceDetails.resource && ( diff --git a/frontend/src/components/icons/icons.tsx b/frontend/src/components/icons/icons.tsx index 4f17d4c4..08ca57cc 100644 --- a/frontend/src/components/icons/icons.tsx +++ b/frontend/src/components/icons/icons.tsx @@ -155,7 +155,7 @@ export const ExplorerLogo = ({ color }) => { ); }; -export const Link = ({ color }) => { +export const LinkIcon = ({ color }) => { return ( { const theme = useTheme(); - const [data, setData] = useState(); + const [data, setData] = useState([]); useEffect(() => { const fetchData = async () => { const res = await (await fetch("/api/resourceTypes")).json(); - setData(res.data); + const resourceTypes = res.data.resource_types + const sorted = resourceTypes.sort((a, b) => + a.resource_type.display_name.localeCompare(b.resource_type.display_name) + ); + setData(sorted); }; fetchData(); }, []); @@ -33,7 +27,7 @@ export const Navigation = ({ openResourceList }) => { {data && - data.resource_types.map((type) => ( + data.map((type) => ( { ); }; -export const ResourceDetailsModal = ({ resource, resourceDetails, closeDetails }) => { +export const ResourceDetailsModal = ({ + resource, + resourceDetails, + closeDetails, +}) => { const theme = useTheme(); - const copyToClipboard = () => { - navigator.clipboard.writeText(`http://localhost:3000/${resource.resource_type.id}/${resource.resource.id.resource}`) - } + + const handleClose = (event, reason) => { + if (reason && reason === "backdropClick") { + closeDetails(); + } + }; return ( - + @@ -50,11 +64,14 @@ export const ResourceDetailsModal = ({ resource, resourceDetails, closeDetails } } + startIcon={} disableElevation - onClick={copyToClipboard} > - Copy Link + + focus + )} @@ -62,7 +79,7 @@ export const ResourceDetailsModal = ({ resource, resourceDetails, closeDetails } {resourceDetails.entitlementOpened && ( )} - { resourceDetails.resourceOpened && ( + {resourceDetails.resourceOpened && ( )} diff --git a/frontend/src/components/resourceDetails/styles.tsx b/frontend/src/components/resourceDetails/styles.tsx index 4dcc7e86..1977c890 100644 --- a/frontend/src/components/resourceDetails/styles.tsx +++ b/frontend/src/components/resourceDetails/styles.tsx @@ -1,6 +1,7 @@ import { styled } from "@mui/material/styles"; import MuiDrawer from "@mui/material/Drawer"; import { IconButton, Typography } from "@mui/material"; +import { Link } from "react-router-dom"; export const ResourceDetailsDrawer = styled(MuiDrawer)(({ theme }) => ({ "& .MuiDrawer-paper": { @@ -55,3 +56,8 @@ export const CloseButton = styled(IconButton)(() => ({ border: "1px solid #D0D5DD", borderRadius: "8px" })); + +export const StyledLink = styled(Link)(() => ({ + textDecoration: 'none', + color: 'inherit' +})); \ No newline at end of file diff --git a/frontend/src/context/resources.tsx b/frontend/src/context/resources.tsx index 66d46d14..8d0a8319 100644 --- a/frontend/src/context/resources.tsx +++ b/frontend/src/context/resources.tsx @@ -24,6 +24,7 @@ export const ResourcesContextProvider = ({ children }) => { } map[type].push(resource); + map[type].sort((a, b) => a.resource.display_name.localeCompare(b.resource.display_name)) }); setResources({ diff --git a/frontend/src/pages/homepage.tsx b/frontend/src/pages/homepage.tsx index b6cc2ea1..b75c0429 100644 --- a/frontend/src/pages/homepage.tsx +++ b/frontend/src/pages/homepage.tsx @@ -3,6 +3,7 @@ import Footer from "../components/footer/footer"; import "../components/explorer/index.css"; import { Navigation } from "../components/navigation/navigation"; import Explorer from "../components/explorer/explorer"; +import { ReactFlowProvider } from "reactflow"; type ResourcesListState = { opened: boolean; @@ -30,10 +31,12 @@ const Homepage = () => { return ( <> - + + + );