import Link from "next/link"; import { Search, Heart, User, ShoppingCart, ChevronLeft, LogOut, Menu, X } from "lucide-react"; import { useState, useEffect } from "react"; import { motion, AnimatePresence } from "framer-motion"; import Image from "next/image"; import { useRouter } from "next/router"; import authService from "../services/auth"; import cartService from "../services/cart"; export default function Header() { const router = useRouter(); // Состояние для отслеживания прокрутки страницы const [scrolled, setScrolled] = useState(false); // Состояние для отслеживания аутентификации пользователя const [isAuthenticated, setIsAuthenticated] = useState(false); // Состояние для отображения выпадающего меню пользователя const [showUserMenu, setShowUserMenu] = useState(false); // Состояние для отображения мобильного меню const [mobileMenuOpen, setMobileMenuOpen] = useState(false); // Состояние для хранения количества товаров в корзине const [cartItemsCount, setCartItemsCount] = useState(0); // Эффект для проверки аутентификации при загрузке компонента useEffect(() => { setIsAuthenticated(authService.isAuthenticated()); }, []); // Эффект для загрузки количества товаров в корзине useEffect(() => { const fetchCartItemsCount = async () => { if (authService.isAuthenticated()) { try { const cart = await cartService.getCart(); setCartItemsCount(cart.items_count); } catch (error) { console.error('Ошибка при загрузке корзины:', error); setCartItemsCount(0); } } else { setCartItemsCount(0); } }; fetchCartItemsCount(); // Обновляем количество товаров в корзине при изменении маршрута const handleRouteChange = () => { fetchCartItemsCount(); }; router.events.on('routeChangeComplete', handleRouteChange); return () => { router.events.off('routeChangeComplete', handleRouteChange); }; }, [isAuthenticated, router.events]); // Эффект для отслеживания прокрутки useEffect(() => { const handleScroll = () => { const isScrolled = window.scrollY > 50; if (isScrolled !== scrolled) { setScrolled(isScrolled); } }; window.addEventListener('scroll', handleScroll); return () => { window.removeEventListener('scroll', handleScroll); }; }, [scrolled]); // Функция для выхода из системы const handleLogout = () => { authService.logout(); setIsAuthenticated(false); setShowUserMenu(false); setCartItemsCount(0); router.push('/'); }; // Функция для возврата на предыдущую страницу const goBack = () => { router.back(); }; // Проверяем, находимся ли мы на главной странице const isHomePage = router.pathname === "/"; // Проверяем, находимся ли мы на странице категорий или коллекций const isDetailPage = router.pathname.includes("[slug]"); // Функция для переключения отображения меню пользователя const toggleUserMenu = () => { setShowUserMenu(!showUserMenu); }; // Функция для переключения мобильного меню const toggleMobileMenu = () => { setMobileMenuOpen(!mobileMenuOpen); }; // Закрыть мобильное меню при переходе на другую страницу useEffect(() => { setMobileMenuOpen(false); }, [router.pathname]); // Закрыть меню пользователя при клике вне его useEffect(() => { const handleClickOutside = (event: MouseEvent) => { const target = event.target as HTMLElement; if (showUserMenu && !target.closest('.user-menu-container')) { setShowUserMenu(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, [showUserMenu]); return (
{/* Мобильное меню */} {mobileMenuOpen && (
Каталог Все товары Коллекции Новинки Отследить заказ Поиск
)}
); }