// Header.tsx "use client"; import { useState, useEffect, useCallback } from "react"; import Link from "next/link"; import Image from "next/image"; import { X, Search } 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 } from "@/lib/hooks/useAuth"; import { useTranslations } from "next-intl"; import { CategoryIcon } from "../icons"; 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 { isAuthenticated } = useAuthStatus(); useEffect(() => { setIsClient(true); }, []); const handleAuthClick = useCallback(() => { if (isAuthenticated) { window.location.href = `/${locale}/me`; } else { setIsLoginOpen(true); } }, [isAuthenticated, locale]); const toggleCategoryMenu = useCallback(() => { setIsCategoryOpen((prev) => !prev); }, []); const closeCategoryMenu = useCallback(() => { setIsCategoryOpen(false); }, []); if (!isClient) return null; return ( <> {/* Logo */} {/* Catalog Button - Desktop */} {isCategoryOpen ? : } {t("common.catalog")} {/* Mobile Search & Language */} setIsMobileSearchOpen(true)} className="hover:bg-gray-100 rounded-lg transition-colors" > {/* Desktop Language Selector */} {/* Desktop Search Bar */} {/* Action Buttons */} setIsMobileSearchOpen(false)} searchPlaceholder={t("common.search")} locale={locale} /> setIsLoginOpen(false)} /> { setIsLoginOpen(true); }} /> > ); }