From ca39161b0b0676042a8a635ff77283cbe05faae7 Mon Sep 17 00:00:00 2001 From: Francesco Aliprandi Date: Wed, 6 Mar 2024 22:12:50 +0100 Subject: [PATCH 1/3] feat(components): create `Sidebar` component --- web/frontend/src/components/Sidebar.tsx | 39 +++++++++++++++++++++++++ web/frontend/src/layouts/Main.tsx | 4 ++- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 web/frontend/src/components/Sidebar.tsx diff --git a/web/frontend/src/components/Sidebar.tsx b/web/frontend/src/components/Sidebar.tsx new file mode 100644 index 0000000..3099b2e --- /dev/null +++ b/web/frontend/src/components/Sidebar.tsx @@ -0,0 +1,39 @@ +import { Button } from "@nextui-org/react" +import { motion } from "framer-motion" +import { useState } from "react" +import { useNavigate } from "react-router-dom" +import { FaBars, FaHouse } from "react-icons/fa6" + +export default function Sidebar() { + const [isOpen, setIsOpen] = useState(false) + const navigate = useNavigate() + + return ( + +
+ {isOpen ? + : + } +
+
+
+ {isOpen ? + : + } +
+
+ ) +} diff --git a/web/frontend/src/layouts/Main.tsx b/web/frontend/src/layouts/Main.tsx index 6d82905..07e6260 100644 --- a/web/frontend/src/layouts/Main.tsx +++ b/web/frontend/src/layouts/Main.tsx @@ -1,4 +1,5 @@ import type { ReactNode } from "react" +import Sidebar from "../components/Sidebar" export type MainProps = { children: ReactNode @@ -6,7 +7,8 @@ export type MainProps = { export default function Main({ children }: MainProps) { return ( -
+
+ {children}
) From 1f6bfcdca0fd91695dd9b5dd981ee47029b79152 Mon Sep 17 00:00:00 2001 From: Francesco Aliprandi Date: Thu, 7 Mar 2024 14:07:01 +0100 Subject: [PATCH 2/3] fix(frontend): change to `font-mono` for sockets spans --- web/frontend/src/components/Service.tsx | 2 +- web/frontend/src/pages/Service.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web/frontend/src/components/Service.tsx b/web/frontend/src/components/Service.tsx index d249a69..a5e3bf5 100644 --- a/web/frontend/src/components/Service.tsx +++ b/web/frontend/src/components/Service.tsx @@ -31,7 +31,7 @@ export default function Service({ name, nfq, port, protocol }: ServiceProps) {
- {protocol}://vm:{port} + {protocol}://vm:{port}
diff --git a/web/frontend/src/pages/Service.tsx b/web/frontend/src/pages/Service.tsx index 36dea6c..af6e681 100644 --- a/web/frontend/src/pages/Service.tsx +++ b/web/frontend/src/pages/Service.tsx @@ -41,7 +41,7 @@ export default function Service() {
{service?.name} - {service?.protocol}://vm:{service?.port} + {service?.protocol}://vm:{service?.port}
nfq:{service?.nfq} From 56c9bcd28c8d03c88f20af0a6f9c8328226cadde Mon Sep 17 00:00:00 2001 From: Francesco Aliprandi Date: Thu, 7 Mar 2024 14:24:46 +0100 Subject: [PATCH 3/3] feat(components): create `SidebarItem` component --- web/frontend/src/components/Sidebar.tsx | 33 +++++++++++++-- web/frontend/src/components/SidebarItem.tsx | 47 +++++++++++++++++++++ 2 files changed, 76 insertions(+), 4 deletions(-) create mode 100644 web/frontend/src/components/SidebarItem.tsx diff --git a/web/frontend/src/components/Sidebar.tsx b/web/frontend/src/components/Sidebar.tsx index 3099b2e..d39a701 100644 --- a/web/frontend/src/components/Sidebar.tsx +++ b/web/frontend/src/components/Sidebar.tsx @@ -1,10 +1,18 @@ -import { Button } from "@nextui-org/react" +import { Button, Divider } from "@nextui-org/react" import { motion } from "framer-motion" import { useState } from "react" -import { useNavigate } from "react-router-dom" -import { FaBars, FaHouse } from "react-icons/fa6" +import { Link, useNavigate } from "react-router-dom" +import { FaBars, FaCode, FaHouse } from "react-icons/fa6" +import { useFetchSync } from "../hooks/useFetch" +import { CerberoService } from "../types/cerbero" +import SidebarItem from "./SidebarItem" export default function Sidebar() { + const [ + servicesResponse, + , + ] = useFetchSync("/api/services") + const [isOpen, setIsOpen] = useState(false) const navigate = useNavigate() @@ -23,7 +31,24 @@ export default function Sidebar() { } -
+
+ } isSidebarOpen={isOpen} link="/services" name="Services"> + {servicesResponse?.map(service => { + return ( + +
  • + {service.name} +
    + nfq:{service.nfq} + {service.port} +
    +
  • + + ) + })} +
    + +
    {isOpen ? + + ) + } + + return ( +
    +
    + + {icon} + {name} + + {isOpen ? + : + } +
    + {isOpen ? +
      + {children} +
    : <>} +
    + ) +}