import React, { useState, useRef, useEffect } from 'react'; import type { Language } from '@/types/i18n'; // Fonction utilitaire simple pour combiner les classes const cn = (...classes: (string | undefined | null | false)[]): string => { return classes.filter(Boolean).join(' '); }; interface ModernLanguageSwitcherProps { currentLanguage: Language; onLanguageChange: (language: Language) => void; availableLanguages: Language[]; } export const ModernLanguageSwitcher: React.FC = ({ currentLanguage, onLanguageChange, availableLanguages }) => { const [isOpen, setIsOpen] = useState(false); const containerRef = useRef(null); // Gérer les clics à l'extérieur useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (containerRef.current && !containerRef.current.contains(event.target as Node)) { setIsOpen(false); } }; const handleEscapeKey = (event: KeyboardEvent) => { if (event.key === 'Escape') { setIsOpen(false); } }; if (isOpen) { document.addEventListener('mousedown', handleClickOutside); document.addEventListener('keydown', handleEscapeKey); return () => { document.removeEventListener('mousedown', handleClickOutside); document.removeEventListener('keydown', handleEscapeKey); }; } }, [isOpen]); const languageConfig: Record = { fr: { name: 'Français', flag: '🇫🇷', nativeName: 'FR' }, en: { name: 'English', flag: '🇬🇧', nativeName: 'EN' }, }; const currentConfig = languageConfig[currentLanguage]; return (
{/* Trigger Button */} {/* Dropdown Menu */} {isOpen && (
{availableLanguages.map((lang) => { const config = languageConfig[lang]; const isSelected = lang === currentLanguage; return ( ); })}
)}
); };