Files
edr-platform/apps/edr-passenger-web/portal/src/components/LanguageSwitcher.tsx

66 lines
2.0 KiB
TypeScript

'use client';
import { useEffect, useState } from 'react';
import { useLanguage, Language } from '@/lib/i18n';
import { Globe } from 'lucide-react';
const languages: { code: Language; label: string }[] = [
{ code: 'en', label: 'English' },
{ code: 'am', label: 'አማርኛ' },
{ code: 'om', label: 'Afan Oromo' },
{ code: 'fr', label: 'Français' },
];
export function LanguageSwitcher() {
const [isOpen, setIsOpen] = useState(false);
const [currentLang, setCurrentLang] = useState<Language>('en');
const { getLang, setLang } = useLanguage();
useEffect(() => {
setCurrentLang(getLang());
}, [getLang]);
const handleLanguageChange = (lang: Language) => {
setLang(lang);
setCurrentLang(lang);
setIsOpen(false);
};
return (
<div className="relative">
<button
onClick={() => setIsOpen(!isOpen)}
className="p-2 text-gray-100 hover:bg-white hover:bg-opacity-10 rounded-lg transition-colors"
title="Change language"
aria-label="Change language"
>
<Globe className="w-5 h-5" />
</button>
{isOpen && (
<>
<div
className="fixed inset-0 z-30"
onClick={() => setIsOpen(false)}
/>
<div className="absolute right-0 mt-2 w-40 bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 z-40 animate-in fade-in zoom-in-95 duration-200">
{languages.map((lang) => (
<button
key={lang.code}
onClick={() => handleLanguageChange(lang.code)}
className={`w-full text-left px-4 py-2.5 transition-all duration-200 ${
currentLang === lang.code
? 'bg-primary text-white font-medium'
: 'text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700'
}`}
>
{lang.label}
</button>
))}
</div>
</>
)}
</div>
);
}