'use client'; import { useState, useEffect, useRef } from 'react'; import { useAuth } from '@/contexts/AuthContext'; import { referralApi } from '@/lib/api/referral'; import ReferralList from '@/components/admin/referral/ReferralList'; import { ReferralRewardUser } from '@/types/referral'; import { ArrowPathIcon } from '@heroicons/react/24/outline'; export default function ReferralRewardsPage() { const { token } = useAuth(); const [users, setUsers] = useState([]); const [subscriptionTarget, setSubscriptionTarget] = useState(0); const [isLoading, setIsLoading] = useState(false); const [fulfillingId, setFulfillingId] = useState(null); const [error, setError] = useState(null); const [success, setSuccess] = useState(null); const initialLoadRef = useRef(false); useEffect(() => { if (token && !initialLoadRef.current) { initialLoadRef.current = true; loadRewards(); } }, [token]); const loadRewards = async () => { setIsLoading(true); setError(null); try { const data = await referralApi.getPendingRewards(token!); setUsers(data.data || []); setSubscriptionTarget(data.subscription_target || 0); } catch (err) { setError(err instanceof Error ? err.message : 'خطا در دریافت لیست پاداش‌های معرفی'); } finally { setIsLoading(false); } }; const handleFulfill = async (user: ReferralRewardUser) => { if (!confirm(`آیا از اعطای یک ماه اشتراک رایگان به «${user.name || user.mobile || user.email}» اطمینان دارید؟`)) { return; } setFulfillingId(user.id); setIsLoading(true); setError(null); setSuccess(null); try { await referralApi.fulfillReward(user.id, token!); setSuccess(`اشتراک رایگان با موفقیت به «${user.name || user.mobile || user.email}» اعطا شد`); // Remove the fulfilled user from the list and refresh setUsers((prev) => prev.filter((u) => u.id !== user.id)); } catch (err) { setError(err instanceof Error ? err.message : 'خطا در اعطای اشتراک رایگان'); } finally { setFulfillingId(null); setIsLoading(false); } }; return (

پاداش‌های معرفی

کاربرانی که به حد نصاب دعوت موفق رسیده‌اند و هنوز اشتراک رایگان دریافت نکرده‌اند.

{/* Messages */} {error && (

{error}

)} {success && (

{success}

)} {isLoading && users.length === 0 ? (

در حال بارگذاری...

) : ( )}
); }