import React, { useState, useEffect } from 'react'; import { Wallet, Chrome, ExternalLink, Copy, Check, LogOut, Award, Users, TrendingUp, Shield } from 'lucide-react'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { usePolkadot } from '@/contexts/PolkadotContext'; import { formatAddress } from '@/lib/wallet'; import { getAllScores, type UserScores } from '@/lib/scores'; interface WalletModalProps { isOpen: boolean; onClose: () => void; } export const WalletModal: React.FC = ({ isOpen, onClose }) => { const { accounts, selectedAccount, setSelectedAccount, connectWallet, disconnectWallet, api, isApiReady, error } = usePolkadot(); const [copied, setCopied] = useState(false); const [scores, setScores] = useState({ trustScore: 0, referralScore: 0, stakingScore: 0, tikiScore: 0, totalScore: 0 }); const [loadingScores, setLoadingScores] = useState(false); const handleCopyAddress = () => { if (selectedAccount?.address) { navigator.clipboard.writeText(selectedAccount.address); setCopied(true); setTimeout(() => setCopied(false), 2000); } }; const handleConnect = async () => { await connectWallet(); }; const handleSelectAccount = (account: typeof accounts[0]) => { setSelectedAccount(account); onClose(); }; const handleDisconnect = () => { disconnectWallet(); onClose(); }; // Fetch all scores from blockchain useEffect(() => { const fetchAllScores = async () => { if (!api || !isApiReady || !selectedAccount?.address) { setScores({ trustScore: 0, referralScore: 0, stakingScore: 0, tikiScore: 0, totalScore: 0 }); return; } setLoadingScores(true); try { const userScores = await getAllScores(api, selectedAccount.address); setScores(userScores); } catch (err) { console.error('Failed to fetch scores:', err); setScores({ trustScore: 0, referralScore: 0, stakingScore: 0, tikiScore: 0, totalScore: 0 }); } finally { setLoadingScores(false); } }; fetchAllScores(); }, [api, isApiReady, selectedAccount]); return ( {selectedAccount ? 'Wallet Connected' : 'Connect Wallet'} {selectedAccount ? 'Manage your Polkadot account' : 'Connect your Polkadot.js extension to interact with PezkuwiChain'} {/* No Extension Error */} {error && error.includes('extension') && (

Polkadot.js extension not detected. Please install it to continue.

After installing, refresh the page and try again

)} {/* Connected State */} {selectedAccount && !error && (
{/* Account Info */}
Account Name
{selectedAccount.meta.name || 'Unnamed Account'}
Address
{formatAddress(selectedAccount.address)}
Scores from Blockchain
{loadingScores ? (
Loading scores...
) : (
Trust
{scores.trustScore}
Referral
{scores.referralScore}
Staking
{scores.stakingScore}
Tiki
{scores.tikiScore}
)}
Total Score {loadingScores ? '...' : scores.totalScore}
Source
{selectedAccount.meta.source || 'polkadot-js'}
{/* Actions */}
{/* Switch Account */} {accounts.length > 1 && (
Switch Account
{accounts.map((account) => ( ))}
)}
)} {/* Not Connected State */} {!selectedAccount && !error && (
{accounts.length > 0 ? ( // Has accounts, show selection
Select an account to connect:
{accounts.map((account) => ( ))}
) : ( // No accounts, show connect button
Don't have Polkadot.js?{' '} Download here
)}
)}
); };