import React, { useState, useEffect } from 'react'; import { useSoulStream } from '../contexts/SoulStreamContext'; import type { RewardsComponentProps, RewardsData } from '../types'; /** * RewardsComponent displays reward information from the SoulStream protocol */ const RewardsComponent: React.FC = ({ walletAddress, showClaimed = true, showUnclaimed = true }) => { const [rewardsData, setRewardsData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const { getRewards, claimReward } = useSoulStream(); useEffect(() => { const fetchRewards = async () => { if (!walletAddress) return; try { setLoading(true); const data = await getRewards(walletAddress); setRewardsData(data); setError(null); } catch (err) { console.error('Failed to fetch rewards data:', err); setError('Failed to load rewards data'); } finally { setLoading(false); } }; fetchRewards(); }, [walletAddress, getRewards]); const handleClaimReward = async (rewardId: string) => { try { await claimReward(walletAddress, rewardId); // Refresh rewards data after claiming const updatedData = await getRewards(walletAddress); setRewardsData(updatedData); } catch (err) { console.error('Failed to claim reward:', err); setError('Failed to claim reward'); } }; if (loading) return
Loading rewards data...
; if (error) return
Error: {error}
; if (!rewardsData) return
No rewards data available
; return (

Rewards

{showUnclaimed && rewardsData.unclaimed.length > 0 && (

Unclaimed Rewards

    {rewardsData.unclaimed.map(reward => (
  • {reward.name} - {reward.amount}
  • ))}
)} {showClaimed && rewardsData.claimed.length > 0 && (

Claimed Rewards

    {rewardsData.claimed.map(reward => (
  • {reward.name} - {reward.amount}
    Claimed on: {new Date(reward.claimedAt).toLocaleDateString()}
  • ))}
)} {rewardsData.claimed.length === 0 && rewardsData.unclaimed.length === 0 && (
No rewards available
)}
); }; export default RewardsComponent;