From 3301fd8121ccbb0fd6292ac462ffd4d52bca0e8e Mon Sep 17 00:00:00 2001 From: MG Date: Wed, 2 Feb 2022 12:32:16 +0100 Subject: [PATCH] Feat/hide 0 balances (#13306) * Added token list functional component * Added list - img not showing up * Changed render list * Removed unused code * Clean up * Lint * Linted * Add newline * Filter out isERC721 * Added token list * Cleaned up style * Fixed typography * Fixed lint * Fixed spacing measure * Lint cleanup --- ui/components/app/app-components.scss | 1 + ui/components/app/token-list-display/index.js | 1 + .../token-list-display/token-list-display.js | 61 +++++++++++++++++++ .../token-list-display.scss | 45 ++++++++++++++ .../send-asset-row.component.js | 10 ++- 5 files changed, 115 insertions(+), 3 deletions(-) create mode 100644 ui/components/app/token-list-display/index.js create mode 100644 ui/components/app/token-list-display/token-list-display.js create mode 100644 ui/components/app/token-list-display/token-list-display.scss diff --git a/ui/components/app/app-components.scss b/ui/components/app/app-components.scss index 4cfede5e5..17653fee7 100644 --- a/ui/components/app/app-components.scss +++ b/ui/components/app/app-components.scss @@ -53,6 +53,7 @@ @import 'flask/snap-settings-card/index'; @import 'tab-bar/index'; @import 'token-cell/token-cell'; +@import 'token-list-display/token-list-display'; @import 'transaction-activity-log/index'; @import 'transaction-breakdown/index'; @import 'transaction-detail/index'; diff --git a/ui/components/app/token-list-display/index.js b/ui/components/app/token-list-display/index.js new file mode 100644 index 000000000..54b9cb487 --- /dev/null +++ b/ui/components/app/token-list-display/index.js @@ -0,0 +1 @@ +export { default } from './token-list-display'; diff --git a/ui/components/app/token-list-display/token-list-display.js b/ui/components/app/token-list-display/token-list-display.js new file mode 100644 index 000000000..0c06d0ca2 --- /dev/null +++ b/ui/components/app/token-list-display/token-list-display.js @@ -0,0 +1,61 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { useSelector } from 'react-redux'; +import { isEqual } from 'lodash'; + +import { getShouldHideZeroBalanceTokens } from '../../../selectors'; +import { useTokenTracker } from '../../../hooks/useTokenTracker'; +import Identicon from '../../ui/identicon'; +import TokenBalance from '../../ui/token-balance'; +import { useI18nContext } from '../../../hooks/useI18nContext'; +import { getTokens } from '../../../ducks/metamask/metamask'; + +export default function TokenListDisplay({ clickHandler }) { + const t = useI18nContext(); + const shouldHideZeroBalanceTokens = useSelector( + getShouldHideZeroBalanceTokens, + ); + + const tokens = useSelector(getTokens, isEqual); + const { loading, tokensWithBalances } = useTokenTracker( + tokens, + true, + shouldHideZeroBalanceTokens, + ); + if (loading) { + return
{t('loadingTokens')}
; + } + + const sendableTokens = tokensWithBalances.filter((token) => !token.isERC721); + + return ( + <> + {sendableTokens.map((tokenData) => { + const { address, symbol, image } = tokenData; + + return ( +
clickHandler(tokenData)} + > + +
+
{symbol}
+
+ + {`${t('balance')}:`} + + +
+
+
+ ); + })} + + ); +} + +TokenListDisplay.propTypes = { + clickHandler: PropTypes.func, +}; diff --git a/ui/components/app/token-list-display/token-list-display.scss b/ui/components/app/token-list-display/token-list-display.scss new file mode 100644 index 000000000..9982af0cd --- /dev/null +++ b/ui/components/app/token-list-display/token-list-display.scss @@ -0,0 +1,45 @@ +.loading-span { + display: flex; + height: 250px; + align-items: center; + justify-content: center; + padding: 32px; +} + +.token-list-item { + padding: 8px; + display: flex; + flex-flow: row nowrap; + align-items: center; + cursor: pointer; + padding: 8px; + + &:hover { + background-color: rgba($alto, 0.2); + } + + &__data { + margin-left: 8px; + } + + &__symbol { + @include Paragraph; + + line-height: 140%; + margin-bottom: 2px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + &__balance { + @include H7; + + display: flex; + flex-flow: row nowrap; + } + + &__balance__label { + margin-right: 4px; + } +} diff --git a/ui/pages/send/send-content/send-asset-row/send-asset-row.component.js b/ui/pages/send/send-content/send-asset-row/send-asset-row.component.js index d1e308c70..3f28f967c 100644 --- a/ui/pages/send/send-content/send-asset-row/send-asset-row.component.js +++ b/ui/pages/send/send-content/send-asset-row/send-asset-row.component.js @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import SendRowWrapper from '../send-row-wrapper'; import Identicon from '../../../../components/ui/identicon'; import TokenBalance from '../../../../components/ui/token-balance'; +import TokenListDisplay from '../../../../components/app/token-list-display'; import UserPreferencedCurrencyDisplay from '../../../../components/app/user-preferenced-currency-display'; import { ERC20, ERC721, PRIMARY } from '../../../../helpers/constants/common'; import { ASSET_TYPES } from '../../../../ducks/send'; @@ -162,9 +163,12 @@ export default class SendAssetRow extends Component { />
{this.renderNativeCurrency(true)} - {this.state.sendableTokens.map((token) => - this.renderToken(token, true), - )} + + this.selectToken(ASSET_TYPES.TOKEN, token) + } + /> + {this.state.sendableCollectibles.map((collectible) => this.renderCollectible(collectible, true), )}