'use client'; import { useState, useEffect } from 'react'; import { usePathname } from 'next/navigation'; import { useContribuyentes } from '@/lib/hooks/use-contribuyentes'; import { useContribuyenteStore } from '@/stores/contribuyente-store'; import { cn } from '@horux/shared-ui'; import { Building2, ChevronDown, Check, Users } from 'lucide-react'; // Rutas donde el selector NO aplica (vistas cross-contribuyente del despacho). const HIDDEN_PATHS = ['/despachos']; export function ContribuyenteSelector() { const pathname = usePathname(); const [open, setOpen] = useState(false); const { data: contribuyentes, isLoading } = useContribuyentes(); const { selectedContribuyenteId, setSelectedContribuyente, clearSelectedContribuyente } = useContribuyenteStore(); useEffect(() => { const handleClickOutside = (e: MouseEvent) => { const target = e.target as HTMLElement; if (!target.closest('.contribuyente-selector')) setOpen(false); }; document.addEventListener('click', handleClickOutside); return () => document.removeEventListener('click', handleClickOutside); }, []); // Auto-select if user has exactly 1 contribuyente (common for clients) useEffect(() => { if (contribuyentes && contribuyentes.length === 1 && !selectedContribuyenteId) { setSelectedContribuyente(contribuyentes[0].id, contribuyentes[0].rfc, contribuyentes[0].nombre); } }, [contribuyentes, selectedContribuyenteId, setSelectedContribuyente]); // Clear invalid selection (e.g. stale localStorage from another tenant/session) useEffect(() => { if (contribuyentes && contribuyentes.length > 0 && selectedContribuyenteId) { const exists = contribuyentes.some(c => c.id === selectedContribuyenteId); if (!exists) { clearSelectedContribuyente(); } } }, [contribuyentes, selectedContribuyenteId, clearSelectedContribuyente]); if (isLoading || !contribuyentes || contribuyentes.length === 0) return null; if (pathname && HIDDEN_PATHS.some(p => pathname === p || pathname.startsWith(`${p}/`))) return null; const selected = contribuyentes.find((c) => c.id === selectedContribuyenteId); return (
Contribuyentes