import React, { useState, useContext } from 'react'; import { LogOut } from 'lucide-react'; import { disconnect } from '@/app/actions/authAction'; import { getGravatarUrl } from '@/utils/gravatar'; import { useEstablishment } from '@/context/EstablishmentContext'; import { useChatConnection } from '@/context/ChatConnectionContext'; import DropdownMenu from '@/components/DropdownMenu'; import { usePopup } from '@/context/PopupContext'; import { getRightStr } from '@/utils/rights'; import { ChevronDown } from 'lucide-react'; // Import de l'icône import Image from 'next/image'; // Import du composant Image import { BASE_URL, } from '@/utils/Url'; const ProfileSelector = ({ onRoleChange, className = '' }) => { const { establishments, selectedRoleId, setSelectedRoleId, setSelectedEstablishmentId, setProfileRole, user, setSelectedEstablishmentEvaluationFrequency, setSelectedEstablishmentTotalCapacity, selectedEstablishmentLogo, setSelectedEstablishmentLogo } = useEstablishment(); const { isConnected, connectionStatus } = useChatConnection(); const [dropdownOpen, setDropdownOpen] = useState(false); const { showPopup } = usePopup(); const handleRoleChange = (roleId) => { // Pas bon quand on a plusieur role pour le même établissement const role = user.roles[roleId].role_type; const establishmentId = user.roles[roleId].establishment__id; const establishmentEvaluationFrequency = user.roles[roleId].establishment__evaluation_frequency; const establishmentTotalCapacity = user.roles[roleId].establishment__total_capacity; const establishmentLogo = user.roles[roleId].establishment__logo; setProfileRole(role); setSelectedEstablishmentId(establishmentId); setSelectedEstablishmentEvaluationFrequency( establishmentEvaluationFrequency ); setSelectedEstablishmentTotalCapacity(establishmentTotalCapacity); setSelectedEstablishmentLogo(establishmentLogo); setSelectedRoleId(roleId); if (onRoleChange) { onRoleChange(roleId); } setDropdownOpen(false); // Fermer le menu après sélection }; const handleDisconnect = () => { setDropdownOpen(false); setTimeout(() => { showPopup && showPopup( 'Êtes-vous sûr(e) de vouloir vous déconnecter ?', () => disconnect(), undefined ); }, 150); }; const selectedEstablishment = establishments.find( (est) => est.role_id === selectedRoleId ); // Fonction pour obtenir la couleur de la bulle de statut const getStatusColor = () => { switch (connectionStatus) { case 'connected': return 'bg-green-500'; case 'connecting': return 'bg-yellow-500'; case 'error': return 'bg-red-500'; case 'disconnected': default: return 'bg-gray-400'; } }; // Fonction pour obtenir le titre de la bulle de statut const getStatusTitle = () => { switch (connectionStatus) { case 'connected': return 'Chat connecté'; case 'connecting': return 'Connexion au chat...'; case 'error': return 'Erreur de connexion au chat'; case 'disconnected': default: return 'Chat déconnecté'; } }; // Suppression du tronquage JS, on utilise uniquement CSS const isSingleRole = establishments && establishments.length === 1; return (
Profile {/* Bulle de statut de connexion au chat */}
{user?.email}
{selectedEstablishment?.name ? `${selectedEstablishment.name}` : ''}
{getRightStr(selectedEstablishment?.role_type) || ''}
} items={ isSingleRole ? [ { type: 'item', label: 'Déconnexion', onClick: handleDisconnect, icon: LogOut, }, ] : [ ...establishments.map((establishment) => ({ type: 'item', label: (
{getRightStr(establishment.role_type)}
{establishment.name}
), onClick: () => handleRoleChange(establishment.role_id), })), { type: 'separator', content:
, }, { type: 'item', label: 'Déconnexion', onClick: handleDisconnect, icon: LogOut, }, ] } buttonClassName="w-full" menuClassName="absolute mt-2 w-full bg-white border border-gray-200 rounded shadow-lg z-10" dropdownOpen={dropdownOpen} setDropdownOpen={setDropdownOpen} />
); }; export default ProfileSelector;