"use client" import { useState, useEffect } from "react" import Link from "next/link" import Image from "next/image" import { X, Menu, Search, Store, LogOut, User as UserIcon } from "lucide-react" import { Button } from "@/components/ui/button" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import Logo from "@/public/logo.png" 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 { useAuthStatus, useLogout } from "@/lib/hooks/useAuth" interface HeaderProps { locale?: string translations?: { catalog: string search: string orders: string favorites: string cart: string login: string profile: string openStore: string phone: string code: string send: string verify: string sending: string verifying: string enterPhone: string weWillSendCode: string invalidPhone: string invalidCode: string loginSuccess: string codeSent: string logout: string loggingOut: string } } const DEFAULT_TRANSLATIONS = { catalog: "Каталог", search: "Поиск продукта", orders: "Заказы", favorites: "Избранное", cart: "Корзина", login: "Войти", profile: "Профиль", openStore: "Открыть магазин", phone: "Номер телефона", code: "Код", send: "Отправить", verify: "Подтвердить", sending: "Отправка...", verifying: "Проверка...", enterPhone: "Введите свой номер телефона", weWillSendCode: "Мы вышлем вам код", invalidPhone: "Неверный номер телефона", invalidCode: "Неверный код", loginSuccess: "Вход выполнен успешно", codeSent: "Код отправлен на ваш номер", logout: "Выйти", loggingOut: "Выход...", } export default function Header({ locale = "ru", translations }: HeaderProps) { const [isClient, setIsClient] = useState(false) const [isCategoryOpen, setIsCategoryOpen] = useState(false) const [isMobileSearchOpen, setIsMobileSearchOpen] = useState(false) const [isLoginOpen, setIsLoginOpen] = useState(false) const t = { ...DEFAULT_TRANSLATIONS, ...translations } const { isAuthenticated, isLoading } = useAuthStatus() const { mutate: logout, isPending: isLoggingOut } = useLogout() useEffect(() => { setIsClient(true) }, []) const handleAuthClick = () => { if (isAuthenticated) { window.location.href = `/${locale}/me` } else { setIsLoginOpen(true) } } const handleLogout = () => { logout() } const toggleCategoryMenu = () => setIsCategoryOpen(!isCategoryOpen) const closeCategoryMenu = () => setIsCategoryOpen(false) if (!isClient) return null return ( <>
Logo
{isLoading ? (
) : isAuthenticated ? ( (window.location.href = `/${locale}/me`)}> {t.profile} {isLoggingOut ? t.loggingOut : t.logout} ) : ( )}
setIsMobileSearchOpen(false)} searchPlaceholder={t.search} /> setIsLoginOpen(false)} translations={{ enterPhone: t.enterPhone, weWillSendCode: t.weWillSendCode, phone: t.phone, code: t.code, send: t.send, verify: t.verify, sending: t.sending, verifying: t.verifying, invalidPhone: t.invalidPhone, invalidCode: t.invalidCode, loginSuccess: t.loginSuccess, codeSent: t.codeSent, }} /> ) }