'use client'; import React from 'react'; import Link from 'next/link'; import { useSearchParams } from 'next/navigation'; import { Club, UserPortalPermissions } from './types'; interface FounderSidebarProps { club: Club; permissions: UserPortalPermissions; activeNav?: string; onNavSelect?: (nav: string) => void; pendingApplicationsCount?: number; upcomingRidesCount?: number; isOpenOnMobile?: boolean; onCloseMobile?: () => void; } export function FounderSidebar({ club, permissions, activeNav = 'overview', onNavSelect, pendingApplicationsCount = 4, upcomingRidesCount = 2, isOpenOnMobile = false, onCloseMobile, }: FounderSidebarProps) { const searchParams = useSearchParams(); const isDemo = searchParams?.get('preview') === 'demo'; const queryParam = isDemo ? '?preview=demo' : ''; const clubParam = club.slug || club.id; const shortCode = club.name .split(/\s+/) .filter(Boolean) .map((w) => w[0].toUpperCase()) .slice(0, 3) .join('') || 'ATL'; const navItemsTop = [ { id: 'overview', label: 'Overview', icon: 'dashboard', badge: 'ACTIVE', badgeType: 'primary' }, { id: 'profile', label: 'Club Profile', icon: 'shield' }, { id: 'members', label: 'Members', icon: 'group', badge: club.memberCount.toString(), badgeType: 'neutral' }, { id: 'applications', label: 'Applications', icon: 'person_add', badge: pendingApplicationsCount > 0 ? `${pendingApplicationsCount} ALERT` : undefined, badgeType: 'error', }, { id: 'ranks_roles', label: 'Ranks & Roles', icon: 'military_tech' }, ]; const navItemsMiddle = [ { id: 'rides', label: 'Rides', icon: 'route', badge: upcomingRidesCount > 0 ? `${upcomingRidesCount} ACTIVE` : undefined, badgeType: 'secondary', }, { id: 'routes', label: 'Routes', icon: 'map' }, { id: 'wall', label: 'Wall', icon: 'forum' }, { id: 'chat', label: 'Chat', icon: 'chat' }, { id: 'stats', label: 'Stats', icon: 'query_stats' }, ]; const navItemsBottom = [ { id: 'moderation', label: 'Moderation', icon: 'gavel', badge: '1', badgeType: 'neutral' }, { id: 'settings', label: 'Settings', icon: 'settings' }, ]; function getRouteHref(id: string) { if (id === 'overview') return `/clubs/${clubParam}/manage${queryParam}`; if (id === 'profile') return `/clubs/${clubParam}/manage/profile${queryParam}`; if (id === 'applications') return `/clubs/${clubParam}/manage/applications${queryParam}`; if (id === 'settings') return `/clubs/${clubParam}/manage/settings${queryParam}`; return undefined; } function handleItemClick(id: string) { onNavSelect?.(id); onCloseMobile?.(); } function renderNavItem(item: { id: string; label: string; icon: string; badge?: string; badgeType?: string }) { const isActive = activeNav === item.id; const href = getRouteHref(item.id); const isProfile = item.id === 'profile'; const isSettings = item.id === 'settings'; const isApplications = item.id === 'applications'; const isSubRoute = isProfile || isSettings || isApplications; const content = ( <>
{item.icon} {item.label}
{item.badge && ( {item.badge} )} {isActive && isSubRoute && !item.badge && ( )} ); const baseClasses = `w-full flex items-center justify-between px-3 py-2 rounded transition-colors text-xs ${ isActive ? isSubRoute ? 'bg-surface-container-high text-primary-container border-l-2 border-primary-container font-medium' : 'bg-primary text-white font-medium' : 'text-on-surface-variant hover:bg-surface-container hover:text-on-surface font-normal' }`; if (href) { return ( { onNavSelect?.(item.id); onCloseMobile?.(); }} className={baseClasses} > {content} ); } return ( ); } return ( <> {/* Mobile Backdrop */} {isOpenOnMobile && (