import React, { useEffect, useState } from 'react'; import { useUser, useOrganizationList, useOrganization } from '@clerk/clerk-react'; import { Building2, Users, RefreshCw, Mail } from 'lucide-react'; export const OrganizationSelector: React.FC = () => { const { user } = useUser(); const { setActive, userMemberships, userInvitations } = useOrganizationList({ userMemberships: { infinite: true, }, userInvitations: { infinite: true, } }); const { organization } = useOrganization(); const [isAcceptingInvites, setIsAcceptingInvites] = useState(false); console.log('OrganizationSelector rendered'); console.log('Current organization:', organization); console.log('User memberships:', userMemberships); console.log('User memberships data:', userMemberships.data); console.log('User invitations:', userInvitations); console.log('User invitations data:', userInvitations.data); // Auto-accept pending invitations useEffect(() => { const acceptPendingInvitations = async () => { if (userInvitations.data && userInvitations.data.length > 0 && !isAcceptingInvites) { console.log('Found pending invitations, auto-accepting...'); setIsAcceptingInvites(true); for (const invitation of userInvitations.data) { try { console.log('Accepting invitation:', invitation); await invitation.accept(); console.log('Invitation accepted successfully'); } catch (error) { console.error('Error accepting invitation:', error); } } // Reload memberships after accepting invitations setTimeout(() => { window.location.reload(); }, 1000); } }; acceptPendingInvitations(); }, [userInvitations.data, isAcceptingInvites]); // Auto-select if user has only one organization useEffect(() => { console.log('Auto-select effect running...'); if (!organization && userMemberships.data && userMemberships.data.length === 1) { console.log('Auto-selecting single organization...'); const membership = userMemberships.data[0]; if (setActive) { setActive({ organization: membership.organization }); } } }, [organization, userMemberships.data, setActive]); const handleSelectOrganization = async (orgId: string) => { console.log('Selecting organization:', orgId); if (setActive) { await setActive({ organization: orgId }); } // The auth context will automatically sync after organization changes }; // Loading state - check if data exists or accepting invites if (!userMemberships.data || isAcceptingInvites) { console.log('Loading state - no data yet or accepting invites'); return (
{isAcceptingInvites ? ( <>

Aceitando convites pendentes...

Por favor aguarde

) : ( <>

Carregando organizações...

)}
); } if (userMemberships.data?.length === 0) { return (

Nenhuma Organização

Você ainda não faz parte de nenhuma organização. Entre em contato com o administrador para receber um convite.

Conectado como:

{user?.primaryEmailAddress?.emailAddress}

); } return (

Selecione uma Organização

Escolha qual organização você deseja acessar

{userMemberships.data?.map((membership) => ( ))}

Conectado como {user?.primaryEmailAddress?.emailAddress}

); };