/** * FavoriteButton - Reusable favorite toggle button * Heart icon that fills when favorited, with animation */ 'use client'; import { memo, useCallback, useState, useEffect } from 'react'; import { useFavorites } from '@/lib/store/favorites-store'; import { Icons } from '@/components/ui/Icon'; interface FavoriteButtonProps { videoId: string | number; source: string; title: string; poster?: string; sourceName?: string; type?: string; year?: string; remarks?: string; className?: string; size?: number; showTooltip?: boolean; isPremium?: boolean; } export const FavoriteButton = memo(({ videoId, source, title, poster, sourceName, type, year, remarks, className = '', size = 20, showTooltip = true, isPremium = false, }) => { const { isFavorite, toggleFavorite } = useFavorites(isPremium); const [isAnimating, setIsAnimating] = useState(false); const [isFav, setIsFav] = useState(false); // Sync with store on mount and when dependencies change useEffect(() => { setIsFav(isFavorite(videoId, source)); }, [videoId, source, isFavorite]); const handleClick = useCallback((e: React.MouseEvent) => { e.preventDefault(); e.stopPropagation(); setIsAnimating(true); const newState = toggleFavorite({ videoId, source, title, poster, sourceName, type, year, remarks, }); setIsFav(newState); setTimeout(() => setIsAnimating(false), 300); }, [videoId, source, title, poster, sourceName, type, year, remarks, toggleFavorite]); return ( ); }); FavoriteButton.displayName = 'FavoriteButton';