// WalletScreen.tsx
import React from "react";
import { View, Button, Text, Alert } from "react-native";
import { useConnect, useAccounts, useSolana, useEthereum, useDisconnect } from "@phantom/react-native-sdk";
export function WalletScreen() {
const { connect, isConnecting, error: connectError } = useConnect();
const { addresses, isConnected } = useAccounts();
const { solana } = useSolana();
const { ethereum } = useEthereum();
const { disconnect } = useDisconnect();
const handleConnect = async () => {
try {
await connect({ provider: "google" });
Alert.alert("Success", "Wallet connected!");
} catch (error) {
Alert.alert("Error", `Failed to connect: ${error.message}`);
}
};
const handleSignSolanaMessage = async () => {
try {
const signature = await solana.signMessage("Hello from Solana!");
Alert.alert("Solana Signed!", `Signature: ${signature.signature.slice(0, 10)}...`);
} catch (error) {
Alert.alert("Error", `Failed to sign: ${error.message}`);
}
};
const handleSignEthereumMessage = async () => {
try {
const accounts = await ethereum.getAccounts();
const signature = await ethereum.signPersonalMessage("Hello from Ethereum!", accounts[0]);
Alert.alert("Ethereum Signed!", `Signature: ${signature.signature.slice(0, 10)}...`);
} catch (error) {
Alert.alert("Error", `Failed to sign: ${error.message}`);
}
};
if (!isConnected) {
return (
<View style={{ padding: 20 }}>
<Button
title={isConnecting ? "Connecting..." : "Connect Wallet"}
onPress={handleConnect}
disabled={isConnecting}
/>
{connectError && <Text style={{ color: "red", marginTop: 10 }}>Error: {connectError.message}</Text>}
</View>
);
}
return (
<View style={{ padding: 20 }}>
<Text style={{ fontSize: 18, marginBottom: 10 }}>Wallet Connected</Text>
{addresses.map((addr, index) => (
<Text key={index}>
{addr.addressType}: {addr.address}
</Text>
))}
<Button
title="Sign Solana Message"
onPress={handleSignSolanaMessage}
style={{ marginTop: 10 }}
/>
<Button
title="Sign Ethereum Message"
onPress={handleSignEthereumMessage}
style={{ marginTop: 10 }}
/>
<Button title="Disconnect" onPress={disconnect} style={{ marginTop: 10 }} />
</View>
);
}