diff --git a/web/src/App.tsx b/web/src/App.tsx index 182b8fffe..cd641fec2 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -1,9 +1,8 @@ import Providers from "@/context/providers"; import { BrowserRouter, Routes, Route } from "react-router-dom"; -import { useState } from "react"; import Wrapper from "@/components/Wrapper"; -import Sidebar from "@/components/Sidebar"; -import Header from "@/components/Header"; +import Sidebar from "@/components/navigation/Sidebar"; +import Header from "@/components/navigation/Header"; import Live from "@/pages/Live"; import Export from "@/pages/Export"; import Storage from "@/pages/Storage"; @@ -14,27 +13,25 @@ import NoMatch from "@/pages/NoMatch"; import Settings from "@/pages/Settings"; import UIPlayground from "./pages/UIPlayground"; import Events from "./pages/Events"; -import { isDesktop } from "react-device-detect"; +import { isDesktop, isMobile } from "react-device-detect"; import Statusbar from "./components/Statusbar"; +import Bottombar from "./components/navigation/Bottombar"; + +const mobileInsets = "absolute left-0 top-2 right-0 bottom-0 bottom-16" +const desktopInsets = "absolute left-16 top-16 top-2 right-0 bottom-8" function App() { - const [sheetOpen, setSheetOpen] = useState(false); - - const toggleNavbar = () => { - setSheetOpen((prev) => !prev); - }; - return ( -
- + {isDesktop && } {isDesktop && } + {isMobile && }
} /> diff --git a/web/src/components/Header.tsx b/web/src/components/Header.tsx deleted file mode 100644 index 0d67be7ed..000000000 --- a/web/src/components/Header.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { Link } from "react-router-dom"; -import Logo from "@/components/Logo"; -import { LuMenu } from "react-icons/lu"; -import { Button } from "@/components/ui/button"; -import { ENV } from "@/env"; -import { NavLink } from "react-router-dom"; -import { navbarLinks } from "@/pages/site-navigation"; -import SettingsNavItems from "./settings/SettingsNavItems"; - -type HeaderProps = { - onToggleNavbar: () => void; -}; - -function HeaderNavigation() { - return ( -
- {navbarLinks.map((item) => { - let shouldRender = item.dev ? ENV !== "production" : true; - return ( - shouldRender && ( - - `my-2 py-3 px-4 text-muted-foreground flex flex-row items-center text-center rounded-lg gap-2 hover:bg-border ${ - isActive ? "font-bold bg-popover text-popover-foreground" : "" - }` - } - > -
{item.title}
-
- ) - ); - })} -
- ); -} - -function Header({ onToggleNavbar }: HeaderProps) { - return ( -
-
- - -
- -
- - -
- -
- ); -} - -export default Header; diff --git a/web/src/components/Sidebar.tsx b/web/src/components/Sidebar.tsx deleted file mode 100644 index 92a44b520..000000000 --- a/web/src/components/Sidebar.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import { IconType } from "react-icons"; -import { NavLink } from "react-router-dom"; -import { Sheet, SheetContent } from "@/components/ui/sheet"; -import Logo from "./Logo"; -import { ENV } from "@/env"; -import { navbarLinks } from "@/pages/site-navigation"; -import SettingsNavItems from "./settings/SettingsNavItems"; -import { - Tooltip, - TooltipContent, - TooltipTrigger, -} from "@/components/ui/tooltip"; - -function Sidebar({ - sheetOpen, - setSheetOpen, -}: { - sheetOpen: boolean; - setSheetOpen: (open: boolean) => void; -}) { - const sidebar = ( - - ); - - return ( - <> -
{sidebar}
- setSheetOpen(false)} - > - -
- {sidebar} -
-
- - ); -} - -type SidebarItemProps = { - Icon: IconType; - title: string; - url: string; - dev?: boolean; - onClick?: () => void; -}; - -function SidebarItem({ Icon, title, url, dev, onClick }: SidebarItemProps) { - const shouldRender = dev ? ENV !== "production" : true; - - return ( - shouldRender && ( - - - `mx-[10px] mb-6 flex flex-col justify-center items-center rounded-lg ${ - isActive - ? "font-bold text-primary-foreground bg-primary" - : "text-muted-foreground bg-muted" - }` - } - > - - - - - -

{title}

-
-
- ) - ); -} - -export default Sidebar; diff --git a/web/src/components/navigation/Bottombar.tsx b/web/src/components/navigation/Bottombar.tsx new file mode 100644 index 000000000..d2ba42c63 --- /dev/null +++ b/web/src/components/navigation/Bottombar.tsx @@ -0,0 +1,26 @@ +import { navbarLinks } from "@/pages/site-navigation"; +import NavItem from "./NavItem"; +import SettingsNavItems from "../settings/SettingsNavItems"; + +function Bottombar() { + return ( +
+ {navbarLinks.map((item) => ( + + ))} + +
+ ); +} + +// + +export default Bottombar; diff --git a/web/src/components/navigation/NavItem.tsx b/web/src/components/navigation/NavItem.tsx new file mode 100644 index 000000000..70dc405b9 --- /dev/null +++ b/web/src/components/navigation/NavItem.tsx @@ -0,0 +1,64 @@ +import { IconType } from "react-icons"; +import { NavLink } from "react-router-dom"; +import { ENV } from "@/env"; +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "@/components/ui/tooltip"; + +const variants = { + primary: { + active: "font-bold text-primary-foreground bg-primary", + inactive: "text-muted-foreground bg-muted", + }, + secondary: { + active: "font-bold text-primary", + inactive: "text-muted-foreground", + }, +}; + +type NavItemProps = { + className: string; + variant?: "primary" | "secondary"; + Icon: IconType; + title: string; + url: string; + dev?: boolean; + onClick?: () => void; +}; + +export default function NavItem({ + className, + variant = "primary", + Icon, + title, + url, + dev, + onClick, +}: NavItemProps) { + const shouldRender = dev ? ENV !== "production" : true; + + return ( + shouldRender && ( + + + `${className} flex flex-col justify-center items-center rounded-lg ${ + variants[variant][isActive ? "active" : "inactive"] + }` + } + > + + + + + +

{title}

+
+
+ ) + ); +} diff --git a/web/src/components/navigation/Sidebar.tsx b/web/src/components/navigation/Sidebar.tsx new file mode 100644 index 000000000..131963118 --- /dev/null +++ b/web/src/components/navigation/Sidebar.tsx @@ -0,0 +1,28 @@ +import Logo from "../Logo"; +import { navbarLinks } from "@/pages/site-navigation"; +import SettingsNavItems from "../settings/SettingsNavItems"; +import NavItem from "./NavItem"; + +function Sidebar() { + return ( + + ); +} + +export default Sidebar; diff --git a/web/vite.config.ts b/web/vite.config.ts index a97dbd014..5d5bf8207 100644 --- a/web/vite.config.ts +++ b/web/vite.config.ts @@ -12,24 +12,24 @@ export default defineConfig({ server: { proxy: { '/api': { - target: 'http://localhost:5000', + target: 'http://192.168.50.106:5000', ws: true, }, '/vod': { - target: 'http://localhost:5000' + target: 'http://192.168.50.106:5000' }, '/clips': { - target: 'http://localhost:5000' + target: 'http://192.168.50.106:5000' }, '/exports': { - target: 'http://localhost:5000' + target: 'http://192.168.50.106:5000' }, '/ws': { - target: 'ws://localhost:5000', + target: 'ws://192.168.50.106:5000', ws: true, }, '/live': { - target: 'ws://localhost:5000', + target: 'ws://192.168.50.106:5000', changeOrigin: true, ws: true, },