"use client"; import React, { useEffect, useState } from 'react'; import axios from 'axios'; import Header from '@/components/Header'; import Footer from '@/components/Footer'; import UserDetailModal from '@/components/UserDetailsModal'; import { motion } from 'framer-motion'; import CustomHeader from '@/components/CustomHeader'; import { FaArrowDown, FaArrowUp, FaShare } from 'react-icons/fa'; import { FaArrowLeft } from 'react-icons/fa6'; import { NextSeo } from 'next-seo'; import CalloutCard from '@/components/CalloutCard'; import { PrivyProvider, usePrivy } from '@privy-io/react-auth'; import ShareModal from '@/components/ShareModal'; import Link from 'next/link'; function UserPage({ params }: { params: { id: string } }) { const { login, user, ready, logout, linkTwitter, unlinkTwitter, linkWallet, unlinkWallet } = usePrivy(); const [activeSelected, setActiveSelected] = useState(true); const [expandedInfo, setExpandedInfo] = useState(false); const [selectedPeriod, setSelectedPeriod] = useState("all time"); const [userData, setUserData] = useState(null); const [callouts, setCallouts] = useState([]); const [history, setHistory] = useState([]); const [loginAlert, setLoginAlert] = useState(null); const [dexUrls, setDexUrls] = useState<{ [key: string]: string }>({}); const [isShareModalOpen, setIsShareModalOpen] = useState(false); const [isFollowing, setIsFollowing] = useState(false); const [isFetchingFollowStatus, setIsFetchingFollowStatus] = useState(true); const id = params.id; const currentUser = "%40" + user?.twitter?.username ?? "null"; // Change this to the current user dynamically useEffect(() => { Refresh(); }, [id]); useEffect(() => { const fetchCallouts = async () => { let apiUrl = `https://api.callfi.io/get_user_callouts.php?tag=${id}`; if (selectedPeriod === "month") { apiUrl = `https://api.callfi.io/get_user_callouts_monthly.php?tag=${id}`; } else if (selectedPeriod === "week") { apiUrl = `https://api.callfi.io/get_user_callouts_weekly.php?tag=${id}`; } try { const response = await fetch(apiUrl); const data = await response.json(); setCallouts(data); // Fetch Dexscreener URLs for each callout const urls: { [key: string]: string } = {}; await Promise.all(data.map(async (detail: any) => { try { const response = await axios.get(`https://api.dexscreener.com/latest/dex/tokens/${detail.ca}`); if (response.data && response.data.pairs && response.data.pairs.length > 0) { urls[detail.ca] = response.data.pairs[0].url; } } catch (error) { console.error(`Error fetching Dexscreener URL for ${detail.ca}:`, error); } })); setDexUrls(urls); } catch (error) { console.error('Error fetching callouts:', error); } }; fetchCallouts(); }, [id, selectedPeriod]); useEffect(() => { const fetchHistory = async () => { let apiUrl = `https://api.callfi.io/get_callouts_history.php?username=${id}&period=all time`; if (selectedPeriod === "month") { apiUrl = `https://api.callfi.io/get_callouts_history.php?username=${id}&period=month`; } else if (selectedPeriod === "week") { apiUrl = `https://api.callfi.io/get_callouts_history.php?username=${id}&period=week`; } try { const response = await fetch(apiUrl); const data = await response.json(); setHistory(data); } catch (error) { console.error('Error fetching history:', error); } }; fetchHistory(); }, [id, selectedPeriod]); useEffect(() => { Refresh(); }, [currentUser, id]); function Refresh() { const fetchFollowStatus = async () => { try { const response = await fetch(`https://api.callfi.io/get_is_following.php?username=${currentUser}&target=${id}`); const data = await response.json(); setIsFollowing(data == "1"); } catch (error) { console.error('Error fetching follow status:', error); } finally { setIsFetchingFollowStatus(false); } }; fetchFollowStatus(); const fetchUserData = async () => { try { const response = await fetch(`https://api.callfi.io/get_user_data.php?username=${id}`); const data = await response.json(); setUserData(data); } catch (error) { console.error('Error fetching user data:', error); } }; fetchUserData(); } const handleFollowClick = async () => { if (!ready || !user) { setLoginAlert("You need to be logged in to follow."); setTimeout(() => setLoginAlert(null), 3000); } else { try { const response = await fetch(`https://api.callfi.io/${isFollowing ? "unfollow" : "follow"}_user.php?username=${currentUser}&target=${id}`); const data = await response.json(); Refresh(); } catch (error) { console.error('Error following user:', error); } } }; if (!userData) { return
Loading...
; } const truncateAddress = (address: string) => { return `${address.slice(0, 6)}...${address.slice(-5)}`; }; const handleShareClick = () => { setIsShareModalOpen(true); }; return ( <>

CallFi Profile

{userData.tag}

{userData.gains.toFixed(2)}x Gains

{(userData.points * 100).toFixed(2)} Points

{userData.followerCount} Followers

{userData.calloutCount} Callouts

{parseFloat(userData.accuracy).toFixed(1)}% Accuracy

{userData.daysSinceJoined} Days

{expandedInfo ? ( ) : ( )}
{loginAlert &&

{loginAlert}

}

{userData.tag}

{userData.gains.toFixed(2)}x Gains

{(userData.points * 100).toFixed(2)} Points

{userData.followerCount} Followers

{userData.calloutCount} Callouts

{parseFloat(userData.accuracy).toFixed(1)}% Accuracy

{userData.daysSinceJoined} Days

{callouts ? callouts.map((callout) => ( )) : "Empty"}
{history ? history.map((entry) => ( )) : "Empty"}
setIsShareModalOpen(false)} shareLink={window.location.href} // Pass the current URL to the ShareModal /> ); } export default function WrappedUserPage(props) { return ( ); }