import { Boxes, Clock, Database, DatabaseBackup, Home, Settings, Share2, } from "lucide-react"; import { Tooltip } from "../ui/Tooltip"; import { DB_CAPABILITIES, type DbCapabilities } from "../../lib/dbCapabilities"; export interface DbViewerSidebarProps { currentView: string; onNavigate: (view: string) => void; capabilities?: DbCapabilities; } export const NAV_CAPABILITY_KEY: Record = { "db-viewer": "explorer", queries: "queries", "schema-visualizer": "visualizer", objects: "objects", tools: "tools", }; interface NavItem { id: string; label: string; icon: React.ReactNode; stub?: boolean; } export function DbViewerSidebar({ currentView, onNavigate, capabilities = DB_CAPABILITIES.postgresql, }: DbViewerSidebarProps) { const topItems: NavItem[] = [ { id: "db-viewer", label: "Explorer", icon: }, { id: "queries", label: "Queries", icon: , }, { id: "schema-visualizer", label: "Schema Visualizer", icon: , }, { id: "objects", label: "Objects", icon: }, { id: "tools", label: "Tools", icon: }, ]; const visibleTopItems = topItems.filter( (item) => capabilities[NAV_CAPABILITY_KEY[item.id]] ); const bottomItems: NavItem[] = [ { id: "home", label: "Home", icon: }, { id: "settings", label: "Settings", icon: }, ]; function renderItem(item: NavItem) { const isActive = currentView === item.id; const baseClass = "w-8 h-8 flex items-center justify-center rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-accent/50"; const activeClass = "text-accent"; const inactiveClass = "text-text-muted hover:text-text hover:bg-surface-raised"; const stubClass = "opacity-40 cursor-not-allowed"; return ( ); } return (
{visibleTopItems.map(renderItem)}
{bottomItems.map(renderItem)}
); }