UNPKG

@knine-sdk/react

Version:

React helpers for Knine Finance projects. Part of Knine JS SDK

64 lines (57 loc) 2.79 kB
'use strict'; 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;