'use client'; import { useState, useRef, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import { MdPublic, MdCheck } from 'react-icons/md'; const REGIONS = [ { code: 'VN', label: 'Vietnam', flag: '🇻🇳' }, { code: 'US', label: 'United States', flag: '🇺🇸' }, { code: 'JP', label: 'Japan', flag: '🇯🇵' }, { code: 'KR', label: 'South Korea', flag: '🇰🇷' }, { code: 'IN', label: 'India', flag: '🇮🇳' }, { code: 'GB', label: 'United Kingdom', flag: '🇬🇧' }, { code: 'GLOBAL', label: 'Global', flag: '🌐' }, ]; function getRegionCookie(): string { if (typeof document === 'undefined') return 'VN'; const match = document.cookie.match(/(?:^|; )region=([^;]*)/); return match ? decodeURIComponent(match[1]) : 'VN'; } function setRegionCookie(code: string) { document.cookie = `region=${encodeURIComponent(code)}; path=/; max-age=${60 * 60 * 24 * 365}; SameSite=Lax`; } export default function RegionSelector() { const [isOpen, setIsOpen] = useState(false); const [selected, setSelected] = useState('VN'); const menuRef = useRef(null); const router = useRouter(); useEffect(() => { setSelected(getRegionCookie()); }, []); useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (menuRef.current && !menuRef.current.contains(event.target as Node)) { setIsOpen(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, []); const handleSelect = (code: string) => { setSelected(code); setRegionCookie(code); setIsOpen(false); // Dispatch custom event for immediate notification window.dispatchEvent(new CustomEvent('regionchange', { detail: { region: code } })); router.refresh(); }; const current = REGIONS.find(r => r.code === selected) || REGIONS[0]; return (
{isOpen && (
Select Region
{REGIONS.map(r => ( ))}
)}
); }