From fe4626c5378c58d714b9b98be2372fa01405a97e Mon Sep 17 00:00:00 2001 From: stackchain <30806844+stackchain@users.noreply.github.com> Date: Thu, 23 Sep 2021 09:27:59 -0400 Subject: [PATCH 01/11] [chore] Update variables acc extension --- src/config/networks.js | 5 ++--- src/crypto/shelley/transactions.js | 10 +++++----- src/crypto/types.js | 4 ++-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/config/networks.js b/src/config/networks.js index f6f18e8537..ac8ac05ba2 100644 --- a/src/config/networks.js +++ b/src/config/networks.js @@ -307,6 +307,5 @@ export const DEFAULT_ASSETS: Array = flatten( }), ) -// Same as serialization-lib -export const MAX_OUTPUT_SIZE = 4000 -export const MAX_TX_SIZE = 8000 +export const MAX_VALUE_BYTES = 5000 +export const MAX_TX_BYTES = 16 * 1024 diff --git a/src/crypto/shelley/transactions.js b/src/crypto/shelley/transactions.js index 3f86d64308..223f98745e 100644 --- a/src/crypto/shelley/transactions.js +++ b/src/crypto/shelley/transactions.js @@ -37,7 +37,7 @@ import {BigNumber} from 'bignumber.js' import type {RawUtxo} from '../../api/types' /* eslint-enable camelcase */ import {CONFIG} from '../../config/config' -import {MAX_OUTPUT_SIZE, MAX_TX_SIZE} from '../../config/networks' +import {MAX_TX_BYTES, MAX_VALUE_BYTES} from '../../config/networks' import {AssetOverflowError, InsufficientFunds, NoOutputsError} from '../errors' import type { Address, @@ -94,9 +94,9 @@ export const sendAllUnsignedTxFromUtxo = async ( protocolParams.poolDeposit, protocolParams.keyDeposit, // $FlowFixMe sketchy-null-number - protocolParams.maxOutputSize || MAX_OUTPUT_SIZE, + protocolParams.maxValueBytes || MAX_VALUE_BYTES, // $FlowFixMe sketchy-null-number - protocolParams.maxTxSize || MAX_TX_SIZE, + protocolParams.maxTxBytes || MAX_TX_BYTES, ) await txBuilder.set_ttl(absSlotNumber.plus(defaultTtlOffset).toNumber()) for (const input of allUtxos) { @@ -349,9 +349,9 @@ export const newAdaUnsignedTxFromUtxo = async ( protocolParams.poolDeposit, protocolParams.keyDeposit, // $FlowFixMe sketchy-null-number - protocolParams.maxOutputSize || MAX_OUTPUT_SIZE, + protocolParams.maxValueBytes || MAX_VALUE_BYTES, // $FlowFixMe sketchy-null-number - protocolParams.maxTxSize || MAX_TX_SIZE, + protocolParams.maxTxBytes || MAX_TX_BYTES, ) if (certificates.length > 0) { const certsNative = await Certificates.new() diff --git a/src/crypto/types.js b/src/crypto/types.js index 515358938e..db3388ab87 100644 --- a/src/crypto/types.js +++ b/src/crypto/types.js @@ -166,6 +166,6 @@ export type ProtocolParameters = {| +poolDeposit: BigNumber, +keyDeposit: BigNumber, +networkId: number, - +maxOutputSize?: number, - +maxTxSize?: number, + +maxValueBytes?: number, + +maxTxBytes?: number, |} From 12d647ade446a19f65488c56895ccdef1934f670 Mon Sep 17 00:00:00 2001 From: Kevin Sullivan Date: Sun, 26 Sep 2021 12:01:23 -0500 Subject: [PATCH 02/11] add icons --- src/assets/img/asset_ada.png | Bin 0 -> 1297 bytes src/assets/img/asset_ada@2x.png | Bin 0 -> 2615 bytes src/assets/img/asset_ada@3x.png | Bin 0 -> 3993 bytes src/assets/img/asset_no_image.png | Bin 0 -> 1285 bytes src/assets/img/asset_no_image@2x.png | Bin 0 -> 2494 bytes src/assets/img/asset_no_image@3x.png | Bin 0 -> 4240 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/assets/img/asset_ada.png create mode 100644 src/assets/img/asset_ada@2x.png create mode 100644 src/assets/img/asset_ada@3x.png create mode 100644 src/assets/img/asset_no_image.png create mode 100644 src/assets/img/asset_no_image@2x.png create mode 100644 src/assets/img/asset_no_image@3x.png diff --git a/src/assets/img/asset_ada.png b/src/assets/img/asset_ada.png new file mode 100644 index 0000000000000000000000000000000000000000..5df0efc13d57ac28e0b38d9db4a8b3b459ac2f42 GIT binary patch literal 1297 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 Z{|C52#x(>+o>>3@002ovPDHLkV1khW_XYp} literal 0 HcmV?d00001 diff --git a/src/assets/img/asset_ada@3x.png b/src/assets/img/asset_ada@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..dfb82fd52b8771d57e70826f380f9720a161b8fc GIT binary patch literal 3993 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 literal 0 HcmV?d00001 diff --git a/src/assets/img/asset_no_image@2x.png b/src/assets/img/asset_no_image@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..67072da553b9e37275e970ab35d5453d6d20f757 GIT binary patch literal 2494 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 IM6N<$f`X8!VgLXD literal 0 HcmV?d00001 diff --git a/src/assets/img/asset_no_image@3x.png b/src/assets/img/asset_no_image@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b09bd95f704bbaa3c21553d94833b492360ddf92 GIT binary patch literal 4240 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 m{|e7Q^C)QhB Date: Sun, 26 Sep 2021 12:03:29 -0500 Subject: [PATCH 03/11] add strings --- src/i18n/locales/en-US.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index 1e4ed9a113..5933291d9a 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json @@ -96,6 +96,9 @@ "components.receive.receivescreen.unusedAddresses": "Unused addresses", "components.receive.receivescreen.usedAddresses": "Used addresses", "components.receive.receivescreen.verifyAddress": "Verify address", + "components.send.assetselectorscreen.searchlabel": "Search by name or subject", + "components.send.assetselectorscreen.sendallassets": "SELECT ALL ASSETS", + "components.send.assetselectorscreen.unknownAsset": "Unknown Asset", "components.send.addressreaderqr.title": "Scan QR code address", "components.send.amountfield.label": "Amount", "components.send.biometricauthscreen.DECRYPTION_FAILED": "Biometrics login failed. Please use an alternate login method.", From fb2f5c0b45a2cb06a26784909c7176784bd69ea8 Mon Sep 17 00:00:00 2001 From: Kevin Sullivan Date: Sun, 26 Sep 2021 12:04:46 -0500 Subject: [PATCH 04/11] clean up format --- src/utils/format.js | 50 +++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/src/utils/format.js b/src/utils/format.js index 46345392dc..077310db32 100644 --- a/src/utils/format.js +++ b/src/utils/format.js @@ -24,7 +24,7 @@ const messages = defineMessages({ }, }) -const getTokenFingerprint = (token: Token | DefaultAsset) => { +export const getTokenFingerprint = (token: Token | DefaultAsset) => { const {policyId, assetName} = token.metadata const assetFingerprint = new AssetFingerprint(Buffer.from(policyId, 'hex'), Buffer.from(assetName, 'hex')) return assetFingerprint.fingerprint() @@ -38,38 +38,34 @@ export const ASSET_DENOMINATION = { } export type AssetDenomination = $Values +export const decodeHexAscii = (text: string) => { + const bytes = [...Buffer.from(text, 'hex')] + const isAscii = bytes.every((byte) => byte > 32 && byte < 127) + + return isAscii ? String.fromCharCode(...bytes) : undefined +} + +export const getTicker = (token: Token | DefaultAsset) => token.metadata.ticker +export const getSymbol = (token: Token | DefaultAsset) => + token.metadata.ticker + ? utfSymbols.CURRENCIES[token.metadata.ticker] + ? utfSymbols.CURRENCIES[token.metadata.ticker] + : token.metadata.ticker + : null +export const getName = (token: Token | DefaultAsset) => + token.metadata.longName || decodeHexAscii(token.metadata.assetName) || getTokenFingerprint(token) || undefined + // NOTE: There is a bug when starting fresh, the metadata is empty export const getAssetDenomination = (token: Token | DefaultAsset, denomination: AssetDenomination): ?string => { switch (denomination) { case ASSET_DENOMINATION.TICKER: - // $FlowFixMe - return token?.metadata?.ticker + return getTicker(token) case ASSET_DENOMINATION.SYMBOL: - // if we don't have a symbol for this asset, default to ticker, though - // ticker can still be null - // $FlowFixMe - return token?.metadata?.ticker - ? utfSymbols.CURRENCIES[token.metadata.ticker] - ? utfSymbols.CURRENCIES[token.metadata.ticker] - : token.metadata.ticker - : null - case ASSET_DENOMINATION.NAME: { - // $FlowFixMe - if (token?.metadata?.longName !== null) { - return token.metadata.longName - } - // $FlowFixMe - if (token?.metadata?.assetName?.length > 0) { - const bytes = [...Buffer.from(token.metadata.assetName, 'hex')] - if (bytes.filter((byte) => byte <= 32 || byte >= 127).length === 0) { - return String.fromCharCode(...bytes) - } - } - return null - } - case ASSET_DENOMINATION.FINGERPRINT: { + return getSymbol(token) + case ASSET_DENOMINATION.NAME: + return getName(token) + case ASSET_DENOMINATION.FINGERPRINT: return getTokenFingerprint(token) - } default: return null } From 0a34b057b3afa94190e056f2f999775a6e630011 Mon Sep 17 00:00:00 2001 From: Kevin Sullivan Date: Sun, 26 Sep 2021 12:13:18 -0500 Subject: [PATCH 05/11] add more mock state --- src/state.js | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 134 insertions(+), 1 deletion(-) diff --git a/src/state.js b/src/state.js index 11fc07e67e..c2ff72e0e9 100644 --- a/src/state.js +++ b/src/state.js @@ -10,7 +10,6 @@ import {NETWORK_REGISTRY} from './config/types' import {ISignRequest} from './crypto/ISignRequest' import type {HWDeviceInfo} from './crypto/shelley/ledgerUtils' import type {Token, Transaction} from './types/HistoryTransaction' - export type ServerStatusCache = {| +isServerOk: boolean, +isMaintenance: boolean, @@ -229,7 +228,141 @@ export const mockState = (): State => { TextPart: 'ZNXA-1056', }, }, + tokenInfo: { + isFetching: false, + lastFetchingError: null, + tokens: assetTokenInfos, + }, } } export default getInitialState + +const assetTokenInfos: Dict = { + ['']: { + networkId: 300, + isDefault: false, + identifier: '', + metadata: { + assetName: 'assetName', + longName: 'longName', + maxSupply: 'maxSupply', + numberOfDecimals: 10, + policyId: 'policyId', + ticker: 'ticker', + type: 'Cardano', + }, + }, + policyId123assetName123: { + networkId: 123, + isDefault: false, + identifier: 'policyId123assetName123', + metadata: { + assetName: 'assetName123', + longName: 'longName123', + maxSupply: 'maxSupply123', + numberOfDecimals: 10, + policyId: 'policyId1233', + ticker: 'ticker123', + type: 'Cardano', + }, + }, + policyId456assetName456: { + networkId: 456, + isDefault: true, + identifier: 'policyId456assetName456', + metadata: { + assetName: 'assetName456', + longName: 'longName456', + maxSupply: 'maxSupply456', + numberOfDecimals: 10, + policyId: 'policyId4566', + ticker: 'ticker456', + type: 'Cardano', + }, + }, + policyId789assetName789: { + networkId: 789, + isDefault: false, + identifier: 'policyId789assetName789', + metadata: { + assetName: 'assetName789', + longName: 'longName789', + maxSupply: 'maxSupply789', + numberOfDecimals: 10, + policyId: 'policyId7899', + ticker: 'ticker789', + type: 'Cardano', + }, + }, + policyId111assetName111: { + networkId: 111, + isDefault: false, + identifier: 'policyId111assetName111', + metadata: { + assetName: 'assetName111', + longName: 'longName111', + maxSupply: 'maxSupply111', + numberOfDecimals: 10, + policyId: 'policyId1119', + ticker: 'ticker111', + type: 'Cardano', + }, + }, + policyId222assetName222: { + networkId: 222, + isDefault: false, + identifier: 'policyId222assetName222', + metadata: { + assetName: 'assetName222', + longName: 'longName222', + maxSupply: 'maxSupply222', + numberOfDecimals: 10, + policyId: 'policyId2229', + ticker: 'ticker222', + type: 'Cardano', + }, + }, + policyId333assetName333: { + networkId: 333, + isDefault: false, + identifier: 'policyId333assetName333', + metadata: { + assetName: 'assetName333', + longName: 'longName333', + maxSupply: 'maxSupply333', + numberOfDecimals: 10, + policyId: 'policyId3339', + ticker: 'ticker333', + type: 'Cardano', + }, + }, + policyId444assetName444: { + networkId: 444, + isDefault: false, + identifier: 'policyId444assetName444', + metadata: { + assetName: 'assetName444', + longName: 'longName444', + maxSupply: 'maxSupply444', + numberOfDecimals: 10, + policyId: 'policyId4449', + ticker: 'ticker444', + type: 'Cardano', + }, + }, + policyId555assetName555: { + networkId: 555, + isDefault: false, + identifier: 'policyId555assetName555', + metadata: { + assetName: 'assetName555', + longName: 'longName555', + maxSupply: 'maxSupply555', + numberOfDecimals: 10, + policyId: 'policyId5559', + ticker: 'ticker555', + type: 'Cardano', + }, + }, +} From 0874b494ee21bcce9ad4148c61f9fea5c19d734a Mon Sep 17 00:00:00 2001 From: Kevin Sullivan Date: Sun, 26 Sep 2021 12:15:32 -0500 Subject: [PATCH 06/11] migrate AmountField to TextInput --- src/components/Send/AmountField.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Send/AmountField.js b/src/components/Send/AmountField.js index 7b8589e546..4e45ec037c 100644 --- a/src/components/Send/AmountField.js +++ b/src/components/Send/AmountField.js @@ -3,7 +3,7 @@ import React from 'react' import {defineMessages, useIntl} from 'react-intl' -import {ValidatedTextInput} from '../UiKit' +import {TextInput} from '../UiKit' import {editedFormatter, pastedFormatter} from './amountUtils' export const messages = defineMessages({ @@ -34,13 +34,13 @@ const AmountField = ({amount, error, editable, setAmount}: Props) => { } return ( - ) From 6cde8afcc49bee93b68ca334028035a09d6b246d Mon Sep 17 00:00:00 2001 From: Kevin Sullivan Date: Sun, 26 Sep 2021 12:27:06 -0500 Subject: [PATCH 07/11] add colors --- src/styles/config.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/styles/config.js b/src/styles/config.js index 334200554d..81a9be7c25 100644 --- a/src/styles/config.js +++ b/src/styles/config.js @@ -47,6 +47,8 @@ export const COLORS = { TEXT_INPUT: '#6B7384', MODAL_HEADING: '#6B7384', WORD_BADGE_TEXT: '#6B7384', + BLUE_LIGHTER: '#164FD6', + GREY_6: '#A7AFC0', } // TODO: use lowercase for key names. Eg navigationActive From 9c7c8808cf9cdf67a30f5e167ec75a2268c80e05 Mon Sep 17 00:00:00 2001 From: Kevin Sullivan Date: Sun, 26 Sep 2021 14:41:02 -0500 Subject: [PATCH 08/11] clean up AssetList --- src/components/Common/MultiAsset/AssetList.js | 41 ++-- .../Common/MultiAsset/AssetList.stories.js | 177 ++++++++++++++++++ 2 files changed, 199 insertions(+), 19 deletions(-) create mode 100644 src/components/Common/MultiAsset/AssetList.stories.js diff --git a/src/components/Common/MultiAsset/AssetList.js b/src/components/Common/MultiAsset/AssetList.js index 75d7311bb1..5f5614c633 100644 --- a/src/components/Common/MultiAsset/AssetList.js +++ b/src/components/Common/MultiAsset/AssetList.js @@ -1,18 +1,13 @@ // @flow import React from 'react' -import {type IntlShape, injectIntl} from 'react-intl' +import {defineMessages, useIntl} from 'react-intl' import {FlatList, Text, TouchableOpacity, View} from 'react-native' import type {TokenEntry} from '../../../crypto/MultiToken' import globalMessages, {txLabels} from '../../../i18n/global-messages' import type {Token} from '../../../types/HistoryTransaction' -import { - ASSET_DENOMINATION, - formatTokenAmount, - getAssetDenomination, - getAssetDenominationOrUnknown, -} from '../../../utils/format' +import {formatTokenAmount, getName, getTicker, getTokenFingerprint} from '../../../utils/format' import assetListSendStyle from './styles/AssetListSend.style' import assetListTransactionStyle from './styles/AssetListTransaction.style' import baseStyle from './styles/Base.style' @@ -25,21 +20,23 @@ type AssetRowProps = {| assetMetadata: Token, backColor: {|backgroundColor: string|}, onSelect?: (TokenEntry) => any, - intl: IntlShape, |} -const AssetRow = ({styles, asset, assetMetadata, backColor, onSelect, intl}: AssetRowProps) => { +const AssetRow = ({styles, asset, assetMetadata, backColor, onSelect}: AssetRowProps) => { + const intl = useIntl() const item = ( <> {assetMetadata.isDefault - ? getAssetDenominationOrUnknown(assetMetadata, ASSET_DENOMINATION.TICKER, intl) - : getAssetDenominationOrUnknown(assetMetadata, ASSET_DENOMINATION.NAME, intl)} + ? getTicker(assetMetadata) || intl.formatMessage(messages.unknownAssetName) + : getName(assetMetadata) || intl.formatMessage(messages.unknownAssetName)} + - {assetMetadata.isDefault ? '' : getAssetDenomination(assetMetadata, ASSET_DENOMINATION.FINGERPRINT)} + {assetMetadata.isDefault ? '' : getTokenFingerprint(assetMetadata)} + {formatTokenAmount(asset.amount, assetMetadata, 15)} @@ -62,10 +59,9 @@ type AssetListProps = { assetsMetadata: Dict, styles: NodeStyle, onSelect?: (TokenEntry) => any, - intl: IntlShape, } - -const AssetList = ({assets, assetsMetadata, styles, onSelect, intl}: AssetListProps) => { +const AssetList = ({assets, assetsMetadata, styles, onSelect}: AssetListProps) => { + const intl = useIntl() const colors = [styles.rowColor1, styles.rowColor2] return ( @@ -74,10 +70,11 @@ const AssetList = ({assets, assetsMetadata, styles, onSelect, intl}: AssetListPr {intl.formatMessage(globalMessages.assetsLabel)} {intl.formatMessage(txLabels.amount)} + index.toString()} + data={assets.sort((a) => (assetsMetadata[a.identifier].isDefault ? -1 : 1))} + keyExtractor={(item) => item.identifier} renderItem={({item, index}) => ( )} /> @@ -93,4 +89,11 @@ const AssetList = ({assets, assetsMetadata, styles, onSelect, intl}: AssetListPr ) } -export default injectIntl(AssetList) +export default AssetList + +const messages = defineMessages({ + unknownAssetName: { + id: 'utils.format.unknownAssetName', + defaultMessage: '!!![Unknown asset name]', + }, +}) diff --git a/src/components/Common/MultiAsset/AssetList.stories.js b/src/components/Common/MultiAsset/AssetList.stories.js new file mode 100644 index 0000000000..86931a265e --- /dev/null +++ b/src/components/Common/MultiAsset/AssetList.stories.js @@ -0,0 +1,177 @@ +// @flow + +import {action} from '@storybook/addon-actions' +import {storiesOf} from '@storybook/react-native' +import {BigNumber} from 'bignumber.js' +import React from 'react' + +import type {TokenEntry} from '../../../crypto/MultiToken' +import {type Token} from '../../../types/HistoryTransaction' +import AssetList from './AssetList' +import sendStyle from './styles/AssetListSend.style' +import baseStyle from './styles/Base.style' + +storiesOf('AssetList', module) + .add('baseStyle', () => ( + + )) + .add('sendStyle', () => ( + + )) + +const assetTokens: Array = [ + { + networkId: 123, + identifier: 'policyId123assetName123', + amount: new BigNumber(12344.00234523), + }, + { + networkId: 456, + identifier: 'policyId456assetName456', + amount: new BigNumber(10), + }, + { + networkId: 789, + identifier: 'policyId789assetName789', + amount: new BigNumber(0.00001), + }, + { + networkId: 111, + identifier: 'policyId111assetName111', + amount: new BigNumber(0.00001), + }, + { + networkId: 222, + identifier: 'policyId222assetName222', + amount: new BigNumber(0.00001), + }, + { + networkId: 333, + identifier: 'policyId333assetName333', + amount: new BigNumber(0.00001), + }, + { + networkId: 444, + identifier: 'policyId444assetName444', + amount: new BigNumber(0.00001), + }, + { + networkId: 555, + identifier: 'policyId555assetName555', + amount: new BigNumber(0.00001), + }, +] +const assetTokenInfos: Dict = { + policyId123assetName123: { + networkId: 123, + isDefault: false, + identifier: 'policyId123assetName123', + metadata: { + assetName: 'assetName123', + longName: 'longName123', + maxSupply: 'maxSupply123', + numberOfDecimals: 10, + policyId: 'policyId1233', + ticker: 'ticker123', + type: 'Cardano', + }, + }, + policyId456assetName456: { + networkId: 456, + isDefault: true, + identifier: 'policyId456assetName456', + metadata: { + assetName: 'assetName456', + longName: 'longName456', + maxSupply: 'maxSupply456', + numberOfDecimals: 10, + policyId: 'policyId4566', + ticker: 'ticker456', + type: 'Cardano', + }, + }, + policyId789assetName789: { + networkId: 789, + isDefault: false, + identifier: 'policyId789assetName789', + metadata: { + assetName: 'assetName789', + longName: 'longName789', + maxSupply: 'maxSupply789', + numberOfDecimals: 10, + policyId: 'policyId7899', + ticker: 'ticker789', + type: 'Cardano', + }, + }, + policyId111assetName111: { + networkId: 111, + isDefault: false, + identifier: 'policyId111assetName111', + metadata: { + assetName: 'assetName111', + longName: 'longName111', + maxSupply: 'maxSupply111', + numberOfDecimals: 10, + policyId: 'policyId1119', + ticker: 'ticker111', + type: 'Cardano', + }, + }, + policyId222assetName222: { + networkId: 222, + isDefault: false, + identifier: 'policyId222assetName222', + metadata: { + assetName: 'assetName222', + longName: 'longName222', + maxSupply: 'maxSupply222', + numberOfDecimals: 10, + policyId: 'policyId2229', + ticker: 'ticker222', + type: 'Cardano', + }, + }, + policyId333assetName333: { + networkId: 333, + isDefault: false, + identifier: 'policyId333assetName333', + metadata: { + assetName: 'assetName333', + longName: 'longName333', + maxSupply: 'maxSupply333', + numberOfDecimals: 10, + policyId: 'policyId3339', + ticker: 'ticker333', + type: 'Cardano', + }, + }, + policyId444assetName444: { + networkId: 444, + isDefault: false, + identifier: 'policyId444assetName444', + metadata: { + assetName: 'assetName444', + longName: 'longName444', + maxSupply: 'maxSupply444', + numberOfDecimals: 10, + policyId: 'policyId4449', + ticker: 'ticker444', + type: 'Cardano', + }, + }, + policyId555assetName555: { + networkId: 555, + isDefault: false, + identifier: 'policyId555assetName555', + metadata: { + assetName: 'assetName555', + longName: 'longName555', + maxSupply: 'maxSupply555', + numberOfDecimals: 10, + policyId: 'policyId5559', + ticker: 'ticker555', + type: 'Cardano', + }, + }, +} From 4be3885770f391fe4a725d86d321cdc9f299bfe7 Mon Sep 17 00:00:00 2001 From: Kevin Sullivan Date: Sun, 26 Sep 2021 14:43:17 -0500 Subject: [PATCH 09/11] migrate to AssetSelelctorScreen --- .../Common/MultiAsset/AssetSelector.js | 86 -- .../AssetSelectorScreen.js | 150 ++++ .../AssetSelectorScreen.stories.js | 179 ++++ .../Send/AssetSelectorScreen/index.js | 3 + src/components/Send/SendScreen.js | 836 +++++++++--------- src/components/Send/SendScreen.stories.js | 29 + src/components/Send/SendScreenNavigator.js | 37 +- 7 files changed, 828 insertions(+), 492 deletions(-) delete mode 100644 src/components/Common/MultiAsset/AssetSelector.js create mode 100644 src/components/Send/AssetSelectorScreen/AssetSelectorScreen.js create mode 100644 src/components/Send/AssetSelectorScreen/AssetSelectorScreen.stories.js create mode 100644 src/components/Send/AssetSelectorScreen/index.js create mode 100644 src/components/Send/SendScreen.stories.js diff --git a/src/components/Common/MultiAsset/AssetSelector.js b/src/components/Common/MultiAsset/AssetSelector.js deleted file mode 100644 index 16817b38b0..0000000000 --- a/src/components/Common/MultiAsset/AssetSelector.js +++ /dev/null @@ -1,86 +0,0 @@ -// @flow - -import React, {useState} from 'react' -import {type IntlShape, defineMessages, injectIntl} from 'react-intl' -import {Image, LayoutAnimation, TouchableOpacity, View} from 'react-native' - -import arrowDown from '../../../assets/img/arrow_down_fill.png' -import arrowUp from '../../../assets/img/arrow_up_fill.png' -import closeIcon from '../../../assets/img/cross_fill.png' -import type {TokenEntry} from '../../../crypto/MultiToken' -import type {Token} from '../../../types/HistoryTransaction' -import {getAssetDenominationOrId} from '../../../utils/format' -import {Text} from '../../UiKit' -import AssetList from './AssetList' -import assetListStyle from './styles/AssetListSend.style' -import styles from './styles/AssetSelector.style' - -const messages = defineMessages({ - placeHolder: { - id: 'components.ma.assetSelector.placeHolder', - defaultMessage: '!!!Select an asset', - }, -}) - -type Props = { - label?: string, - assets: Array, - assetsMetadata: Dict, - onSelect: (TokenEntry | void) => any, - selectedAsset: TokenEntry | null, - unselectEnabled: boolean, - intl: IntlShape, -} - -const AssetSelector = ({label, assets, assetsMetadata, onSelect, selectedAsset, unselectEnabled, intl}: Props) => { - const [expanded, setExpanded] = useState(false) - - const toggleExpand = () => { - LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut) - setExpanded(!expanded) - } - return ( - - toggleExpand()}> - {selectedAsset == null ? ( - {intl.formatMessage(messages.placeHolder)} - ) : ( - - {' '} - {getAssetDenominationOrId(assetsMetadata[selectedAsset.identifier])}{' '} - - )} - - {unselectEnabled && ( - onSelect()}> - - - )} - - - - - - {label != null && ( - - {label} - - )} - {expanded && ( - - { - onSelect(item) - toggleExpand() - }} - styles={assetListStyle} - assets={assets} - assetsMetadata={assetsMetadata} - /> - - )} - - ) -} - -export default injectIntl(AssetSelector) diff --git a/src/components/Send/AssetSelectorScreen/AssetSelectorScreen.js b/src/components/Send/AssetSelectorScreen/AssetSelectorScreen.js new file mode 100644 index 0000000000..6f3dc5e01e --- /dev/null +++ b/src/components/Send/AssetSelectorScreen/AssetSelectorScreen.js @@ -0,0 +1,150 @@ +/* eslint-disable react-native/no-inline-styles */ +// @flow + +import React from 'react' +import {defineMessages} from 'react-intl' +import {useIntl} from 'react-intl' +import {FlatList, TouchableOpacity, View} from 'react-native' +import {Avatar} from 'react-native-paper' +import {SafeAreaView} from 'react-native-safe-area-context' + +import AdaImage from '../../../assets/img/asset_ada.png' +import NoImage from '../../../assets/img/asset_no_image.png' +import type {TokenEntry} from '../../../crypto/MultiToken' +import globalMessages, {txLabels} from '../../../i18n/global-messages' +import {COLORS} from '../../../styles/config' +import {type Token} from '../../../types/HistoryTransaction' +import {decodeHexAscii, getAssetDenominationOrId} from '../../../utils/format' +import {Button, Spacer, Text, TextInput} from '../../UiKit' + +type Props = { + assetTokens: Array, + assetTokenInfos: Dict, + onSelect: (TokenEntry) => mixed, + onSelectAll: () => mixed, +} +export const AssetSelectorScreen = ({assetTokens, assetTokenInfos, onSelect, onSelectAll}: Props) => { + const intl = useIntl() + + const [filter, setFilter] = React.useState('') + const visibleAssetTokens = matches(assetTokenInfos, assetTokens, filter) + .sort((a: TokenEntry, b: TokenEntry) => (a.amount.isGreaterThan(b.amount) ? -1 : 1)) + .sort((a) => (getTokenInfo(assetTokenInfos, a).isDefault ? -1 : 1)) + + return ( + + + setFilter(normalize(text))} /> + + + {intl.formatMessage(globalMessages.assetsLabel)} + {intl.formatMessage(txLabels.amount)} + + + + +
+
+ + ( + + )} + ItemSeparatorComponent={() => } + bounces={false} + contentContainerStyle={{paddingTop: 16, paddingHorizontal: 16}} + keyExtractor={(item) => item.identifier} + /> + + +