"use client"; import { ChevronRight, Folder as Fd, Heart, } from "lucide-react"; import { useEffect, 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 { actionGetUserFavorites, actionToggleFavorite } from "@/modules/folder/folder-action"; type UserFavorite = { id: number; folderId: number; folderName: string; folderCreatedAt: Date; folderTotalPairs: number; folderOwnerId: string; folderOwnerName: string | null; folderOwnerUsername: string | null; favoritedAt: Date; }; interface FavoriteCardProps { favorite: UserFavorite; onRemoveFavorite: (folderId: 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 actionToggleFavorite(favorite.folderId); if (result.success) { onRemoveFavorite(favorite.folderId); } else { toast.error(result.message); } setIsRemoving(false); }; return (
{ router.push(`/explore/${favorite.folderId}`); }} >

{favorite.folderName}

{t("folderInfo", { userName: favorite.folderOwnerName ?? favorite.folderOwnerUsername ?? t("unknownUser"), totalPairs: favorite.folderTotalPairs, })}

); }; interface FavoritesClientProps { userId: string; } export function FavoritesClient({ userId }: FavoritesClientProps) { const t = useTranslations("favorites"); const [favorites, setFavorites] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { loadFavorites(); }, [userId]); const loadFavorites = async () => { setLoading(true); const result = await actionGetUserFavorites(); if (result.success && result.data) { setFavorites(result.data); } setLoading(false); }; const handleRemoveFavorite = (folderId: number) => { setFavorites((prev) => prev.filter((f) => f.folderId !== folderId)); }; return ( {loading ? (

{t("loading")}

) : favorites.length === 0 ? (

{t("noFavorites")}

) : ( favorites.map((favorite) => ( )) )}
); }