edit referrals page, add referrals fetch functions

This commit is contained in:
smanylov
2026-02-07 14:31:04 +07:00
parent 7572c1ada2
commit 0ec7834cc5
11 changed files with 273 additions and 70 deletions
@@ -1,18 +1,71 @@
'use client'
import { fetchReferralUserStats } from '@/app/actions/referralsActions';
import { useQuery } from '@tanstack/react-query';
import { useTranslations } from 'next-intl';
import { useEffect, useRef, useState } from 'react';
import { toast } from 'sonner';
export default function ReferralLinkSection() {
const {
data: referralUserStats,
isLoading,
isError,
error
} = useQuery({
queryKey: ['referralUserStats'],
queryFn: () => {
return fetchReferralUserStats();
},
select: (data) => {
return data;
}
});
const t = useTranslations('Global')
const [referralUrl, setReferralUrl] = useState<string>('');
const refLink = useRef<HTMLElement>(null);
useEffect(() => {
if (typeof window !== 'undefined') {
setReferralUrl(`${window.location.origin}/register?ref=${referralUserStats?.referralLink}`);
}
}, [referralUserStats]);
const copyHandler = () => {
if (refLink.current?.textContent) {
navigator.clipboard.writeText(refLink.current?.textContent);
toast.success(`${t('copied')}: ${refLink.current?.textContent}`)
}
};
if (!referralUserStats?.referralLink) {
return null;
}
return (
<div className="referral-link-section">
<h3>🔗 Ваша реферальная ссылка</h3>
<h3>Ваша реферальная ссылка</h3>
<p>Поделитесь этой ссылкой с друзьями и получайте комиссию с каждой их покупки</p>
<div className="referral-link-input">
<span id="referral-link" >
https://dashboard.no-copy.ru/register.php?ref=REFA0406AC8
<span
id="referral-link"
ref={refLink}
>
{referralUrl}
</span >
<button className="copy-btn">📋 Копировать</button>
<button
className="copy-btn"
onClick={copyHandler}
>
Копировать
</button>
</div>
<p className="referral-link-footer">
Код: <strong>REFA0406AC8</strong>
Кликов: <strong>21</strong>
Комиссия: <strong>15%</strong>
Код: <strong>{referralUserStats?.referralLink}</strong>
Приглашений: <strong>
{referralUserStats?.totalInvitee}
</strong>
</p>
</div>
)