"use client"; import { LayoutDashboard, ListTodo, Github, Database, Workflow } from "lucide-react"; import { Sidebar, SidebarContent, SidebarGroup, SidebarGroupContent, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarRail, SidebarFooter, } from "@bullstudio/ui/components/sidebar"; import { Link, useLocation } from "@tanstack/react-router"; import { useTRPC } from "@/integrations/trpc/react"; import { useQuery } from "@tanstack/react-query"; import { VERSION } from "@/const"; import { assetUrl } from "@/lib/utils"; export function AppSidebar() { const location = useLocation(); const pathname = location.pathname; const trpc = useTRPC(); const { data: connectionInfo } = useQuery( trpc.connection.info.queryOptions() ); const isActive = (href: string) => { if (href === "/") { return pathname === "/"; } return pathname.startsWith(href); }; // Build navigation items based on provider capabilities const baseNavItems = [ { title: "Overview", href: "/", icon: LayoutDashboard, }, { title: "Jobs", href: "/jobs", icon: ListTodo, }, ]; // Only show Flows for providers that support it (BullMQ) const navItems = connectionInfo?.capabilities?.supportsFlows ? [ ...baseNavItems, { title: "Flows", href: "/flows", icon: Workflow, }, ] : baseNavItems; return ( {/* Header with Logo */}
bullstudio
bullstudio CLI
{/* Main Navigation */} {navItems.map((item) => { const active = isActive(item.href); return ( {item.title} ); })} {/* Redis Connection Info */}
Redis {connectionInfo?.providerType && ( {connectionInfo.providerType} )}
{connectionInfo?.displayUrl || "connecting..."}
{/* Footer */}
{VERSION}
{/* Rail for resizing */}
); }