From 016acd3e9434d12d52af4a4af1f89f300f0d3442 Mon Sep 17 00:00:00 2001 From: Mark Stacey Date: Fri, 12 Jun 2020 14:04:40 -0300 Subject: [PATCH] Refactor asset page component (#8788) The asset page component has been split into three parts: the main asset page wrapper, and a component for the content (either token or native currency). This makes it easier to add functionality that is specific to either token asset pages or native currency asset pages. --- ui/app/pages/asset/asset.js | 51 ++++--------------- ui/app/pages/asset/components/native-asset.js | 32 ++++++++++++ ui/app/pages/asset/components/token-asset.js | 51 +++++++++++++++++++ 3 files changed, 92 insertions(+), 42 deletions(-) create mode 100644 ui/app/pages/asset/components/native-asset.js create mode 100644 ui/app/pages/asset/components/token-asset.js diff --git a/ui/app/pages/asset/asset.js b/ui/app/pages/asset/asset.js index 7393d8f1b..7cdc08ec7 100644 --- a/ui/app/pages/asset/asset.js +++ b/ui/app/pages/asset/asset.js @@ -1,63 +1,30 @@ import React from 'react' -import { useDispatch, useSelector } from 'react-redux' -import { Redirect, useHistory, useParams } from 'react-router-dom' -import { createAccountLink } from '@metamask/etherscan-link' - -import TransactionList from '../../components/app/transaction-list' -import { EthOverview, TokenOverview } from '../../components/app/wallet-overview' -import { getCurrentNetworkId, getSelectedIdentity } from '../../selectors/selectors' +import { useSelector } from 'react-redux' +import { Redirect, useParams } from 'react-router-dom' import { getTokens } from '../../ducks/metamask/metamask' import { DEFAULT_ROUTE } from '../../helpers/constants/routes' -import { showModal } from '../../store/actions' -import AssetNavigation from './components/asset-navigation' -import TokenOptions from './components/token-options' +import NativeAsset from './components/native-asset' +import TokenAsset from './components/token-asset' const Asset = () => { - const dispatch = useDispatch() - const network = useSelector(getCurrentNetworkId) - const selectedAccountName = useSelector((state) => getSelectedIdentity(state).name) const nativeCurrency = useSelector((state) => state.metamask.nativeCurrency) const tokens = useSelector(getTokens) - const history = useHistory() const { asset } = useParams() const token = tokens.find((token) => token.address === asset) - let assetName - let optionsButton - + let content if (token) { - assetName = token.symbol - optionsButton = ( - dispatch(showModal({ name: 'HIDE_TOKEN_CONFIRMATION', token }))} - onViewEtherscan={() => { - const url = createAccountLink(token.address, network) - global.platform.openTab({ url }) - }} - tokenSymbol={token.symbol} - /> - ) + content = } else if (asset === nativeCurrency) { - assetName = nativeCurrency + content = } else { - return + content = } - - const overview = token - ? - : return (
- history.push(DEFAULT_ROUTE)} - optionsButton={optionsButton} - /> - { overview } - + { content }
) } diff --git a/ui/app/pages/asset/components/native-asset.js b/ui/app/pages/asset/components/native-asset.js new file mode 100644 index 000000000..2f83a940d --- /dev/null +++ b/ui/app/pages/asset/components/native-asset.js @@ -0,0 +1,32 @@ +import React from 'react' +import PropTypes from 'prop-types' +import { useSelector } from 'react-redux' +import { useHistory } from 'react-router-dom' + +import TransactionList from '../../../components/app/transaction-list' +import { EthOverview } from '../../../components/app/wallet-overview' +import { getSelectedIdentity } from '../../../selectors/selectors' +import { DEFAULT_ROUTE } from '../../../helpers/constants/routes' + +import AssetNavigation from './asset-navigation' + +export default function NativeAsset ({ nativeCurrency }) { + const selectedAccountName = useSelector((state) => getSelectedIdentity(state).name) + const history = useHistory() + + return ( + <> + history.push(DEFAULT_ROUTE)} + /> + + + + ) +} + +NativeAsset.propTypes = { + nativeCurrency: PropTypes.string.isRequired, +} diff --git a/ui/app/pages/asset/components/token-asset.js b/ui/app/pages/asset/components/token-asset.js new file mode 100644 index 000000000..84c7eee37 --- /dev/null +++ b/ui/app/pages/asset/components/token-asset.js @@ -0,0 +1,51 @@ +import React from 'react' +import PropTypes from 'prop-types' +import { useDispatch, useSelector } from 'react-redux' +import { useHistory } from 'react-router-dom' +import { createAccountLink } from '@metamask/etherscan-link' + +import TransactionList from '../../../components/app/transaction-list' +import { TokenOverview } from '../../../components/app/wallet-overview' +import { getCurrentNetworkId, getSelectedIdentity } from '../../../selectors/selectors' +import { DEFAULT_ROUTE } from '../../../helpers/constants/routes' +import { showModal } from '../../../store/actions' + +import AssetNavigation from './asset-navigation' +import TokenOptions from './token-options' + +export default function TokenAsset ({ token }) { + const dispatch = useDispatch() + const network = useSelector(getCurrentNetworkId) + const selectedAccountName = useSelector((state) => getSelectedIdentity(state).name) + const history = useHistory() + + return ( + <> + history.push(DEFAULT_ROUTE)} + optionsButton={( + dispatch(showModal({ name: 'HIDE_TOKEN_CONFIRMATION', token }))} + onViewEtherscan={() => { + const url = createAccountLink(token.address, network) + global.platform.openTab({ url }) + }} + tokenSymbol={token.symbol} + /> + )} + /> + + + + ) +} + +TokenAsset.propTypes = { + token: PropTypes.shape({ + address: PropTypes.string.isRequired, + decimals: PropTypes.number, + symbol: PropTypes.string, + }).isRequired, +}