omnidash/app/(authenticated)/(app)/DesktopSidebar.tsx

117 lines
3.5 KiB
TypeScript

import { Logo } from "@/components/logo";
import { Button } from "@/components/ui/button";
import { ScrollArea } from "@/components/ui/scroll-area";
import {
BarChart,
Database,
FileKey,
Filter,
FormInput,
Home,
} from "lucide-react";
import { ChannelLink } from "./channelLink";
import { TeamSwitcher } from "./TeamSwitcher";
import Link from "next/link";
type Props = {
navigation: {
href: string;
external?: boolean;
label: string;
}[];
channels: {
name: string;
}[];
};
export const DesktopSidebar: React.FC<Props> = ({ navigation, channels }) => {
return (
<aside className="relative hidden min-h-screen pb-12 border-r lg:fixed lg:inset-y-0 lg:z-50 lg:flex lg:w-72 lg:flex-col border-white/10">
<Link
href="/overview"
className="flex items-center gap-2 px-8 py-6 text-2xl font-semibold tracking-tight duration-200 stroke-zinc-800 dark:text-zinc-200 dark:stroke-zinc-500 dark:hover:stroke-white hover:stroke-zinc-700 hover:text-zinc-700 dark:hover:text-white"
>
<Logo className="w-8 h-8 duration-200 " />
Omnidash
</Link>
<div className="space-y-4">
<div className="px-6 py-2">
<h2 className="px-2 mb-2 text-lg font-semibold tracking-tight">
{/* Events */}
</h2>
<div className="space-y-1">
<Link href="/overview">
<Button
variant="ghost"
size="sm"
className="justify-start w-full"
>
<Home className="w-4 h-4 mr-2" />
Overview
</Button>
</Link>
<Link href="/keys">
<Button
variant="ghost"
size="sm"
className="justify-start w-full"
>
<FileKey className="w-4 h-4 mr-2" />
API Keys
</Button>
</Link>
<Link href="/channels">
<Button
variant="ghost"
size="sm"
className="justify-start w-full"
>
<Database className="w-4 h-4 mr-2" />
Channels
</Button>
</Link>
<Button
variant="ghost"
disabled
size="sm"
className="justify-start w-full"
>
<Filter className="w-4 h-4 mr-2" />
Filter
</Button>
<Button
variant="ghost"
disabled
size="sm"
className="justify-start w-full"
>
<BarChart className="w-4 h-4 mr-2" />
Analytics
</Button>
</div>
</div>
<div className="py-2">
<h2 className="relative px-8 text-lg font-semibold tracking-tight">
Channels
</h2>
<ScrollArea className="h-[230px] px-4">
<div className="p-2 space-y-1">
{channels
.sort((a, b) => a.name.localeCompare(b.name))
.map((channel) => (
<ChannelLink
key={channel.name}
href={`/channels/${channel.name}`}
channelName={channel.name}
/>
))}
</div>
</ScrollArea>
</div>
</div>
<div className="absolute inset-x-0 mx-6 bottom-8">
<TeamSwitcher />
</div>
</aside>
);
};