fix: dashboard updates when switching sites

- Added SiteContext for global site selection state
- Updated admin layout with SiteProvider
- Updated SiteSwitcher to use shared context
- Dashboard now refetches data when site changes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Ivan
2026-02-01 08:41:02 +00:00
parent 51ecb1b231
commit 242b8bad3d
4 changed files with 107 additions and 57 deletions

View File

@@ -4,40 +4,16 @@ 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;
}
import { useSite } from '@/contexts/site-context';
export function SiteSwitcher() {
const { data: session } = useSession();
const [sites, setSites] = useState<Site[]>([]);
const [selectedSiteId, setSelectedSiteId] = useState<string | null>(null);
const { sites, selectedSiteId, selectedSite, setSelectedSiteId, isLoading } = useSite();
const [isOpen, setIsOpen] = useState(false);
const [isLoading, setIsLoading] = useState(true);
const dropdownRef = useRef<HTMLDivElement>(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)) {
@@ -49,7 +25,6 @@ export function SiteSwitcher() {
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