UNPKG

@hicaru/bearby-react

Version:

<div align="center"> <h1> bearby react web3 wrapper </h1> <strong> Allows react to interact with the bearby wallet. </strong> </div> <hr/>

73 lines (67 loc) 2.31 kB
import React from 'react'; import { web3 } from '@hicaru/bearby.js'; const BearbyContext = React.createContext({ connected: false, enabled: false, massa: web3.massa, wallet: web3.wallet, contract: web3.contract }); function BearbyProvider(props) { const [base58, setBase58] = React.useState(); const [net, setNet] = React.useState(); const [enabled, setEnabled] = React.useState(false); const [connected, setConnected] = React.useState(false); const [period, setPeriod] = React.useState(); const handleUpdate = React.useCallback(() => { setBase58(web3.wallet.account.base58); setNet(web3.wallet.network.net); setEnabled(web3.wallet.enabled); setConnected(web3.wallet.connected); setPeriod(web3.wallet.blockchain.period); }, []); React.useEffect(() => { if (!globalThis.window) return; handleUpdate(); const accountObserver = web3.wallet.account.subscribe((base58) => { setBase58(base58); setEnabled(web3.wallet.enabled); setConnected(web3.wallet.connected); }); const networkObserver = web3.wallet.network.subscribe((net) => { setNet(net); setEnabled(web3.wallet.enabled); setConnected(web3.wallet.connected); }); const periodObserver = web3.wallet.blockchain.subscribe((block) => { setPeriod(block); }); return () => { networkObserver.unsubscribe(); accountObserver.unsubscribe(); periodObserver.unsubscribe(); }; }, []); const state = React.useMemo(() => ({ base58, enabled, connected, net, period, massa: web3.massa, contract: web3.contract, wallet: web3.wallet, }), [base58, net, enabled, connected, period]); return React.createElement(BearbyContext.Provider, { value: state, ...props }); } const USE_BEARBY_PROVIDER = '`useBearby` should be used within a `BearbyProvider`'; function useBearby() { const context = React.useContext(BearbyContext); if (!context) { throw new Error(USE_BEARBY_PROVIDER); } return context; } export { BearbyProvider, useBearby }; //# sourceMappingURL=index.js.map