From 80cf25ff84a5230b457882915649c1cf368df1d2 Mon Sep 17 00:00:00 2001 From: Barry Gitarts Date: Thu, 19 Dec 2019 13:43:19 -0500 Subject: [PATCH] only display currencies with balances when funding --- package.json | 1 + src/components/base/CurrencySelect.jsx | 9 +-- src/dapp.js | 17 +++- yarn.lock | 106 +++++++++++++++++++++++++ 4 files changed, 126 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 341118b..2f4ad3e 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,7 @@ "@material-ui/core": "^4.3.3", "@material-ui/icons": "^3.0.1", "@material-ui/styles": "^4.3.3", + "@mycrypto/eth-scan": "^1.1.0", "@nozbe/watermelondb": "^0.9.0", "@nozbe/with-observables": "^1.0.2", "@rehooks/window-scroll-position": "^1.0.1", diff --git a/src/components/base/CurrencySelect.jsx b/src/components/base/CurrencySelect.jsx index 6c57693..50f7c85 100644 --- a/src/components/base/CurrencySelect.jsx +++ b/src/components/base/CurrencySelect.jsx @@ -22,14 +22,14 @@ CurrencySelect.propTypes = { publishing: PropTypes.bool } -const orderCurrencies = (currencies, publishing) => { +const orderCurrencies = (currencies, balances, publishing) => { if (publishing) { const temp = [...currencies] let weth = currencies.findIndex(e => e.label === 'WETH') temp[0] = temp[weth] return temp.filter(e => e !== undefined) } - return currencies + return balances ? currencies.filter(c => c.label === 'ETH' || (balances[c.value] && !balances[c.value].isZero())) : currencies } function CurrencySelect({ @@ -45,10 +45,9 @@ function CurrencySelect({ publishing }) { const context = useContext(FundingContext) - const { account } = context + const { account, currencies, balances: accountBalances } = context const [balances, setBalances] = useState({}) const [allowances, setAllowances] = useState({}) - const { currencies } = context const updateBalancesAllowances = () => { const latestBalances = {} @@ -99,7 +98,7 @@ function CurrencySelect({ onBlur={onBlur} value={value || ''} > - {!!currencies && orderCurrencies(currencies, publishing).map((option, idx) => ( + {!!currencies && orderCurrencies(currencies, accountBalances, publishing).map((option, idx) => (
{option.icon || { const kyberCurrencies = await getKyberCurrencies(network) this.currencies = [...currencies, ...kyberCurrencies].sort(currencyOrder) - this.getAndSetPrices() + await this.getAndSetPrices() + this.getAndSetBalances() } setGraphClient = network => { @@ -96,6 +99,7 @@ class App extends React.Component { const accounts = await EmbarkJS.enableEthereum(); const account = accounts[0] this.setState({ account }) + this.getAndSetBalances(account) this.web3Init() return account } catch (error) { @@ -109,6 +113,14 @@ class App extends React.Component { this.setState({ prices }) } + getAndSetBalances = async acc => { + const { account } = this.state + if (!acc && !account) return + const addresses = this.currencies.filter(c => c.label !== 'ETH').map(c => c.value) + const balances = await this.scanner.getTokensBalance(acc || account, addresses) + this.setState({ balances }) + } + openSnackBar = (variant, message) => { if (typeof message === 'object') { const msg = message.message @@ -159,12 +171,13 @@ class App extends React.Component { } render() { - const { account, needsInit, lpAllowance: _lpAllowance, loading, authorizedPayments, snackbar, prices } = this.state + const { account, balances, needsInit, lpAllowance: _lpAllowance, loading, authorizedPayments, snackbar, prices } = this.state const { appendFundProfile, appendPledges, transferPledgeAmounts, openSnackBar, closeSnackBar, currencies, syncWithRemote, updateUsdPrice, client, enableEthereum } = this const fundingContext = { appendPledges, appendFundProfile, account, + balances, currencies, enableEthereum, transferPledgeAmounts, diff --git a/yarn.lock b/yarn.lock index 1b56fe4..1559bb2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1225,6 +1225,103 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.4.tgz#622a72bebd1e3f48d921563b4b60a762295a81fc" integrity sha512-6PYY5DVdAY1ifaQW6XYTnOMihmBVT27elqSjEoodchsGjzYlEsTQMcEhSud99kVawatyTZRTiVkJ/c6lwbQ7nA== +"@ethersproject/abi@^5.0.0-beta.133": + version "5.0.0-beta.142" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.0-beta.142.tgz#cde0ced7daa2fbc98e35a2c31203331907e84a39" + integrity sha512-vJ2V9fPNzi+8iutY4sjy6mgogkJtiGsd9hmpa1bjnGW6qnHOEkAV1fzVpvT002LlnjFgqgtzuLBDZob6oU7i8w== + dependencies: + "@ethersproject/address" ">=5.0.0-beta.128" + "@ethersproject/bignumber" ">=5.0.0-beta.130" + "@ethersproject/bytes" ">=5.0.0-beta.129" + "@ethersproject/constants" ">=5.0.0-beta.128" + "@ethersproject/hash" ">=5.0.0-beta.128" + "@ethersproject/keccak256" ">=5.0.0-beta.127" + "@ethersproject/logger" ">=5.0.0-beta.129" + "@ethersproject/properties" ">=5.0.0-beta.131" + "@ethersproject/strings" ">=5.0.0-beta.130" + +"@ethersproject/address@>=5.0.0-beta.128": + version "5.0.0-beta.133" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.0-beta.133.tgz#b6bf2c298da5701c61038e4cdfac2e0038b884ce" + integrity sha512-7SjGhZ3xClqlmzqNNzESKlHbBeEzDWXIeKUBbSzK3Ce9PgK6uboiNe53fgqzhrRVOMhD1J4Q+oIm4DsTv37FWg== + dependencies: + "@ethersproject/bignumber" ">=5.0.0-beta.130" + "@ethersproject/bytes" ">=5.0.0-beta.129" + "@ethersproject/keccak256" ">=5.0.0-beta.127" + "@ethersproject/logger" ">=5.0.0-beta.129" + "@ethersproject/rlp" ">=5.0.0-beta.126" + bn.js "^4.4.0" + +"@ethersproject/bignumber@>=5.0.0-beta.130": + version "5.0.0-beta.135" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.0-beta.135.tgz#9d464df8967f5d314d109497e4f25ab82314c098" + integrity sha512-7Tw2NgHzK7o+70bwyoaIZCbRycz+saWNU0sLOYnis3qYXwYsdTL+Rm0PMGA2v4jyHJt7BPS2pxGww+akVXbX+w== + dependencies: + "@ethersproject/bytes" ">=5.0.0-beta.129" + "@ethersproject/logger" ">=5.0.0-beta.129" + "@ethersproject/properties" ">=5.0.0-beta.131" + bn.js "^4.4.0" + +"@ethersproject/bytes@>=5.0.0-beta.129": + version "5.0.0-beta.134" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.0-beta.134.tgz#eb6b9a200be02d6d539f90086fbfad26ec63d0d5" + integrity sha512-2BULy5x0BuHPRzuGjEYWndJieDaRAaZUbMk53fZjH4yjhKMHDGADQQOtaSD4wN+H183YOXMGdtlCrRGJ1N+uNg== + dependencies: + "@ethersproject/logger" ">=5.0.0-beta.129" + +"@ethersproject/constants@>=5.0.0-beta.128": + version "5.0.0-beta.132" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.0-beta.132.tgz#068cc97493fbc1543299bda79e0e726310e129a4" + integrity sha512-ioO7Ez8Xatk5z3lVzzEhRjXng1le1sTzfuD3v8gUozrzgLXyl0X81Go1Nadj7qPgo68HziIFcm5kRFp4SdJa0A== + dependencies: + "@ethersproject/bignumber" ">=5.0.0-beta.130" + +"@ethersproject/hash@>=5.0.0-beta.128": + version "5.0.0-beta.133" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.0-beta.133.tgz#bda0c74454a82359642033f27c5157963495fcdf" + integrity sha512-tfF11QxFlJCy92rMtUZ0kImchWhlYXkN5Gj5cYfTcCdWEUKwNq1LljDnlrjV2JabO6s5enb8uiUj4RBTo2+Rgw== + dependencies: + "@ethersproject/bytes" ">=5.0.0-beta.129" + "@ethersproject/keccak256" ">=5.0.0-beta.127" + "@ethersproject/logger" ">=5.0.0-beta.129" + "@ethersproject/strings" ">=5.0.0-beta.130" + +"@ethersproject/keccak256@>=5.0.0-beta.127": + version "5.0.0-beta.131" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.0-beta.131.tgz#b5778723ee75208065b9b9ad30c71d480f41bb31" + integrity sha512-KQnqMwGV0IMOjAr/UTFO8DuLrmN1uaMvcV3zh9hiXhh3rCuY+WXdeUh49w1VQ94kBKmaP0qfGb7z4SdhUWUHjw== + dependencies: + "@ethersproject/bytes" ">=5.0.0-beta.129" + js-sha3 "0.5.7" + +"@ethersproject/logger@>=5.0.0-beta.129": + version "5.0.0-beta.133" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.0-beta.133.tgz#2d62d495ed413c7045054d4f99a0fb4920079b2e" + integrity sha512-1ISf7rFKFbMHlEB37JS7Oy3FgFlvzF2Ze2uFZMJHGKp9xgDvFy1VHNMBM1KrJPK4AqCZXww0//e2keLsN3g/Cw== + +"@ethersproject/properties@>=5.0.0-beta.131": + version "5.0.0-beta.135" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.0-beta.135.tgz#51a0a5d72ca034b5ae845d43ed409eb3576a3ca7" + integrity sha512-R4ROFaFh86n09eE+MWMPzaB87V5OSgqu0gtQ7LjUvkFF3eqdpdvLVD4N93hvCKNZcjGHI4WmazDUlpuXZVgDkA== + dependencies: + "@ethersproject/logger" ">=5.0.0-beta.129" + +"@ethersproject/rlp@>=5.0.0-beta.126": + version "5.0.0-beta.131" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.0-beta.131.tgz#4a0c0c314e26ed7f01be6bca16308d629a8022d2" + integrity sha512-sUJUGbywlnuk2frkSWzWiGenTrwOnrKQaNKJqjCGmK35x0WIzcR4/1gC6jWa0hpWJT6Seq6J6SCT5CS+ZWCFNw== + dependencies: + "@ethersproject/bytes" ">=5.0.0-beta.129" + +"@ethersproject/strings@>=5.0.0-beta.130": + version "5.0.0-beta.135" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.0-beta.135.tgz#7754a805831383bf1838cd097d26c6135e96a745" + integrity sha512-MiZSJPhAQggXb3XA/XS4jmwmj5CsknMXk/XIzNZB7eYqEGA2i7sQV7+o6DOE+3lq5k5BhB8OaDziogNCOGAouA== + dependencies: + "@ethersproject/bytes" ">=5.0.0-beta.129" + "@ethersproject/constants" ">=5.0.0-beta.128" + "@ethersproject/logger" ">=5.0.0-beta.129" + "@hapi/accept@3.x.x": version "3.2.3" resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-3.2.3.tgz#6947259928ed28df2736c7daffbfc739b72adfcc" @@ -1627,6 +1724,15 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" +"@mycrypto/eth-scan@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@mycrypto/eth-scan/-/eth-scan-1.1.0.tgz#2355d90fae833b67304e5ae11072dbba3420f22b" + integrity sha512-s4ZPmwETCKtU0Myy7YObfxRb05H8lkuSE9ynRpeSaTE03IHPbsB6/SKmCatJUhRfPawhmPDlqVKiZ8ARgfCLqg== + dependencies: + "@ethersproject/abi" "^5.0.0-beta.133" + bignumber.js "^9.0.0" + isomorphic-fetch "^2.2.1" + "@nodelib/fs.stat@^1.1.2": version "1.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"