"use client"; import { useRouter } from "next/navigation"; import { useMemo } from "react"; import type React from "react"; import Link from "next/link"; import { User, Truck, Heart, Store, LogOut } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { useCart, useFavorites, useOrders, useCartCount } from "@/lib/hooks"; import { Skeleton } from "@/components/ui/skeleton"; import { useTranslations } from "next-intl"; import { useLogout } from "@/lib/hooks/useAuth"; import { CartIcon, FavoriteIcon, OrderIcon, ProfileIcon, } from "@/components/icons"; interface ActionButtonsProps { isAuthenticated: boolean; onAuthClick: () => void; isLoading?: boolean; locale?: string; } interface ActionButtonData { icon: React.ReactNode; label: string; href?: string; onClick?: () => void; badgeCount?: number; isLoading?: boolean; } export default function ActionButtons({ isAuthenticated, onAuthClick, isLoading: authLoading, locale = "ru", }: ActionButtonsProps) { const t = useTranslations(); const { mutate: logout, isPending: isLoggingOut } = useLogout(); const router = useRouter(); const { data: cartData, isLoading: cartLoading } = useCart(); const { data: favoritesData, isLoading: favoritesLoading } = useFavorites(); const { data: ordersData, isLoading: ordersLoading } = useOrders(); // Calculate cart count from cart items array const cartCount = useCartCount() // Calculate favorites count const favoritesCount = useMemo(() => { if (!favoritesData) return 0; return Array.isArray(favoritesData) ? favoritesData.length : 0; }, [favoritesData]); // Calculate orders count const ordersCount = useMemo(() => { if (!ordersData) return 0; return Array.isArray(ordersData) ? ordersData.length : 0; }, [ordersData]); const handleLogout = () => { logout(); }; const buttons: ActionButtonData[] = useMemo( () => [ { icon: , label: t("common.openStore"), href: "/openStore", }, { icon: , label: t("common.orders"), href: "/orders", badgeCount: ordersCount, isLoading: ordersLoading, }, { icon: , label: t("common.favorites"), href: "/favorites", badgeCount: favoritesCount, isLoading: favoritesLoading, }, { icon: , label: t("common.cart"), href: "/cart", badgeCount: cartCount, isLoading: cartLoading, }, ], [ ordersCount, ordersLoading, favoritesCount, favoritesLoading, cartCount, cartLoading, t, ] ); return (
{/* Profile/Login Button with Dropdown */} {authLoading ? (
) : isAuthenticated ? ( router.push(`/${locale}/me`)}> {t("profile")} {isLoggingOut ? t("logging_out") : t("common.logout")} ) : ( )} {/* Other Action Buttons */} {buttons.map((button, index) => ( ))}
); } function ActionButton({ icon, label, href, onClick, badgeCount, isLoading, }: ActionButtonData) { const buttonContent = ( ); if (href) { return {buttonContent}; } return buttonContent; }