"use client"; import { useRouter } from "next/navigation"; import { useMemo } from "react"; import type React from "react"; import Link from "next/link"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; 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 } 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(); const cartCount = useCartCount(); const favoritesCount = useMemo(() => { if (!favoritesData) return 0; return Array.isArray(favoritesData) ? favoritesData.length : 0; }, [favoritesData]); const ordersCount = useMemo(() => { if (!ordersData) return 0; return Array.isArray(ordersData) ? ordersData.length : 0; }, [ordersData]); const handleLogout = () => { logout(undefined, { onSuccess: () => { router.push(`/${locale}`); router.refresh(); }, }); }; const buttons: ActionButtonData[] = useMemo( () => [ { 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 (
{buttons.map((button, index) => ( ))}
); } function ActionButton({ icon, label, href, onClick, badgeCount, isLoading, }: ActionButtonData) { const buttonContent = ( ); if (href) { return {buttonContent}; } return buttonContent; }