"use client" import { useState } from "react" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { Wallet, Copy, ExternalLink, LogOut, Coins, AlertCircle } from "lucide-react" import { useWallet } from "@/providers/wallet-provider" import { NetworkSwitcher } from "./network-switcher" import { toast } from "@/hooks/use-toast" export function ConnectWalletButton() { const { connected, address, balance, chainId, isConnecting, error, connectWallet, disconnect, requestFLBTokens } = useWallet() const [requesting, setRequesting] = useState(false) const handleConnect = async () => { try { const success = await connectWallet() if (success) { toast({ title: "Wallet Connected", description: "Successfully connected to your Celo wallet", }) } } catch (error) { toast({ title: "Connection Failed", description: "Failed to connect wallet. Please try again.", variant: "destructive", }) } } const handleDisconnect = () => { disconnect() toast({ title: "Wallet Disconnected", description: "Your wallet has been disconnected", }) } const handleCopyAddress = () => { if (address) { navigator.clipboard.writeText(address) toast({ title: "Address Copied", description: "Wallet address copied to clipboard", }) } } const handleRequestTokens = async () => { setRequesting(true) try { await requestFLBTokens("100") toast({ title: "Tokens Requested", description: "FLB tokens have been requested. Please check your balance.", }) } catch (error: any) { toast({ title: "Request Failed", description: error.message || "Failed to request FLB tokens. Please contact the team.", variant: "destructive", }) } finally { setRequesting(false) } } const openBlockExplorer = () => { if (address) { const explorerUrl = chainId === 42220 ? `https://celoscan.io/address/${address}` : `https://alfajores.celoscan.io/address/${address}` window.open(explorerUrl, "_blank") } } const formatAddress = (addr: string) => { return `${addr.slice(0, 6)}...${addr.slice(-4)}` } const formatBalance = (bal: string) => { const num = Number.parseFloat(bal) return num > 0 ? num.toFixed(4) : "0" } const isCeloNetwork = chainId === 42220 || chainId === 44787 if (!connected) { return (
{error && (
{error}
)}
) } return (
Wallet Address
{address}
CELO Balance: {formatBalance(balance.celo)} CELO
FLB Balance: {formatBalance(balance.flb)} FLB
{isCeloNetwork && ( {requesting ? "Requesting..." : "Request Test FLB"} )} View on Explorer Disconnect
) }