Convert `AssetList` to functional component (#8588)
The `AssetList` component is now a function rather than a class, and it makes use of the new `useMetricsEvent` and `useUserPreferencedCurrency` hooks.feature/default_network_editable
parent
73272124b3
commit
204d197996
@ -1,106 +0,0 @@ |
||||
import PropTypes from 'prop-types' |
||||
import React, { Component } from 'react' |
||||
import AddTokenButton from '../add-token-button' |
||||
import TokenList from '../token-list' |
||||
import { ADD_TOKEN_ROUTE } from '../../../helpers/constants/routes' |
||||
import AssetListItem from '../asset-list-item' |
||||
import UserPreferencedCurrencyDisplay from '../user-preferenced-currency-display' |
||||
import { PRIMARY, SECONDARY } from '../../../helpers/constants/common' |
||||
|
||||
export default class AssetList extends Component { |
||||
static contextTypes = { |
||||
t: PropTypes.func, |
||||
metricsEvent: PropTypes.func, |
||||
} |
||||
|
||||
static defaultProps = { |
||||
selectedTokenAddress: undefined, |
||||
} |
||||
|
||||
static propTypes = { |
||||
history: PropTypes.object.isRequired, |
||||
selectedAccountBalance: PropTypes.string, |
||||
selectedTokenAddress: PropTypes.string, |
||||
setSelectedToken: PropTypes.func.isRequired, |
||||
showFiat: PropTypes.bool.isRequired, |
||||
unsetSelectedToken: PropTypes.func.isRequired, |
||||
} |
||||
|
||||
renderWalletBalance () { |
||||
const { |
||||
selectedAccountBalance, |
||||
selectedTokenAddress, |
||||
showFiat, |
||||
unsetSelectedToken, |
||||
} = this.props |
||||
|
||||
return ( |
||||
<AssetListItem |
||||
active={!selectedTokenAddress} |
||||
onClick={unsetSelectedToken} |
||||
data-testid="wallet-balance" |
||||
> |
||||
<UserPreferencedCurrencyDisplay |
||||
className="asset-list__primary-amount" |
||||
ethNumberOfDecimals={4} |
||||
type={PRIMARY} |
||||
value={selectedAccountBalance} |
||||
/> |
||||
{ |
||||
showFiat && ( |
||||
<UserPreferencedCurrencyDisplay |
||||
className="asset-list__secondary-amount" |
||||
ethNumberOfDecimals={4} |
||||
type={SECONDARY} |
||||
value={selectedAccountBalance} |
||||
/> |
||||
) |
||||
} |
||||
</AssetListItem> |
||||
) |
||||
} |
||||
|
||||
renderAddToken () { |
||||
const { |
||||
history, |
||||
} = this.props |
||||
const { metricsEvent } = this.context |
||||
|
||||
return ( |
||||
<AddTokenButton |
||||
onClick={() => { |
||||
history.push(ADD_TOKEN_ROUTE) |
||||
metricsEvent({ |
||||
eventOpts: { |
||||
category: 'Navigation', |
||||
action: 'Token Menu', |
||||
name: 'Clicked "Add Token"', |
||||
}, |
||||
}) |
||||
}} |
||||
/> |
||||
) |
||||
} |
||||
|
||||
render () { |
||||
const { setSelectedToken } = this.props |
||||
return ( |
||||
<> |
||||
{this.renderWalletBalance()} |
||||
<TokenList |
||||
onTokenClick={(tokenAddress) => { |
||||
setSelectedToken(tokenAddress) |
||||
this.context.metricsEvent({ |
||||
eventOpts: { |
||||
category: 'Navigation', |
||||
action: 'Token Menu', |
||||
name: 'Clicked Token', |
||||
}, |
||||
}) |
||||
}} |
||||
/> |
||||
{this.renderAddToken()} |
||||
</> |
||||
) |
||||
} |
||||
} |
@ -1,26 +0,0 @@ |
||||
import { connect } from 'react-redux' |
||||
import { withRouter } from 'react-router-dom' |
||||
import { compose } from 'redux' |
||||
import AssetList from './asset-list.component' |
||||
import { setSelectedToken } from '../../../store/actions' |
||||
import { getCurrentAccountWithSendEtherInfo, getShouldShowFiat } from '../../../selectors/selectors' |
||||
|
||||
function mapStateToProps (state) { |
||||
return { |
||||
selectedAccountBalance: getCurrentAccountWithSendEtherInfo(state).balance, |
||||
selectedTokenAddress: state.metamask.selectedTokenAddress, |
||||
showFiat: getShouldShowFiat(state), |
||||
} |
||||
} |
||||
|
||||
function mapDispatchToProps (dispatch) { |
||||
return { |
||||
setSelectedToken: (tokenAddress) => dispatch(setSelectedToken(tokenAddress)), |
||||
unsetSelectedToken: () => dispatch(setSelectedToken()), |
||||
} |
||||
} |
||||
|
||||
export default compose( |
||||
withRouter, |
||||
connect(mapStateToProps, mapDispatchToProps) |
||||
)(AssetList) |
@ -0,0 +1,84 @@ |
||||
import React from 'react' |
||||
import { useDispatch, useSelector } from 'react-redux' |
||||
import { useHistory } from 'react-router-dom' |
||||
import AddTokenButton from '../add-token-button' |
||||
import TokenList from '../token-list' |
||||
import { ADD_TOKEN_ROUTE } from '../../../helpers/constants/routes' |
||||
import AssetListItem from '../asset-list-item' |
||||
import CurrencyDisplay from '../../ui/currency-display' |
||||
import { PRIMARY, SECONDARY } from '../../../helpers/constants/common' |
||||
import { useMetricEvent } from '../../../hooks/useMetricEvent' |
||||
import { useUserPreferencedCurrency } from '../../../hooks/useUserPreferencedCurrency' |
||||
import { getCurrentAccountWithSendEtherInfo, getShouldShowFiat } from '../../../selectors/selectors' |
||||
import { setSelectedToken } from '../../../store/actions' |
||||
|
||||
const AssetList = () => { |
||||
const dispatch = useDispatch() |
||||
const history = useHistory() |
||||
const selectedAccountBalance = useSelector((state) => getCurrentAccountWithSendEtherInfo(state).balance) |
||||
const selectedTokenAddress = useSelector((state) => state.metamask.selectedTokenAddress) |
||||
const showFiat = useSelector(getShouldShowFiat) |
||||
const metricsEvent = useMetricEvent() |
||||
|
||||
const { |
||||
currency: primaryCurrency, |
||||
numberOfDecimals: primaryNumberOfDecimals, |
||||
} = useUserPreferencedCurrency(PRIMARY, { ethNumberOfDecimals: 4 }) |
||||
const { |
||||
currency: secondaryCurrency, |
||||
numberOfDecimals: secondaryNumberOfDecimals, |
||||
} = useUserPreferencedCurrency(SECONDARY, { ethNumberOfDecimals: 4 }) |
||||
|
||||
return ( |
||||
<> |
||||
<AssetListItem |
||||
active={!selectedTokenAddress} |
||||
onClick={() => dispatch(setSelectedToken())} |
||||
data-testid="wallet-balance" |
||||
> |
||||
<CurrencyDisplay |
||||
className="asset-list__primary-amount" |
||||
currency={primaryCurrency} |
||||
numberOfDecimals={primaryNumberOfDecimals} |
||||
value={selectedAccountBalance} |
||||
/> |
||||
{ |
||||
showFiat && ( |
||||
<CurrencyDisplay |
||||
className="asset-list__secondary-amount" |
||||
currency={secondaryCurrency} |
||||
numberOfDecimals={secondaryNumberOfDecimals} |
||||
value={selectedAccountBalance} |
||||
/> |
||||
) |
||||
} |
||||
</AssetListItem> |
||||
<TokenList |
||||
onTokenClick={(tokenAddress) => { |
||||
dispatch(setSelectedToken(tokenAddress)) |
||||
metricsEvent({ |
||||
eventOpts: { |
||||
category: 'Navigation', |
||||
action: 'Token Menu', |
||||
name: 'Clicked Token', |
||||
}, |
||||
}) |
||||
}} |
||||
/> |
||||
<AddTokenButton |
||||
onClick={() => { |
||||
history.push(ADD_TOKEN_ROUTE) |
||||
metricsEvent({ |
||||
eventOpts: { |
||||
category: 'Navigation', |
||||
action: 'Token Menu', |
||||
name: 'Clicked "Add Token"', |
||||
}, |
||||
}) |
||||
}} |
||||
/> |
||||
</> |
||||
) |
||||
} |
||||
|
||||
export default AssetList |
@ -1 +1 @@ |
||||
export { default } from './asset-list.container.js' |
||||
export { default } from './asset-list.js' |
||||
|
Loading…
Reference in new issue