@knine-sdk/react
Version:
React helpers for Knine Finance projects. Part of Knine JS SDK
64 lines (57 loc) • 2.79 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var invariant = require('tiny-invariant');
var warning = require('tiny-warning');
var react = require('react');
var contracts = require('@knine-sdk/contracts');
var useContractSWR = require('./useContractSWR.js');
var useSDK = require('./useSDK.js');
var useDebounceCallback = require('./useDebounceCallback.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var invariant__default = /*#__PURE__*/_interopDefaultLegacy(invariant);
var warning__default = /*#__PURE__*/_interopDefaultLegacy(warning);
const useAllowance = (token, spender, owner, config, providerRpc, web3Provider) => {
const { providerRpc: sdkProviderRpc, providerWeb3: sdkProviderWeb3, account, } = useSDK.useSDK();
const mergedOwner = owner !== null && owner !== void 0 ? owner : account;
const chosenRpcProvider = providerRpc !== null && providerRpc !== void 0 ? providerRpc : sdkProviderRpc;
const chosenWeb3Provider = web3Provider !== null && web3Provider !== void 0 ? web3Provider : sdkProviderWeb3;
invariant__default["default"](token != null, 'Token is required');
invariant__default["default"](spender != null, 'Spender is required');
const contractRpc = contracts.getERC20Contract(token, chosenRpcProvider);
const contractWeb3 = chosenWeb3Provider
? contracts.getERC20Contract(token, chosenWeb3Provider)
: null;
const result = useContractSWR.useContractSWR({
shouldFetch: !!mergedOwner,
contract: contractRpc,
method: 'allowance',
params: [mergedOwner, spender],
config,
});
const updateAllowanceDebounced = useDebounceCallback.useDebounceCallback(result.update, 1000);
react.useEffect(() => {
if (!mergedOwner || !chosenWeb3Provider || !contractWeb3)
return;
try {
const transfer = contractWeb3.filters.Transfer(mergedOwner, spender);
const approve = contractWeb3.filters.Approval(mergedOwner, spender);
chosenWeb3Provider.on(transfer, updateAllowanceDebounced);
chosenWeb3Provider.on(approve, updateAllowanceDebounced);
return () => {
chosenWeb3Provider.off(transfer, updateAllowanceDebounced);
chosenWeb3Provider.off(approve, updateAllowanceDebounced);
};
}
catch (error) {
return warning__default["default"](false, 'Cannot subscribe to event');
}
}, [
contractWeb3,
mergedOwner,
chosenWeb3Provider,
updateAllowanceDebounced,
spender,
]);
return result;
};
exports.useAllowance = useAllowance;