UNPKG

@coin-voyage/paykit

Version:

Seamless crypto payments. Onboard users from any chain, any coin into your app with one click.

94 lines 3.29 kB
import { useEffect, useState } from "react"; import { useAccount } from "wagmi"; import { useConnect } from "./useConnect"; import usePayContext from "../components/contexts/pay"; import { useWalletConnectConnector } from "./useConnectors"; export function useWalletConnectUri({ enabled } = { enabled: true, }) { const { log } = usePayContext(); const [uri, setUri] = useState(undefined); const connector = useWalletConnectConnector(); const { isConnected } = useAccount(); const { connectAsync } = useConnect(); useEffect(() => { if (!enabled) { return; } async function handleMessage(message) { const { type, data } = message; log("WC Message", type, data); if (type === "display_uri") { setUri(data); } /* // This has the URI as well, but we're probably better off using the one in the display_uri event if (type === 'connecting') { const p = await connector.getProvider(); const uri = p.signer.uri; setConnectorUri(uri); } */ } async function handleDisconnect() { log("WC Disconnect"); if (connector) { connectWallet(connector); } } async function connectWallet(connector) { const result = await connectAsync({ connector }); if (result) { return result; } return false; } async function connectWalletConnect(connector) { try { await connectWallet(connector); } catch (error) { log("catch error"); log(error); if (error.code) { switch (error.code) { case 4001: log("error.code - User rejected"); connectWalletConnect(connector); // Regenerate QR code break; default: log("error.code - Unknown Error"); break; } } else { // Sometimes the error doesn't respond with a code log("WalletConnect cannot connect.", error); } } } if (isConnected) { setUri(undefined); } else { if (!connector || uri) { return; } if (connector && !isConnected) { connectWalletConnect(connector); log("add wc listeners"); connector.emitter.on("message", handleMessage); connector.emitter.on("disconnect", handleDisconnect); return () => { log("remove wc listeners"); connector.emitter.off("message", handleMessage); connector.emitter.off("disconnect", handleDisconnect); }; } } }, [enabled, connector, isConnected]); return { uri, }; } //# sourceMappingURL=useWalletConnectUri.js.map