Skip to content

Commit

Permalink
Use token metadata from Store in UI, plus some fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
v-almonacid committed Jun 14, 2021
1 parent f9533f4 commit feb2f88
Show file tree
Hide file tree
Showing 7 changed files with 59 additions and 41 deletions.
3 changes: 1 addition & 2 deletions src/actions.js
Expand Up @@ -18,7 +18,7 @@ import {
import {changeAndSaveLanguage} from './actions/language'
import {clearUTXOs} from './actions/utxo'
import {clearAccountState} from './actions/account'
import {fetchTokenInfo, clearTokenInfo} from './actions/tokenInfo'
import {fetchTokenInfo} from './actions/tokenInfo'
import {
canBiometricEncryptionBeEnabled,
recreateAppSignInKeys,
Expand Down Expand Up @@ -360,7 +360,6 @@ export const setupHooks = () => (dispatch: Dispatch<any>) => {

walletManager.subscribeOnClose(() => dispatch(clearUTXOs()))
walletManager.subscribeOnClose(() => dispatch(clearAccountState()))
walletManager.subscribeOnClose(() => dispatch(clearTokenInfo()))

Logger.debug('setting up app lock')
const onTimeoutAction = () => {
Expand Down
4 changes: 2 additions & 2 deletions src/actions/tokenInfo.js
Expand Up @@ -70,7 +70,7 @@ export const fetchTokenInfo = () => async (
const subjectDict = ObjectValues(availableAssets)
.filter((asset) => {
const assetValue = assetsBalance.get(asset.identifier)
return assetValue && assetValue.gte(0)
return assetValue && assetValue.gt(0)
})
.reduce((acc, curr: Token): Dict<string> => {
if (curr.identifier === '') return acc
Expand Down Expand Up @@ -100,7 +100,7 @@ export const fetchTokenInfo = () => async (
},
}
}
Logger.warn('saving token info in state....', tokens)
Logger.info('saving token info in state....', tokens)
dispatch(_setTokenInfo(tokens))
dispatch(_setLastError(null))
} catch (err) {
Expand Down
18 changes: 11 additions & 7 deletions src/api/shelley/api.js
Expand Up @@ -186,13 +186,17 @@ export const getTokenInfo = async (
}
const endpointRoot = `${config.TOKEN_INFO_SERVICE}/metadata`
const responses = await Promise.all(
tokenIds.map((tokenId) =>
checkedFetch({
endpoint: `${endpointRoot}/${tokenId}`,
method: 'GET',
payload: undefined,
}),
),
tokenIds.map(async (tokenId) => {
try {
return await checkedFetch({
endpoint: `${endpointRoot}/${tokenId}`,
method: 'GET',
payload: undefined,
})
} catch (_e) {
return {}
}
}),
)
return responses.reduce((res, resp) => {
if (resp && resp.subject) {
Expand Down
8 changes: 4 additions & 4 deletions src/components/Send/ConfirmScreen.js
Expand Up @@ -25,7 +25,7 @@ import {
isHWSelector,
hwDeviceInfoSelector,
defaultNetworkAssetSelector,
availableAssetsSelector,
tokenInfoSelector,
} from '../../selectors'
import globalMessages, {
errorMessages,
Expand Down Expand Up @@ -225,7 +225,7 @@ const ConfirmScreen = (
isEasyConfirmationEnabled,
isHW,
defaultAsset,
availableAssets,
tokenMetadata,
sendingTransaction,
buttonDisabled,
ledgerDialogStep,
Expand Down Expand Up @@ -293,7 +293,7 @@ const ConfirmScreen = (
</Text>
{tokens.map((t, i) => (
<Text style={styles.amount} key={i}>
{formatTokenWithText(t.amount, availableAssets[t.identifier])}
{formatTokenWithText(t.amount, tokenMetadata[t.identifier])}
</Text>
))}

Expand Down Expand Up @@ -377,7 +377,7 @@ export default injectIntl(
isHW: isHWSelector(state),
hwDeviceInfo: hwDeviceInfoSelector(state),
defaultAsset: defaultNetworkAssetSelector(state),
availableAssets: availableAssetsSelector(state),
tokenMetadata: tokenInfoSelector(state),
}),
{
submitTransaction,
Expand Down
34 changes: 17 additions & 17 deletions src/components/Send/SendScreen.js
Expand Up @@ -35,7 +35,7 @@ import {
utxosSelector,
isOnlineSelector,
hasPendingOutgoingTransactionSelector,
availableAssetsSelector,
tokenInfoSelector,
defaultNetworkAssetSelector,
serverStatusSelector,
} from '../../selectors'
Expand Down Expand Up @@ -450,7 +450,7 @@ type Props = {
tokenBalance: MultiToken,
isFetchingBalance: boolean,
lastFetchingError: any,
availableAssets: Dict<Token>,
tokenMetadata: Dict<Token>,
defaultAsset: DefaultAsset,
utxos: ?Array<RawUtxo>,
isOnline: boolean,
Expand Down Expand Up @@ -527,8 +527,8 @@ class SendScreen extends Component<Props, State> {
balanceAfter: null,
recomputing: true,
})
const {defaultAsset, availableAssets, tokenBalance} = this.props
if (availableAssets[selectedAsset.identifier] == null) {
const {defaultAsset, tokenMetadata, tokenBalance} = this.props
if (tokenMetadata[selectedAsset.identifier] == null) {
throw new Error(
'revalidate: no asset metadata found for the asset selected',
)
Expand All @@ -539,7 +539,7 @@ class SendScreen extends Component<Props, State> {
amount,
sendAll,
defaultAsset,
selectedTokenMeta: availableAssets[selectedAsset.identifier],
selectedTokenMeta: tokenMetadata[selectedAsset.identifier],
tokenBalance,
})

Expand Down Expand Up @@ -593,12 +593,12 @@ class SendScreen extends Component<Props, State> {
utxos,
tokenBalance,
defaultAsset,
availableAssets,
tokenMetadata,
serverStatus,
} = this.props
const {address, amount, sendAll, selectedAsset} = this.state

const selectedTokenMeta = availableAssets[selectedAsset.identifier]
const selectedTokenMeta = tokenMetadata[selectedAsset.identifier]
if (selectedTokenMeta == null) {
throw new Error(
'SendScreen::handleConfirm: no asset metadata found for the asset selected',
Expand Down Expand Up @@ -686,8 +686,8 @@ class SendScreen extends Component<Props, State> {

renderBalanceAfterTransaction = () => {
const {balanceAfter} = this.state
const {intl, availableAssets, tokenBalance} = this.props
const assetMetaData = availableAssets[tokenBalance.getDefaultId()]
const {intl, tokenMetadata, tokenBalance} = this.props
const assetMetaData = tokenMetadata[tokenBalance.getDefaultId()]

const value = balanceAfter
? formatTokenWithSymbol(balanceAfter, assetMetaData)
Expand Down Expand Up @@ -720,8 +720,8 @@ class SendScreen extends Component<Props, State> {
}

renderAvailableAmountBanner = () => {
const {isFetchingBalance, tokenBalance, availableAssets, intl} = this.props
const assetMetaData = availableAssets[tokenBalance.getDefaultId()]
const {isFetchingBalance, tokenBalance, tokenMetadata, intl} = this.props
const assetMetaData = tokenMetadata[tokenBalance.getDefaultId()]

return (
<Banner
Expand Down Expand Up @@ -773,10 +773,10 @@ class SendScreen extends Component<Props, State> {
}

renderSendAllWarning = () => {
const {intl, availableAssets} = this.props
const {intl, tokenMetadata} = this.props
const {showSendAllWarning, selectedAsset} = this.state

const selectedTokenMeta = availableAssets[selectedAsset.identifier]
const selectedTokenMeta = tokenMetadata[selectedAsset.identifier]
const isDefault = selectedTokenMeta.isDefault
const assetNameOrId = truncateWithEllipsis(
getAssetDenominationOrId(selectedTokenMeta, ASSET_DENOMINATION.TICKER),
Expand Down Expand Up @@ -833,8 +833,8 @@ class SendScreen extends Component<Props, State> {
isOnline,
hasPendingOutgoingTransaction,
defaultAsset,
availableAssets,
tokenBalance,
tokenMetadata,
} = this.props

const {
Expand Down Expand Up @@ -864,7 +864,7 @@ class SendScreen extends Component<Props, State> {
defaultAsset,
)

const selectedAssetMeta = availableAssets[selectedAsset.identifier]
const selectedAssetMeta = tokenMetadata[selectedAsset.identifier]

const assetDenomination = truncateWithEllipsis(
getAssetDenominationOrId(selectedAssetMeta, ASSET_DENOMINATION.TICKER),
Expand Down Expand Up @@ -919,7 +919,7 @@ class SendScreen extends Component<Props, State> {
selectedAsset={selectedAsset}
label={'Asset'}
assets={tokenBalance.values}
assetsMetadata={availableAssets}
assetsMetadata={tokenMetadata}
unselectEnabled={false}
/>
{this.state.recomputing && <Indicator />}
Expand Down Expand Up @@ -949,7 +949,7 @@ export default injectIntl(
tokenBalance: tokenBalanceSelector(state),
isFetchingBalance: isFetchingUtxosSelector(state),
lastFetchingError: lastUtxosFetchErrorSelector(state),
availableAssets: availableAssetsSelector(state),
tokenMetadata: tokenInfoSelector(state),
defaultAsset: defaultNetworkAssetSelector(state),
utxos: utxosSelector(state),
hasPendingOutgoingTransaction: hasPendingOutgoingTransactionSelector(
Expand Down
14 changes: 7 additions & 7 deletions src/components/TxHistory/TxDetails.js
Expand Up @@ -20,7 +20,7 @@ import {
internalAddressIndexSelector,
externalAddressIndexSelector,
walletMetaSelector,
availableAssetsSelector,
tokenInfoSelector,
defaultNetworkAssetSelector,
} from '../../selectors'
import {withNavigationTitle} from '../../utils/renderUtils'
Expand Down Expand Up @@ -234,7 +234,7 @@ type Props = {|
transaction: TransactionInfo,
internalAddressIndex: Dict<number>,
externalAddressIndex: Dict<number>,
availableAssets: Dict<Token>,
tokenMetadata: Dict<Token>,
defaultNetworkAsset: DefaultAsset,
openInExplorer: () => void,
showModalForAddress: (string) => void,
Expand All @@ -246,7 +246,7 @@ const TxDetails = ({
transaction,
internalAddressIndex,
externalAddressIndex,
availableAssets,
tokenMetadata,
defaultNetworkAsset,
openInExplorer,
showModalForAddress,
Expand All @@ -269,7 +269,7 @@ const TxDetails = ({
: null
const amountAsMT = MultiToken.fromArray(transaction.amount)
const amount: BigNumber = amountAsMT.getDefault()
const amountDefaultAsset: ?Token = availableAssets[amountAsMT.getDefaultId()]
const amountDefaultAsset: ?Token = tokenMetadata[amountAsMT.getDefaultId()]

const defaultAsset = amountDefaultAsset || defaultNetworkAsset

Expand Down Expand Up @@ -329,7 +329,7 @@ const TxDetails = ({
<AssetList
styles={assetListStyle}
assets={item.assets}
assetsMetadata={availableAssets}
assetsMetadata={tokenMetadata}
/>
)}
</>
Expand Down Expand Up @@ -367,7 +367,7 @@ const TxDetails = ({
<AssetList
styles={assetListStyle}
assets={item.assets}
assetsMetadata={availableAssets}
assetsMetadata={tokenMetadata}
/>
)}
</>
Expand Down Expand Up @@ -410,7 +410,7 @@ export default injectIntl(
internalAddressIndex: internalAddressIndexSelector(state),
externalAddressIndex: externalAddressIndexSelector(state),
walletMeta: walletMetaSelector(state),
availableAssets: availableAssetsSelector(state),
tokenMetadata: tokenInfoSelector(state),
defaultNetworkAsset: defaultNetworkAssetSelector(state),
}
}),
Expand Down
19 changes: 17 additions & 2 deletions src/selectors.js
Expand Up @@ -169,13 +169,17 @@ export const tokenBalanceSelector: (
const processed = ObjectValues(transactions).filter(
(tx) => tx.status === TRANSACTION_STATUS.SUCCESSFUL,
)
const result = processed
const rawBalance = processed
.map((tx) => MultiToken.fromArray(tx.delta))
.reduce(
(acc, curr) => acc.joinAddMutable(curr),
new MultiToken([], getDefaultNetworkTokenEntry(walletMeta.networkId)),
)
return result
const positiveBalance = rawBalance.asArray().filter((value) => {
if (value.isDefault) return true // keep ADA or any other default asset
return new BigNumber(value.amount).gt(0)
})
return MultiToken.fromArray(positiveBalance)
},
)

Expand Down Expand Up @@ -240,6 +244,17 @@ export const lastPoolInfoErrorSelector = (state: State): any =>
export const poolInfoSelector = (state: State) =>
state.poolInfo.isFetching ? null : state.poolInfo.meta

// TokenInfo

export const isFetchingTokenInfoSelector = (state: State): boolean =>
state.tokenInfo.isFetching

export const lastTokenInfoErrorSelector = (state: State): any =>
state.tokenInfo.lastFetchingError

export const tokenInfoSelector = (state: State): Dict<Token> =>
state.tokenInfo.isFetching ? {} : state.tokenInfo.tokens

export const walletIsInitializedSelector = (state: State): boolean =>
state.wallet.isInitialized

Expand Down

0 comments on commit feb2f88

Please sign in to comment.