'use client'; import { useCallback, useEffect, useRef, useState } from 'react'; import { Globe, Check } from 'lucide-react'; import { useLocale, useTranslations } from 'next-intl'; import { usePathname, useRouter } from '@/i18n/navigation'; import { useAuth } from '@/lib/hooks/useAuth'; import { authApi } from '@/lib/api/auth'; import { locales, type AppLocale } from '@/i18n/routing'; const LOCALE_OPTIONS: AppLocale[] = [...locales]; export function LanguageToggle() { const t = useTranslations('language'); const locale = useLocale() as AppLocale; const router = useRouter(); const pathname = usePathname(); const { user, setUserLanguage } = useAuth(); const [open, setOpen] = useState(false); const menuRef = useRef(null); useEffect(() => { const onDocClick = (e: MouseEvent) => { if (menuRef.current && !menuRef.current.contains(e.target as Node)) { setOpen(false); } }; document.addEventListener('mousedown', onDocClick); return () => document.removeEventListener('mousedown', onDocClick); }, []); const switchLocale = useCallback( async (next: AppLocale) => { if (next === locale) { setOpen(false); return; } if (user) { setUserLanguage(next); try { await authApi.updateLanguage(next); } catch { /* keep optimistic locale in client state */ } } router.replace(pathname, { locale: next }); setOpen(false); }, [locale, pathname, router, setUserLanguage, user], ); return (
{open && ( )}
); }