'use client'; import React, { useState, useRef, useEffect } from 'react'; import Link from 'next/link'; import { Club, UserPortalPermissions, ClubRole } from './types'; interface FounderTopBarProps { club: Club; permissions: UserPortalPermissions; activeNav?: string; onToggleMobileSidebar?: () => void; onPlanRide?: () => void; onPostAnnouncement?: () => void; onSwitchRole?: (role: ClubRole) => void; onSwitchClub?: () => void; } export function FounderTopBar({ club, permissions, activeNav, onToggleMobileSidebar, onPlanRide, onPostAnnouncement, onSwitchRole, onSwitchClub, }: FounderTopBarProps) { const [userMenuOpen, setUserMenuOpen] = useState(false); const userMenuRef = useRef(null); useEffect(() => { function handleClickOutside(event: MouseEvent) { if (userMenuRef.current && !userMenuRef.current.contains(event.target as Node)) { setUserMenuOpen(false); } } function handleKeyDown(event: KeyboardEvent) { if (event.key === 'Escape') { setUserMenuOpen(false); } } if (userMenuOpen) { document.addEventListener('mousedown', handleClickOutside); document.addEventListener('keydown', handleKeyDown); } return () => { document.removeEventListener('mousedown', handleClickOutside); document.removeEventListener('keydown', handleKeyDown); }; }, [userMenuOpen]); return (
{/* Left: Mobile hamburger + Breadcrumbs + Switch Club */}
{/* Mobile Hamburger Toggle */}
Clubs / {club.name} {activeNav === 'profile' && ( <> / Club Profile )} {activeNav === 'applications' && ( <> / Applications )} {activeNav === 'ranks_roles' && ( <> / Ranks & Roles )} {activeNav === 'rides' && ( <> / Rides )} {activeNav === 'settings' && ( <> / Settings )}
{/* Middle: Search Input (desktop/tablet only, hidden on lg to prevent crush) */}
search
{/* Right: Actions + Role Switcher preview pill + Notifications + Profile */}
{/* Authoritative Role Badge (Production) vs Interactive Role Switcher (Development Only) */} {process.env.NODE_ENV === 'development' ? (
Dev Preview: {(['owner', 'admin', 'member'] as const).map((r) => ( ))}
) : (
{permissions.role}
)} {/* Post Announcement (Owner / Admin only) */} {permissions.canManageSettings && ( )} {/* Plan Club Ride (Owner / Admin only) */} {permissions.canPlanRides && ( )} {/* Notifications */}
{/* Rider Profile Menu Dropdown */}
{userMenuOpen && (
{club.founderName || 'Rider Account'} {permissions.role === 'owner' ? 'Club Owner' : permissions.role === 'admin' ? 'Club Admin' : 'Club Member'}
setUserMenuOpen(false)} role="menuitem" className="flex items-center gap-3 px-3 py-2.5 rounded-xl text-slate-200 hover:text-brand-cyan hover:bg-surface-container transition-colors text-xs font-semibold" > person Rider Account setUserMenuOpen(false)} role="menuitem" className="flex items-center gap-3 px-3 py-2.5 rounded-xl text-slate-200 hover:text-brand-cyan hover:bg-surface-container transition-colors text-xs font-semibold" > groups Group Rides setUserMenuOpen(false)} role="menuitem" className="flex items-center gap-3 px-3 py-2.5 rounded-xl text-slate-200 hover:text-brand-cyan hover:bg-surface-container transition-colors text-xs font-semibold" > shield Founder Portal {(permissions.role === 'owner' || permissions.role === 'admin') && ( setUserMenuOpen(false)} role="menuitem" className="flex items-center gap-3 px-3 py-2.5 rounded-xl text-slate-200 hover:text-brand-cyan hover:bg-surface-container transition-colors text-xs font-semibold" > admin_panel_settings Operations Admin )}
)}
); }