'use client'
import Link from 'next/link'
import { usePathname } from 'next/navigation'
import { useState } from 'react'
import { cn } from '@/lib/utils'
import { signOut } from '@/lib/auth-actions'
import type { Tables } from '@/types/database'
type SpaceMember = Tables<'space_members'>
type Space = Tables<'spaces'>
import {
Menu, X, LayoutDashboard, ListChecks, FolderKanban, Settings2,
MessageSquare, Users, CreditCard, BookUser, Download, LogOut,
Vote, ShieldAlert, ScrollText, LineChart, UserCircle, UserSearch,
MessagesSquare,
} from 'lucide-react'
interface NavLinkProps {
href: string
label: string
icon: React.ElementType
badge?: number
active: boolean
onClick?: () => void
}
function NavLink({ href, label, icon: Icon, badge, active, onClick }: NavLinkProps) {
return (
{label}
{badge && badge > 0 ? (
{badge}
) : null}
)
}
interface AppSidebarProps {
member: SpaceMember & { spaces: Space | null }
taskBadge?: number
commsBadge?: number
paymentBadge?: number
}
export function AppSidebar({ member, taskBadge = 0, commsBadge = 0, paymentBadge = 0 }: AppSidebarProps) {
const pathname = usePathname()
const space = member.spaces
const initials = (member.display_name || 'U').split(' ').map(n => n[0]).join('').toUpperCase().slice(0, 2)
const isAdmin = member.role === 'admin' || member.role === 'board'
const [drawerOpen, setDrawerOpen] = useState(false)
const isActive = (href: string) => pathname === href || pathname.startsWith(href + '/')
const handleSignOut = async () => {
await signOut()
}
const closeDrawer = () => setDrawerOpen(false)
const renderNav = (onNav?: () => void) => (
<>
{/* Logo */}
{'{'}hs{'}'}
{space?.name || 'My Space'}
{/* Nav */}
{/* User */}
>
)
return (
<>
{/* Desktop sidebar */}
{/* Mobile: top bar */}
hs
{space?.name}
{/* Mobile: drawer overlay */}
{drawerOpen && (
Menu
{renderNav(closeDrawer)}
)}
>
)
}