mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-08 12:15:25 +03:00
Merge branch 'streamline-live' of github.com:blakeblackshear/frigate into streamline-live
This commit is contained in:
commit
16a8fac9c4
@ -8,7 +8,6 @@ import {
|
|||||||
LuList,
|
LuList,
|
||||||
LuMenu,
|
LuMenu,
|
||||||
LuMoon,
|
LuMoon,
|
||||||
LuMoreVertical,
|
|
||||||
LuPenSquare,
|
LuPenSquare,
|
||||||
LuRotateCw,
|
LuRotateCw,
|
||||||
LuSettings,
|
LuSettings,
|
||||||
@ -18,7 +17,7 @@ import {
|
|||||||
import { IoColorPalette } from "react-icons/io5";
|
import { IoColorPalette } from "react-icons/io5";
|
||||||
import { CgDarkMode } from "react-icons/cg";
|
import { CgDarkMode } from "react-icons/cg";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import Heading from "./ui/heading";
|
import { VscAccount } from "react-icons/vsc";
|
||||||
import {
|
import {
|
||||||
DropdownMenu,
|
DropdownMenu,
|
||||||
DropdownMenuContent,
|
DropdownMenuContent,
|
||||||
@ -57,11 +56,66 @@ import {
|
|||||||
import ActivityIndicator from "./ui/activity-indicator";
|
import ActivityIndicator from "./ui/activity-indicator";
|
||||||
import { useRestart } from "@/api/ws";
|
import { useRestart } from "@/api/ws";
|
||||||
import { ENV } from "@/env";
|
import { ENV } from "@/env";
|
||||||
|
import { NavLink } from "react-router-dom";
|
||||||
|
|
||||||
type HeaderProps = {
|
type HeaderProps = {
|
||||||
onToggleNavbar: () => void;
|
onToggleNavbar: () => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function HeaderNavigation() {
|
||||||
|
const navbarLinks = [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
title: "Dashboard",
|
||||||
|
url: "/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
title: "Live",
|
||||||
|
url: "/live",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 3,
|
||||||
|
title: "History",
|
||||||
|
url: "/history",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 4,
|
||||||
|
title: "Export",
|
||||||
|
url: "/export",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 5,
|
||||||
|
title: "UI Playground",
|
||||||
|
url: "/playground",
|
||||||
|
dev: true,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="hidden md:flex">
|
||||||
|
{navbarLinks.map((item) => {
|
||||||
|
let shouldRender = item.dev ? ENV !== "production" : true;
|
||||||
|
return (
|
||||||
|
shouldRender && (
|
||||||
|
<NavLink
|
||||||
|
key={item.id}
|
||||||
|
to={item.url}
|
||||||
|
className={({ isActive }) =>
|
||||||
|
`py-4 px-2 flex flex-row items-center text-center rounded-lg gap-2 hover:bg-border ${
|
||||||
|
isActive ? "font-bold bg-popover text-popover-foreground" : ""
|
||||||
|
}`
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<div className="text-sm">{item.title}</div>
|
||||||
|
</NavLink>
|
||||||
|
)
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function Header({ onToggleNavbar }: HeaderProps) {
|
function Header({ onToggleNavbar }: HeaderProps) {
|
||||||
const { theme, colorScheme, setTheme, setColorScheme } = useTheme();
|
const { theme, colorScheme, setTheme, setColorScheme } = useTheme();
|
||||||
const [restartDialogOpen, setRestartDialogOpen] = useState(false);
|
const [restartDialogOpen, setRestartDialogOpen] = useState(false);
|
||||||
@ -110,7 +164,6 @@ function Header({ onToggleNavbar }: HeaderProps) {
|
|||||||
<div className="w-10 mr-5">
|
<div className="w-10 mr-5">
|
||||||
<Logo />
|
<Logo />
|
||||||
</div>
|
</div>
|
||||||
<Heading as="h1">Frigate</Heading>
|
|
||||||
</div>
|
</div>
|
||||||
{ENV == "production" && (
|
{ENV == "production" && (
|
||||||
<div className="text-red-500 text-sm items-center text-right">
|
<div className="text-red-500 text-sm items-center text-right">
|
||||||
@ -118,12 +171,13 @@ function Header({ onToggleNavbar }: HeaderProps) {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</Link>
|
</Link>
|
||||||
|
<HeaderNavigation />
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-shrink-0 md:gap-2">
|
<div className="flex flex-shrink-0 md:gap-2">
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
<Button size="icon" variant="ghost">
|
<Button size="icon" variant="ghost">
|
||||||
<LuMoreVertical />
|
<LuSettings />
|
||||||
</Button>
|
</Button>
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent className="md:w-72 mr-5">
|
<DropdownMenuContent className="md:w-72 mr-5">
|
||||||
@ -257,6 +311,9 @@ function Header({ onToggleNavbar }: HeaderProps) {
|
|||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
</DropdownMenuContent>
|
</DropdownMenuContent>
|
||||||
</DropdownMenu>
|
</DropdownMenu>
|
||||||
|
<Button size="icon" variant="ghost">
|
||||||
|
<VscAccount />
|
||||||
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
{restartDialogOpen && (
|
{restartDialogOpen && (
|
||||||
<AlertDialog
|
<AlertDialog
|
||||||
|
|||||||
@ -69,7 +69,7 @@ function Sidebar({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="hidden md:block">{sidebar}</div>
|
<div className="hidden">{sidebar}</div>
|
||||||
|
|
||||||
<Sheet
|
<Sheet
|
||||||
open={sheetOpen}
|
open={sheetOpen}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user