'use client'; import { useState, useEffect, useRef } from 'react'; import { useSession } from 'next-auth/react'; import { MapPin, ChevronDown, Check } from 'lucide-react'; import { cn } from '@/lib/utils'; interface Site { id: string; name: string; } export function SiteSwitcher() { const { data: session } = useSession(); const [sites, setSites] = useState([]); const [selectedSiteId, setSelectedSiteId] = useState(null); const [isOpen, setIsOpen] = useState(false); const [isLoading, setIsLoading] = useState(true); const dropdownRef = useRef(null); const isSuperAdmin = session?.user?.role === 'SUPER_ADMIN'; useEffect(() => { async function fetchSites() { try { const response = await fetch('/api/sites'); if (response.ok) { const data = await response.json(); setSites(data.data || []); } } catch (error) { console.error('Failed to fetch sites:', error); } finally { setIsLoading(false); } } fetchSites(); }, []); useEffect(() => { function handleClickOutside(event: MouseEvent) { if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { setIsOpen(false); } } document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, []); const selectedSite = sites.find((site) => site.id === selectedSiteId); const displayName = selectedSiteId ? selectedSite?.name : 'Todas las sedes'; // For non-SUPER_ADMIN users, just show their assigned site if (!isSuperAdmin) { const userSiteName = sites.length > 0 ? sites[0]?.name : 'Cargando...'; return (
{isLoading ? 'Cargando...' : userSiteName}
); } // For SUPER_ADMIN, show dropdown to select site return (
{isOpen && (
{sites.map((site) => ( ))}
)}
); } export default SiteSwitcher;