@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
JavaScript
;
/* 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;