/** * Language Selector Component * Dropdown for selecting the application language */ import React, { useState, useRef, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { Globe, Check, ChevronDown } from 'lucide-react'; import { supportedLanguages, SupportedLanguage } from '../i18n'; interface LanguageSelectorProps { variant?: 'dropdown' | 'inline'; showFlag?: boolean; className?: string; } const LanguageSelector: React.FC = ({ variant = 'dropdown', showFlag = true, className = '', }) => { const { i18n } = useTranslation(); const [isOpen, setIsOpen] = useState(false); const dropdownRef = useRef(null); const currentLanguage = supportedLanguages.find( (lang) => lang.code === i18n.language ) || supportedLanguages[0]; useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { setIsOpen(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, []); const handleLanguageChange = (code: SupportedLanguage) => { i18n.changeLanguage(code); setIsOpen(false); }; if (variant === 'inline') { return (
{supportedLanguages.map((lang) => ( ))}
); } return (
{isOpen && (
    {supportedLanguages.map((lang) => (
  • ))}
)}
); }; export default LanguageSelector;