@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
JavaScript
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