'use client'; import { useState, useCallback } from 'react'; import Link from 'next/link'; import { Heart, Star, Download, Shield, CheckCircle, ArrowRight, ArrowLeft, } from 'lucide-react'; import { FavoriteButton } from './FavoriteButton'; interface Skill { id: string; name: string; description: string | null; githubOwner: string; githubStars: number | null; downloadCount: number | null; securityStatus: string | null; isVerified: boolean | null; compatibility: { platforms?: string[] } | null; } interface FavoriteItem { skill: Skill; } interface FavoritesListProps { initialFavorites: FavoriteItem[]; locale: string; translations: { verified: string; emptyTitle: string; emptyDescription: string; emptyCta: string; }; } export function FavoritesList({ initialFavorites, locale, translations }: FavoritesListProps) { const [favorites, setFavorites] = useState(initialFavorites); const isRTL = locale === 'fa'; const ArrowIcon = isRTL ? ArrowLeft : ArrowRight; const formatNumber = (num: number | null): string => { if (num === null) return '0'; if (num >= 1000) { return (num / 1000).toFixed(1) + 'k'; } return num.toString(); }; const handleToggleFavorite = useCallback((skillId: string, isFavorited: boolean) => { if (!isFavorited) { // Remove from list when unfavorited setFavorites(prev => prev.filter(item => item.skill.id !== skillId)); } }, []); if (favorites.length === 0) { return (

{translations.emptyTitle}

{translations.emptyDescription}

{translations.emptyCta}
); } return (
{favorites.map(({ skill }) => (
{/* Favorite button in corner */}
handleToggleFavorite(skill.id, isFavorited)} />
{skill.name.charAt(0).toUpperCase()}

{skill.name}

@{skill.githubOwner}

{skill.description ?? ''}

{/* Stats */}
{formatNumber(skill.githubStars)} {formatNumber(skill.downloadCount)} {skill.securityStatus === 'pass' ? '✓' : skill.securityStatus === 'warning' ? '⚠' : '-'} {skill.isVerified && ( {translations.verified} )}
{/* Platforms */} {skill.compatibility?.platforms && skill.compatibility.platforms.length > 0 && (
{skill.compatibility.platforms.map((platform) => ( {platform} ))}
)}
))}
); }