UNPKG

@hyperlane-xyz/widgets

Version:

Common react components for Hyperlane projects

56 lines 2.01 kB
import { useConnection, useWallet } from '@solana/wallet-adapter-react'; import { useWalletModal } from '@solana/wallet-adapter-react-ui'; import { useCallback, useMemo } from 'react'; import { ProtocolType } from '@hyperlane-xyz/utils'; import { widgetLogger } from '../logger.js'; import { findChainByRpcUrl } from './utils.js'; const logger = widgetLogger.child({ module: 'walletIntegrations/solanaWallet', }); export function useSolanaAccount(_multiProvider) { const { publicKey, connected, wallet } = useWallet(); const isReady = !!(publicKey && wallet && connected); const address = publicKey?.toBase58(); return useMemo(() => ({ protocol: ProtocolType.Sealevel, addresses: address ? [{ address }] : [], isReady, }), [address, isReady]); } export function useSolanaWalletDetails() { const { wallet } = useWallet(); const { name, icon } = wallet?.adapter || {}; return useMemo(() => ({ name, logoUrl: icon, }), [name, icon]); } export function useSolanaConnectFn() { const { setVisible } = useWalletModal(); return useCallback(() => setVisible(true), [setVisible]); } export function useSolanaDisconnectFn() { const { disconnect } = useWallet(); return disconnect; } export function useSolanaActiveChain(multiProvider) { const { connection } = useConnection(); const connectionEndpoint = connection?.rpcEndpoint; return useMemo(() => { try { const hostname = new URL(connectionEndpoint).hostname; const metadata = findChainByRpcUrl(multiProvider, hostname); if (!metadata) return {}; return { chainDisplayName: metadata.displayName, chainName: metadata.name, }; } catch (error) { logger.warn('Error finding sol active chain', error); return {}; } }, [connectionEndpoint, multiProvider]); } //# sourceMappingURL=solanaWallet.js.map