"use client"; import { ChevronRight, Layers as DeckIcon, Heart, } from "lucide-react"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { useTranslations } from "next-intl"; import { toast } from "sonner"; import { PageLayout } from "@/components/ui/PageLayout"; import { PageHeader } from "@/components/ui/PageHeader"; import { CardList } from "@/components/ui/CardList"; import { VStack } from "@/design-system/layout/stack"; import { Skeleton } from "@/design-system/feedback/skeleton"; import { actionGetUserFavoriteDecks, actionToggleDeckFavorite } from "@/modules/deck/deck-action"; import type { ActionOutputUserFavoriteDeck } from "@/modules/deck/deck-action-dto"; interface FavoriteCardProps { favorite: ActionOutputUserFavoriteDeck; onRemoveFavorite: (deckId: number) => void; } const FavoriteCard = ({ favorite, onRemoveFavorite }: FavoriteCardProps) => { const router = useRouter(); const t = useTranslations("favorites"); const [isRemoving, setIsRemoving] = useState(false); const handleRemoveFavorite = async (e: React.MouseEvent) => { e.stopPropagation(); if (isRemoving) return; setIsRemoving(true); const result = await actionToggleDeckFavorite({ deckId: favorite.id }); if (result.success) { onRemoveFavorite(favorite.id); } else { toast.error(result.message); } setIsRemoving(false); }; return (
{t("folderInfo", { userName: favorite.userName ?? favorite.userUsername ?? t("unknownUser"), totalPairs: favorite.cardCount ?? 0, })}
{t("loading")}
{t("noFavorites")}