"use client"; import { useState, useEffect, useCallback } from "react"; import Link from "next/link"; import Image from "next/image"; import { X, Search, Store, User as UserIcon } from "lucide-react"; import { Button } from "@/components/ui/button"; import Logo from "@/public/logo.webp"; import CategoryMenu from "./ui/CategoryMenu"; import SearchBar from "./ui/SearchBar"; import AuthDialog from "./ui/AuthDialog"; import ActionButtons from "./ui/ActionButtons"; import LanguageSelector from "./ui/LanguageSelector"; import MobileBottomNav from "./MobileBar"; import { useAuthStatus, useLogout } from "@/lib/hooks/useAuth"; import { useTranslations } from "next-intl"; import { CategoryIcon } from "../icons"; import { useRouter } from "next/navigation"; interface HeaderProps { locale?: string; } export default function Header({ locale = "ru" }: HeaderProps) { const [isClient, setIsClient] = useState(false); const [isCategoryOpen, setIsCategoryOpen] = useState(false); const [isMobileSearchOpen, setIsMobileSearchOpen] = useState(false); const [isLoginOpen, setIsLoginOpen] = useState(false); const t = useTranslations(); const router = useRouter(); const { isAuthenticated, isLoading } = useAuthStatus(); const { mutate: logout, isPending: isLoggingOut } = useLogout(); useEffect(() => { setIsClient(true); }, []); const handleAuthClick = useCallback(() => { if (isAuthenticated) { window.location.href = `/${locale}/me`; } else { setIsLoginOpen(true); } }, [isAuthenticated, locale]); const handleLogout = useCallback(() => { logout(); }, [logout]); const toggleCategoryMenu = useCallback(() => { setIsCategoryOpen((prev) => !prev); }, []); const closeCategoryMenu = useCallback(() => { setIsCategoryOpen(false); }, []); const handleProfileClick = useCallback(() => { router.push(`/${locale}/me`); }, [router, locale]); if (!isClient) return null; return ( <>
Logo
setIsMobileSearchOpen(false)} searchPlaceholder={t("common.search")} locale={locale} /> setIsLoginOpen(false)} /> setIsLoginOpen(true)} onProfileClick={handleProfileClick} /> ); }