'use client'; import { useState, useEffect } from 'react'; import Link from 'next/link'; import { motion } from 'framer-motion'; import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { MapPin, Phone, Building, Menu, X } from 'lucide-react'; import ContactModal from './ContactModal'; const cityData = { Москва: { phone: '+7 (916) 830-58-58', }, Чебоксары: { phone: '+7 (916) 830-58-58', }, } as const; const navigation = [ { name: 'О компании', href: '#about' }, { name: 'Преимущества', href: '#why-us' }, { name: 'Как мы работаем', href: '#workflow' }, { name: 'Сертификаты', href: '#certificates' }, { name: 'Услуги', href: '#services' }, { name: 'Контакты', href: '#contacts' }, ]; type CityKey = keyof typeof cityData; interface HeaderProps { selectedCity: CityKey; onCityChange: (city: CityKey) => void; } const Header = ({ selectedCity, onCityChange }: HeaderProps) => { const [isMenuOpen, setIsMenuOpen] = useState(false); const [isVisible, setIsVisible] = useState(true); const [lastScrollY, setLastScrollY] = useState(0); const [isModalOpen, setIsModalOpen] = useState(false); useEffect(() => { const handleScroll = () => { const currentScrollY = window.scrollY; setIsVisible(currentScrollY < lastScrollY || currentScrollY < 100); setLastScrollY(currentScrollY); }; window.addEventListener('scroll', handleScroll, { passive: true }); return () => window.removeEventListener('scroll', handleScroll); }, [lastScrollY]); // Закрываем меню при клике на ссылку useEffect(() => { if (isMenuOpen) { document.body.style.overflow = 'hidden'; } else { document.body.style.overflow = 'auto'; } return () => { document.body.style.overflow = 'auto'; }; }, [isMenuOpen]); return ( <> {/* Логотип */} ЦКЭ Центр комплексных экспертиз {/* Мобильный номер телефона и кнопка меню */} {cityData[selectedCity].phone} setIsMenuOpen(!isMenuOpen)} aria-label={isMenuOpen ? 'Закрыть меню' : 'Открыть меню'} > {isMenuOpen ? ( ) : ( )} {/* Десктопная навигация */} {navigation.map((item) => ( {item.name} ))} {/* Десктопные контакты и кнопки */} {selectedCity} onCityChange('Москва')} className="cursor-pointer" > Москва onCityChange('Чебоксары')} className="cursor-pointer" > Чебоксары {cityData[selectedCity].phone} setIsModalOpen(true)} > Оставить заявку {/* Выпадающее мобильное меню */} {navigation.map((item) => ( setIsMenuOpen(false)} > {item.name} ))} Выберите город: onCityChange('Москва')} className={`w-full py-2 px-4 rounded-lg text-left ${ selectedCity === 'Москва' ? 'bg-blue-50 text-blue-700' : 'text-gray-700 hover:bg-gray-100' }`} > Москва onCityChange('Чебоксары')} className={`w-full py-2 px-4 rounded-lg text-left ${ selectedCity === 'Чебоксары' ? 'bg-blue-50 text-blue-700' : 'text-gray-700 hover:bg-gray-100' }`} > Чебоксары { setIsModalOpen(true); setIsMenuOpen(false); }} > Оставить заявку {/* Темный оверлей при открытом меню */} {isMenuOpen && ( setIsMenuOpen(false)} /> )} setIsModalOpen(false)} /> > ); }; export default Header;
Выберите город: