UNPKG

@hashlike-official/extend-web3-react-wrapper

Version:

web3-react wrapper - it offers a common interface for different wallet providers

78 lines (77 loc) 3.53 kB
"use strict"; /* eslint-disable @typescript-eslint/no-explicit-any, */ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.useInitWallet = exports.useTransfer = exports.useProvider = void 0; const react_1 = require("react"); const MetamaskLibrary_1 = require("./library/MetamaskLibrary"); const KaikasLibrary_1 = require("./library/KaikasLibrary"); const store_1 = require("./store"); const connector_1 = require("./connector"); function useProvider() { const currentType = (0, store_1.useWeb3Store)((state) => state.currentType); const metamaskOriginProvider = connector_1.metamaskHooks.useProvider(); // eslint-disable-next-line const kaikasOriginProvider = connector_1.kaikasConnector.customProvider; return (0, react_1.useMemo)(() => { switch (currentType) { case 'MetaMask': if (metamaskOriginProvider) { return new MetamaskLibrary_1.MetamaskLibrary(metamaskOriginProvider); } break; case 'Kaikas': return new KaikasLibrary_1.KaikasLibrary(kaikasOriginProvider); } }, [currentType, metamaskOriginProvider, kaikasOriginProvider]); } exports.useProvider = useProvider; function useTransfer() { const provider = useProvider(); const fetchBalance = (0, store_1.useWeb3Store)((state) => state.fetchBalance); return (0, react_1.useCallback)((from, to, sendAmount) => __awaiter(this, void 0, void 0, function* () { store_1.useWeb3Store.setState((state) => ({ pending: state.pending + 1 })); yield (provider === null || provider === void 0 ? void 0 : provider.transfer(from, to, sendAmount)); store_1.useWeb3Store.setState((state) => ({ pending: state.pending - 1 })); if (provider) { void fetchBalance(provider); } }), [provider, fetchBalance]); } exports.useTransfer = useTransfer; function useInitWallet() { const connect = (0, store_1.useWeb3Store)((state) => state.connect); const fetchBalance = (0, store_1.useWeb3Store)((state) => state.fetchBalance); const { useAccount } = (0, store_1.useWeb3Store)((state) => state.hooks); const provider = useProvider(); const account = useAccount(); (0, react_1.useEffect)(() => { if (account) { store_1.useWeb3Store.setState({ account }); } }, [account]); (0, react_1.useEffect)(() => { if (provider && account && account.length > 0) { void fetchBalance(provider); } }, [provider, fetchBalance, account]); return (chainId) => { if (!window) return; const walletType = window.localStorage.getItem('walletType'); if (walletType) { void connect(walletType, chainId); } }; } exports.useInitWallet = useInitWallet;