import React, { useState, useEffect, useRef } from 'react'; import { useNavigate, useLocation, Link } from 'react-router-dom'; const Header: React.FC = () => { const navigate = useNavigate(); const location = useLocation(); const [isMenuOpen, setIsMenuOpen] = useState(false); const [isBuySimExpanded, setIsBuySimExpanded] = useState(false); const [isGuideExpanded, setIsGuideExpanded] = useState(false); const [isBuySimMegaVisible, setIsBuySimMegaVisible] = useState(false); const [isGuideMegaVisible, setIsGuideMegaVisible] = useState(false); const [isLangMenuOpen, setIsLangMenuOpen] = useState(false); const [selectedLang, setSelectedLang] = useState<'en' | 'vi'>('en'); const [activeDesktopTab, setActiveDesktopTab] = useState<'popular' | 'region'>('popular'); const [isScrolled, setIsScrolled] = useState(false); const langMenuRef = useRef(null); const countries = [ { name: 'China', flag: 'cn' }, { name: 'Hong Kong', flag: 'hk' }, { name: 'Japan', flag: 'jp' }, { name: 'Singapore', flag: 'sg' }, { name: 'South Korea', flag: 'kr' }, { name: 'Taiwan', flag: 'tw' }, { name: 'Thailand', flag: 'th' }, { name: 'United States', flag: 'us' }, ]; const regionList = [ "Americas", "Asia", "Asia 11 countries", "Asialink 7 countries", "Australia & New Zealand", "EU 33 countries", "EU 40 countries", "Eurolink", "Europe", "Europe 33 countries", "Hong Kong & Macau", "Middle East and Africa", "North America & Canada", "North America A", "Oceania", "Singapore & Malaysia" ]; const guideItems = [ { label: "What is eSIM", path: "/support" }, { label: "Installation instructions", path: "/support" }, { label: "Support", path: "/support" }, { label: "Order Tracking Search", path: "/support" } ]; const languages = [ { code: 'en', label: 'English', flag: 'us' }, { code: 'vi', label: 'Tiếng Việt', flag: 'vn' } ]; useEffect(() => { const handleScroll = () => { setIsScrolled(window.scrollY > 300); }; window.addEventListener('scroll', handleScroll); return () => window.removeEventListener('scroll', handleScroll); }, []); const handleCountryClick = (c: { name: string; flag: string }) => { navigate(`/product/${c.name.toLowerCase()}`, { state: { country: c.name, flag: c.flag } }); setIsBuySimMegaVisible(false); setIsMenuOpen(false); }; const handleRegionClick = (region: string) => { navigate(`/product/${region.toLowerCase()}`, { state: { country: region, flag: 'un' } }); setIsBuySimMegaVisible(false); setIsMenuOpen(false); }; useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (langMenuRef.current && !langMenuRef.current.contains(event.target as Node)) { setIsLangMenuOpen(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, []); useEffect(() => { const handleResize = () => { if (window.innerWidth >= 1024) setIsMenuOpen(false); }; window.addEventListener('resize', handleResize); return () => window.removeEventListener('resize', handleResize); }, []); const currentLangObj = languages.find(l => l.code === selectedLang) || languages[0]; const isActive = (path: string) => location.pathname === path; return ( <>
{/* Logo */}
Infi Gate
{/* Desktop Search on Scroll */}
{/* Desktop Nav */} {/* Icons */}
{isLangMenuOpen && (
{languages.map((lang) => ( ))}
)}
{/* Full-Screen Mobile Menu with Slide-Right Transition */}
{/* Mobile Menu Header */}
setIsMenuOpen(false)} className="flex items-center space-x-1"> Infi Gate
setIsMenuOpen(false)} className={`w-full text-center py-5 px-6 rounded-3xl text-2xl font-black transition-all ${isActive('/') ? 'bg-red-50 text-[#EE0434]' : 'text-slate-800 hover:bg-slate-50'}`} > Home
{countries.map(c => ( ))}
{guideItems.map(item => ( ))}
setIsMenuOpen(false)} className={`w-full text-center py-5 px-6 rounded-3xl text-2xl font-black transition-all ${isActive('/news') ? 'bg-red-50 text-[#EE0434]' : 'text-slate-800 hover:bg-slate-50'}`} > News setIsMenuOpen(false)} className={`w-full text-center py-5 px-6 rounded-3xl text-2xl font-black transition-all ${isActive('/contact') ? 'bg-red-50 text-[#EE0434]' : 'text-slate-800 hover:bg-slate-50'}`} > Contact

Select Language

{languages.map(lang => ( ))}
setIsMenuOpen(false)} className="w-full bg-gradient-to-r from-[#E21c34] to-[#500B28] text-white py-5 rounded-[40px] font-black text-2xl shadow-xl active:scale-[0.98] transition-all flex justify-center" > Login / Register
); }; export default Header;