// ...existing code... import React, { useState } from "react"; import { useSyncProviders } from "./useSyncProviders"; import useAuth from "~/hooks/useAuth"; import type { EIP6963ProviderDetail } from "./EthereumProviderTypes"; import { Box, Grid, Card, CardContent, Avatar, Typography, Button, Stack, CircularProgress, Alert, } from "@mui/material"; const shortAddress = (addr: string) => addr.length > 12 ? `${addr.slice(0, 6)}...${addr.slice(-6)}` : addr; export const DiscoverWalletProviders: React.FC = () => { const providers = useSyncProviders(); const { auth, setAuth } = useAuth(); const [loadingUuid, setLoadingUuid] = useState(null); const [error, setError] = useState(null); const handleConnect = async (providerWithInfo: EIP6963ProviderDetail) => { setError(null); setLoadingUuid(providerWithInfo.info.uuid); try { const accounts = await providerWithInfo.provider.request({ method: "eth_requestAccounts", }); if (Array.isArray(accounts) && accounts.length > 0 && typeof accounts[0] === "string") { setAuth({ providerWithInfo, accounts }); } else { setError("No accounts returned from wallet."); } } catch (err: any) { console.error(err); setError(err?.message ?? String(err)); } finally { setLoadingUuid(null); } }; return ( Wallets Detected {error && ( {error} )} {providers.length === 0 ? ( There are no announced providers. ) : ( {providers.map((p) => ( {p.info.name} ))} )} {auth?.accounts?.length > 0 ? "Wallet Selected" : "No Wallet Selected"} {auth?.accounts?.length > 0 && auth.providerWithInfo && ( {auth.providerWithInfo.info.name} {shortAddress(auth.accounts[0])} )} ); }; export default DiscoverWalletProviders; // ...existing code...