Files
WatchLink/src/components/app-shell.tsx

44 lines
1.2 KiB
TypeScript
Raw Normal View History

2026-05-15 03:11:41 +02:00
import Link from "next/link";
2026-05-15 17:32:26 +02:00
import { Gauge, MonitorPlay, Shield, UsersRound } from "lucide-react";
2026-05-15 03:11:41 +02:00
const nav = [
{ href: "/dashboard", label: "Dashboard", icon: Gauge },
{ href: "/rooms/@admin", label: "Rooms", icon: MonitorPlay },
2026-05-15 17:32:26 +02:00
{ href: "/friends", label: "Friends", icon: UsersRound }
2026-05-15 03:11:41 +02:00
];
2026-05-15 17:32:26 +02:00
export function AppShell({
children,
active = "Dashboard",
isAdmin = false
}: {
children: React.ReactNode;
active?: string;
isAdmin?: boolean;
}) {
const visibleNav = isAdmin ? [...nav, { href: "/admin", label: "Admin", icon: Shield }] : nav;
2026-05-15 03:11:41 +02:00
return (
<div className="app-shell">
<aside className="sidebar">
<Link className="brand" href="/dashboard">
<span className="brand-mark">WL</span>
<span>WatchLink</span>
</Link>
<nav className="nav-list" aria-label="Primary">
2026-05-15 17:32:26 +02:00
{visibleNav.map((item) => {
2026-05-15 03:11:41 +02:00
const Icon = item.icon;
return (
<Link key={item.href} href={item.href} className={`nav-item ${active === item.label ? "active" : ""}`}>
<Icon size={17} />
{item.label}
</Link>
);
})}
</nav>
</aside>
<main className="main">{children}</main>
</div>
);
}