51 lines
1.7 KiB
TypeScript
51 lines
1.7 KiB
TypeScript
'use client';
|
|
|
|
import Friends from '@/components/friends/Friends';
|
|
import { useCallback, useEffect, useState } from 'react';
|
|
import { CalculateReferralsCount } from '@/utils/CalculateReferralsCount';
|
|
import { updateFriendAndReferralCounts } from '@/utils/UpdateFriendAndReferralCount';
|
|
import { usePlayerStore } from '@/store/player.state';
|
|
|
|
const FriendsContainer = ({ botLink }: { botLink: string }) => {
|
|
const [isVisible, setIsVisible] = useState<boolean>(false);
|
|
|
|
const [userData, setUserData] = useState<{ id: number; username: string } | null>(null);
|
|
|
|
const { player } = usePlayerStore();
|
|
|
|
useEffect(() => {
|
|
const initDataUnsafe = window.Telegram?.WebApp?.initDataUnsafe;
|
|
if (!initDataUnsafe?.user) {
|
|
return;
|
|
}
|
|
setUserData(initDataUnsafe.user);
|
|
}, []);
|
|
|
|
const handleCopyInviteLink = useCallback(async () => {
|
|
setIsVisible(true);
|
|
setTimeout(() => {
|
|
setIsVisible(false);
|
|
}, 3000);
|
|
return await navigator.clipboard.writeText(`${botLink}ref_${userData?.id}`);
|
|
}, [userData, botLink]);
|
|
|
|
const handleCloseToastLink = useCallback(() => {
|
|
setIsVisible(false);
|
|
}, []);
|
|
|
|
return (
|
|
<Friends
|
|
isVisible={isVisible}
|
|
referral_fee={player?.attributes.referral_fee}
|
|
friendsAndReferralsCount={updateFriendAndReferralCounts(
|
|
player?.attributes.my_referrals?.data?.length || 0,
|
|
CalculateReferralsCount(player),
|
|
)}
|
|
handleCopyInviteLink={handleCopyInviteLink}
|
|
handleCloseToastLink={handleCloseToastLink}
|
|
/>
|
|
);
|
|
};
|
|
|
|
export default FriendsContainer;
|