'use client'
import Link from 'next/link'
import { usePathname, useRouter } from 'next/navigation'
import { useTransition } from 'react'
import { ChevronDown } from 'lucide-react'
import { toast } from 'sonner'
import { Badge } from '@/components/ui/badge'
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuSeparator,
DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu'
import { AppIcon } from '@/components/shared/app-icon'
import { UserMenu } from '@/components/shared/user-menu'
import { NotificationsBell } from '@/components/shared/notifications-bell'
import { SoloNavStatusIndicators } from '@/components/solo/nav-status-indicators'
import { cn } from '@/lib/utils'
import { setActiveProductAction } from '@/actions/active-product'
interface NavBarProps {
isDemo: boolean
roles: string[]
userId: string
username: string
email: string | null
activeProduct: { id: string; name: string } | null
products: { id: string; name: string }[]
hasActiveSprint: boolean
minQuotaPct: number
}
export function NavBar({
isDemo,
roles,
userId,
username,
email,
activeProduct,
products,
hasActiveSprint,
minQuotaPct,
}: NavBarProps) {
const pathname = usePathname()
const router = useRouter()
const [isPending, startTransition] = useTransition()
function handleSwitchProduct(productId: string) {
startTransition(async () => {
const result = await setActiveProductAction(productId)
if (result?.error) {
toast.error(typeof result.error === 'string' ? result.error : 'Wisselen mislukt')
return
}
const next = products.find(p => p.id === productId)
toast.success(`Actief product: ${next?.name ?? 'gewijzigd'}`)
router.refresh()
})
}
const activeId = activeProduct?.id ?? null
// Nav link helpers
const disabledSpan = (label: string) => (
{label}
)
const navLink = (href: string, label: string, isActive: boolean) => (
{label}
)
const sprintNode = () => {
if (!activeId) return disabledSpan('Sprint')
const isActive = pathname.includes('/sprint')
if (!hasActiveSprint) {
return (
Sprint
Geen actieve sprint
)
}
const href = `/products/${activeId}/sprint`
return navLink(href, 'Sprint', isActive)
}
return (
{/* Links: logo + nav */}
Scrum4Me
{isDemo && (
Demo
)}
{/* Midden: actief product */}
{activeProduct ? (
{activeProduct.name.length > 22
? activeProduct.name.slice(0, 22) + '…'
: activeProduct.name}
{products.map(p => (
p.id !== activeProduct.id && handleSwitchProduct(p.id)}
className={cn(
p.id === activeProduct.id && 'bg-primary-container text-primary-container-foreground font-medium'
)}
>
{p.name}
))}
Producten beheren →
) : (
Geen actief product
)}
{/* Rechts: solo-status + notifications + account-menu */}
)
}