diff --git a/apps/wallet-mobile/.storybook/storybook.requires.js b/apps/wallet-mobile/.storybook/storybook.requires.js
index 7dd7477910..41fde2e017 100644
--- a/apps/wallet-mobile/.storybook/storybook.requires.js
+++ b/apps/wallet-mobile/.storybook/storybook.requires.js
@@ -241,10 +241,9 @@ const getStories = () => {
"./src/features/Swap/common/LiquidityPool/LiquidityPool.stories.tsx": require("../src/features/Swap/common/LiquidityPool/LiquidityPool.stories.tsx"),
"./src/features/Swap/common/SelectPool/SelectPoolFromList/SelectPoolFromList.stories.tsx": require("../src/features/Swap/common/SelectPool/SelectPoolFromList/SelectPoolFromList.stories.tsx"),
"./src/features/Swap/common/ServiceUnavailable/ServiceUnavailable.stories.tsx": require("../src/features/Swap/common/ServiceUnavailable/ServiceUnavailable.stories.tsx"),
- "./src/features/Swap/useCases/ConfirmTxScreen/ConfirmTxScreen.stories.tsx": require("../src/features/Swap/useCases/ConfirmTxScreen/ConfirmTxScreen.stories.tsx"),
"./src/features/Swap/useCases/ConfirmTxScreen/ShowFailedTxScreen/ShowFailedTxScreen.stories.tsx": require("../src/features/Swap/useCases/ConfirmTxScreen/ShowFailedTxScreen/ShowFailedTxScreen.stories.tsx"),
"./src/features/Swap/useCases/ConfirmTxScreen/ShowSubmittedTxScreen/ShowSubmittedTxScreen.stories.tsx": require("../src/features/Swap/useCases/ConfirmTxScreen/ShowSubmittedTxScreen/ShowSubmittedTxScreen.stories.tsx"),
- "./src/features/Swap/useCases/ConfirmTxScreen/TransactionSummary.stories.tsx": require("../src/features/Swap/useCases/ConfirmTxScreen/TransactionSummary.stories.tsx"),
+ "./src/features/Swap/useCases/ReviewSwap/TransactionSummary.stories.tsx": require("../src/features/Swap/useCases/ReviewSwap/TransactionSummary.stories.tsx"),
"./src/features/Swap/useCases/ShowPreprodNoticeScreen/ShowPreprodNoticeScreen.stories.tsx": require("../src/features/Swap/useCases/ShowPreprodNoticeScreen/ShowPreprodNoticeScreen.stories.tsx"),
"./src/features/Swap/useCases/ShowSanchoNoticeScreen/ShowSanchoNoticeScreen.stories.tsx": require("../src/features/Swap/useCases/ShowSanchoNoticeScreen/ShowSanchoNoticeScreen.stories.tsx"),
"./src/features/Swap/useCases/StartOrderSwapScreen/CreateOrder/Actions/AmountActions/AmountActions.stories.tsx": require("../src/features/Swap/useCases/StartOrderSwapScreen/CreateOrder/Actions/AmountActions/AmountActions.stories.tsx"),
diff --git a/apps/wallet-mobile/src/features/ReviewTx/common/Accordion.tsx b/apps/wallet-mobile/src/features/ReviewTx/common/Accordion.tsx
index 92e7bfb3ac..7256cff2d0 100644
--- a/apps/wallet-mobile/src/features/ReviewTx/common/Accordion.tsx
+++ b/apps/wallet-mobile/src/features/ReviewTx/common/Accordion.tsx
@@ -1,6 +1,6 @@
import {useTheme} from '@yoroi/theme'
import * as React from 'react'
-import {Animated, LayoutAnimation, StyleSheet, Text, TouchableOpacity, View} from 'react-native'
+import {Animated, Easing, StyleSheet, Text, TouchableOpacity, View} from 'react-native'
import {Icon} from '../../../components/Icon'
@@ -10,12 +10,12 @@ export const Accordion = ({label, children}: {label: string; children: React.Rea
const animatedHeight = React.useRef(new Animated.Value(0)).current
const toggleSection = () => {
- LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut)
setIsOpen(!isOpen)
Animated.timing(animatedHeight, {
toValue: isOpen ? 0 : 1,
duration: 300,
useNativeDriver: false,
+ easing: Easing.ease,
}).start()
}
diff --git a/apps/wallet-mobile/src/features/ReviewTx/common/CopiableText.tsx b/apps/wallet-mobile/src/features/ReviewTx/common/CopiableText.tsx
index 9d2865f4c1..45dea2a1e6 100644
--- a/apps/wallet-mobile/src/features/ReviewTx/common/CopiableText.tsx
+++ b/apps/wallet-mobile/src/features/ReviewTx/common/CopiableText.tsx
@@ -1,25 +1,40 @@
import {useTheme} from '@yoroi/theme'
import * as React from 'react'
-import {StyleSheet, TouchableOpacity, View} from 'react-native'
+import {StyleSheet, TouchableOpacity, View, ViewStyle} from 'react-native'
import {useCopy} from '../../../components/Clipboard/ClipboardProvider'
import {Icon} from '../../../components/Icon'
-export const CopiableText = ({children, textToCopy}: {children: React.ReactNode; textToCopy: string}) => {
- const {styles, colors} = useStyles()
- const {copy} = useCopy()
+export const CopiableText = ({
+ children,
+ style,
+ textToCopy,
+}: {
+ children: React.ReactNode
+ style?: ViewStyle
+ textToCopy: string
+}) => {
+ const {styles} = useStyles()
return (
-
+
{children}
- copy({text: textToCopy})} activeOpacity={0.5}>
-
-
+
)
}
+export const CopyButton = ({textToCopy}: {textToCopy: string}) => {
+ const {colors} = useStyles()
+ const {copy} = useCopy()
+ return (
+ copy({text: textToCopy})} activeOpacity={0.5}>
+
+
+ )
+}
+
const useStyles = () => {
const {atoms, color} = useTheme()
const styles = StyleSheet.create({
diff --git a/apps/wallet-mobile/src/features/ReviewTx/common/ReviewTxProvider.tsx b/apps/wallet-mobile/src/features/ReviewTx/common/ReviewTxProvider.tsx
index 05dd6ec924..93f5632b61 100644
--- a/apps/wallet-mobile/src/features/ReviewTx/common/ReviewTxProvider.tsx
+++ b/apps/wallet-mobile/src/features/ReviewTx/common/ReviewTxProvider.tsx
@@ -24,6 +24,9 @@ export const ReviewTxProvider = ({
cborChanged: (cbor: ReviewTxState['cbor']) => dispatch({type: ReviewTxActionType.CborChanged, cbor}),
operationsChanged: (operations: ReviewTxState['operations']) =>
dispatch({type: ReviewTxActionType.OperationsChanged, operations}),
+ customReceiverTitleChanged: (customReceiverTitle: ReviewTxState['customReceiverTitle']) =>
+ dispatch({type: ReviewTxActionType.CustomReceiverTitleChanged, customReceiverTitle}),
+ detailsChanged: (details: ReviewTxState['details']) => dispatch({type: ReviewTxActionType.DetailsChanged, details}),
onSuccessChanged: (onSuccess: ReviewTxState['onSuccess']) =>
dispatch({type: ReviewTxActionType.OnSuccessChanged, onSuccess}),
onErrorChanged: (onError: ReviewTxState['onError']) => dispatch({type: ReviewTxActionType.OnErrorChanged, onError}),
@@ -55,6 +58,14 @@ const reviewTxReducer = (state: ReviewTxState, action: ReviewTxAction) => {
draft.operations = action.operations
break
+ case ReviewTxActionType.CustomReceiverTitleChanged:
+ draft.customReceiverTitle = action.customReceiverTitle
+ break
+
+ case ReviewTxActionType.DetailsChanged:
+ draft.details = action.details
+ break
+
case ReviewTxActionType.OnSuccessChanged:
draft.onSuccess = action.onSuccess
break
@@ -82,6 +93,14 @@ type ReviewTxAction =
type: ReviewTxActionType.OperationsChanged
operations: ReviewTxState['operations']
}
+ | {
+ type: ReviewTxActionType.CustomReceiverTitleChanged
+ customReceiverTitle: ReviewTxState['customReceiverTitle']
+ }
+ | {
+ type: ReviewTxActionType.DetailsChanged
+ details: ReviewTxState['details']
+ }
| {
type: ReviewTxActionType.OnSuccessChanged
onSuccess: ReviewTxState['onSuccess']
@@ -95,6 +114,8 @@ export type ReviewTxState = {
unsignedTx: YoroiUnsignedTx | null
cbor: string | null
operations: Array | null
+ customReceiverTitle: React.ReactNode | null
+ details: {title: string; component: React.ReactNode} | null
onSuccess: ((signedTx: YoroiSignedTx) => void) | null
onError: (() => void) | null
}
@@ -103,6 +124,8 @@ type ReviewTxActions = {
unsignedTxChanged: (unsignedTx: ReviewTxState['unsignedTx']) => void
cborChanged: (cbor: ReviewTxState['cbor']) => void
operationsChanged: (operations: ReviewTxState['operations']) => void
+ customReceiverTitleChanged: (customReceiverTitle: ReviewTxState['customReceiverTitle']) => void
+ detailsChanged: (details: ReviewTxState['details']) => void
onSuccessChanged: (onSuccess: ReviewTxState['onSuccess']) => void
onErrorChanged: (onError: ReviewTxState['onError']) => void
}
@@ -111,6 +134,8 @@ const defaultState: ReviewTxState = Object.freeze({
unsignedTx: null,
cbor: null,
operations: null,
+ customReceiverTitle: null,
+ details: null,
onSuccess: null,
onError: null,
})
@@ -124,6 +149,8 @@ const initialReviewTxContext: ReviewTxContext = {
unsignedTxChanged: missingInit,
cborChanged: missingInit,
operationsChanged: missingInit,
+ customReceiverTitleChanged: missingInit,
+ detailsChanged: missingInit,
onSuccessChanged: missingInit,
onErrorChanged: missingInit,
}
@@ -132,6 +159,8 @@ enum ReviewTxActionType {
UnsignedTxChanged = 'unsignedTxChanged',
CborChanged = 'cborChanged',
OperationsChanged = 'operationsChanged',
+ CustomReceiverTitleChanged = 'customReceiverTitleChanged',
+ DetailsChanged = 'detailsChanged',
OnSuccessChanged = 'onSuccessChanged',
OnErrorChanged = 'onErrorChanged',
}
diff --git a/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useAddressType.tsx b/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useAddressType.tsx
deleted file mode 100644
index 6e054df944..0000000000
--- a/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useAddressType.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import {useQuery} from 'react-query'
-
-import {getAddressType} from '../../../../yoroi-wallets/cardano/utils'
-
-export const useAddressType = (address: string) => {
- const query = useQuery(['useAddressType', address], () => getAddressType(address), {
- suspense: true,
- })
-
- if (query.data === undefined) throw new Error('invalid address type')
- return query.data
-}
diff --git a/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useFormattedMetadata.tsx b/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useFormattedMetadata.tsx
index 40e8e12323..7b67530d7c 100644
--- a/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useFormattedMetadata.tsx
+++ b/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useFormattedMetadata.tsx
@@ -3,10 +3,11 @@ import {TransactionBody} from '../types'
export const formatMetadata = (unsignedTx: YoroiUnsignedTx, txBody: TransactionBody) => {
const hash = txBody.auxiliary_data_hash ?? null
- const metadata = unsignedTx.metadata?.['674'] ?? null
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ const metadata = unsignedTx.metadata?.['674']?.['msg' as any] ?? null
return {
hash,
- metadata,
+ metadata: {msg: [JSON.parse(metadata)]},
}
}
diff --git a/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useFormattedTx.tsx b/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useFormattedTx.tsx
index ba1a3f87d9..91ef9f2d30 100644
--- a/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useFormattedTx.tsx
+++ b/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useFormattedTx.tsx
@@ -1,3 +1,5 @@
+// import {CredKind} from '@emurgo/csl-mobile-bridge'
+import {CredKind} from '@emurgo/cross-csl-core'
import {isNonNullable} from '@yoroi/common'
import {infoExtractName} from '@yoroi/portfolio'
import {Portfolio} from '@yoroi/types'
@@ -6,6 +8,7 @@ import {useQuery} from 'react-query'
import {YoroiWallet} from '../../../../yoroi-wallets/cardano/types'
import {deriveRewardAddressFromAddress} from '../../../../yoroi-wallets/cardano/utils'
+import {wrappedCsl} from '../../../../yoroi-wallets/cardano/wrappedCsl'
import {formatTokenWithText} from '../../../../yoroi-wallets/utils/format'
import {asQuantity} from '../../../../yoroi-wallets/utils/utils'
import {usePortfolioTokenInfos} from '../../../Portfolio/common/hooks/usePortfolioTokenInfos'
@@ -14,12 +17,13 @@ import {
FormattedFee,
FormattedInputs,
FormattedOutputs,
+ FormattedTx,
TransactionBody,
TransactionInputs,
TransactionOutputs,
} from '../types'
-export const useFormattedTx = (data: TransactionBody) => {
+export const useFormattedTx = (data: TransactionBody): FormattedTx => {
const {wallet} = useSelectedWallet()
const inputs = data?.inputs ?? []
@@ -93,10 +97,14 @@ const formatInputs = async (
inputs.map(async (input) => {
const receiveUTxO = getUtxoByTxIdAndIndex(wallet, input.transaction_id, input.index)
const address = receiveUTxO?.receiver
- const rewardAddress =
- address !== undefined ? await deriveRewardAddressFromAddress(address, wallet.networkManager.chainId) : null
const coin = receiveUTxO?.amount != null ? asQuantity(receiveUTxO.amount) : null
+ const addressKind = address != null ? await getAddressKind(address) : null
+ const rewardAddress =
+ address != null && addressKind === CredKind.Key
+ ? await deriveAddress(address, wallet.networkManager.chainId)
+ : null
+
const primaryAssets =
coin != null
? [
@@ -130,6 +138,7 @@ const formatInputs = async (
return {
assets: [...primaryAssets, ...multiAssets].filter(isNonNullable),
address,
+ addressKind: addressKind ?? null,
rewardAddress,
ownAddress: address != null && isOwnedAddress(wallet, address),
txIndex: input.index,
@@ -147,9 +156,12 @@ const formatOutputs = async (
return Promise.all(
outputs.map(async (output) => {
const address = output.address
- const rewardAddress = await deriveRewardAddressFromAddress(address, wallet.networkManager.chainId)
const coin = asQuantity(output.amount.coin)
+ const addressKind = await getAddressKind(address)
+ const rewardAddress =
+ addressKind === CredKind.Key ? await deriveAddress(address, wallet.networkManager.chainId) : null
+
const primaryAssets = [
{
tokenInfo: wallet.portfolioPrimaryTokenInfo,
@@ -183,6 +195,7 @@ const formatOutputs = async (
return {
assets,
address,
+ addressKind,
rewardAddress,
ownAddress: isOwnedAddress(wallet, address),
}
@@ -202,6 +215,26 @@ export const formatFee = (wallet: YoroiWallet, data: TransactionBody): Formatted
}
}
+const deriveAddress = async (address: string, chainId: number) => {
+ try {
+ return await deriveRewardAddressFromAddress(address, chainId)
+ } catch {
+ return null
+ }
+}
+
+const getAddressKind = async (addressBech32: string): Promise => {
+ const {csl, release} = wrappedCsl()
+
+ try {
+ const address = await csl.Address.fromBech32(addressBech32)
+ const addressKind = await (await address.paymentCred())?.kind()
+ return addressKind ?? null
+ } finally {
+ release()
+ }
+}
+
const getUtxoByTxIdAndIndex = (wallet: YoroiWallet, txId: string, index: number) => {
return wallet.utxos.find((u) => u.tx_hash === txId && u.tx_index === index)
}
diff --git a/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useStrings.tsx b/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useStrings.tsx
index 9914016ec2..b6e245d124 100644
--- a/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useStrings.tsx
+++ b/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useStrings.tsx
@@ -11,6 +11,9 @@ export const useStrings = () => {
title: intl.formatMessage(messages.title),
utxosTab: intl.formatMessage(messages.utxosTab),
overviewTab: intl.formatMessage(messages.overviewTab),
+ metadataTab: intl.formatMessage(messages.metadataTab),
+ metadataHash: intl.formatMessage(messages.metadataHash),
+ metadataJsonLabel: intl.formatMessage(messages.metadataJsonLabel),
walletLabel: intl.formatMessage(messages.walletLabel),
feeLabel: intl.formatMessage(messages.feeLabel),
myWalletLabel: intl.formatMessage(messages.myWalletLabel),
@@ -52,6 +55,18 @@ const messages = defineMessages({
id: 'txReview.tabLabel.overview',
defaultMessage: '!!!Overview',
},
+ metadataTab: {
+ id: 'txReview.tabLabel.metadataTab',
+ defaultMessage: '!!!Metadata',
+ },
+ metadataHash: {
+ id: 'txReview.metadata.metadataHash',
+ defaultMessage: '!!!Metadata hash',
+ },
+ metadataJsonLabel: {
+ id: 'txReview.metadata.metadataJsonLabel',
+ defaultMessage: '!!!Metadata',
+ },
walletLabel: {
id: 'txReview.overview.wallet',
defaultMessage: '!!!Wallet',
diff --git a/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useTxBody.tsx b/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useTxBody.tsx
index 9de33bb075..75588bd47a 100644
--- a/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useTxBody.tsx
+++ b/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useTxBody.tsx
@@ -2,8 +2,9 @@ import {useQuery} from 'react-query'
import {wrappedCsl} from '../../../../yoroi-wallets/cardano/wrappedCsl'
import {YoroiUnsignedTx} from '../../../../yoroi-wallets/types/yoroi'
+import {TransactionBody} from '../types'
-export const useTxBody = ({cbor, unsignedTx}: {cbor?: string; unsignedTx?: YoroiUnsignedTx}) => {
+export const useTxBody = ({cbor, unsignedTx}: {cbor?: string; unsignedTx?: YoroiUnsignedTx}): TransactionBody => {
const query = useQuery(
['useTxBody', cbor, unsignedTx],
async () => {
diff --git a/apps/wallet-mobile/src/features/ReviewTx/common/types.ts b/apps/wallet-mobile/src/features/ReviewTx/common/types.ts
index 45744a4cf6..74cb9b2451 100644
--- a/apps/wallet-mobile/src/features/ReviewTx/common/types.ts
+++ b/apps/wallet-mobile/src/features/ReviewTx/common/types.ts
@@ -3,6 +3,7 @@ import {
TransactionInputsJSON,
TransactionOutputsJSON,
} from '@emurgo/cardano-serialization-lib-nodejs'
+import {CredKind} from '@emurgo/cross-csl-core'
import {Balance, Portfolio} from '@yoroi/types'
export type TransactionBody = TransactionBodyJSON
@@ -18,6 +19,7 @@ export type FormattedInput = {
isPrimary: boolean
}>
address: string | undefined
+ addressKind: CredKind | null
rewardAddress: string | null
ownAddress: boolean
txIndex: number
@@ -35,6 +37,7 @@ export type FormattedOutput = {
isPrimary: boolean
}>
address: string
+ addressKind: CredKind | null
rewardAddress: string | null
ownAddress: boolean
}
@@ -54,3 +57,8 @@ export type FormattedTx = {
outputs: FormattedOutputs
fee: FormattedFee
}
+
+export type Metadata = {
+ json: string | null
+ hash: string | null
+}
diff --git a/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/Metadata/MetadataTab.tsx b/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/Metadata/MetadataTab.tsx
index fb22ac5bed..c60e4d1c60 100644
--- a/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/Metadata/MetadataTab.tsx
+++ b/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/Metadata/MetadataTab.tsx
@@ -8,7 +8,7 @@ import {useStrings} from '../../../common/hooks/useStrings'
type Props = {
hash: string | null
- metadata: string | null
+ metadata: {msg: Array} | null
}
export const MetadataTab = ({metadata, hash}: Props) => {
diff --git a/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/Overview/OverviewTab.tsx b/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/Overview/OverviewTab.tsx
index dc1039784a..cd04aeeb68 100644
--- a/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/Overview/OverviewTab.tsx
+++ b/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/Overview/OverviewTab.tsx
@@ -1,5 +1,6 @@
// 🚧 TODO: grouping by staking address 🚧
+import {CredKind} from '@emurgo/cross-csl-core'
import {Blockies} from '@yoroi/identicon'
import {useTheme} from '@yoroi/theme'
import * as React from 'react'
@@ -7,6 +8,7 @@ import {Linking, StyleSheet, Text, TouchableOpacity, View} from 'react-native'
import {Divider} from '../../../../../components/Divider/Divider'
import {Icon} from '../../../../../components/Icon'
+import {useModal} from '../../../../../components/Modal/ModalContext'
import {Space} from '../../../../../components/Space/Space'
import {formatTokenWithText} from '../../../../../yoroi-wallets/utils/format'
import {Quantities} from '../../../../../yoroi-wallets/utils/utils'
@@ -14,13 +16,20 @@ import {useSelectedWallet} from '../../../../WalletManager/common/hooks/useSelec
import {useWalletManager} from '../../../../WalletManager/context/WalletManagerProvider'
import {Accordion} from '../../../common/Accordion'
import {CopiableText} from '../../../common/CopiableText'
-import {useAddressType} from '../../../common/hooks/useAddressType'
import {useStrings} from '../../../common/hooks/useStrings'
-import {ReviewTxState} from '../../../common/ReviewTxProvider'
+import {ReviewTxState, useReviewTx} from '../../../common/ReviewTxProvider'
import {TokenItem} from '../../../common/TokenItem'
import {FormattedOutputs, FormattedTx} from '../../../common/types'
-export const OverviewTab = ({tx, operations}: {tx: FormattedTx; operations: ReviewTxState['operations']}) => {
+export const OverviewTab = ({
+ tx,
+ operations,
+ details,
+}: {
+ tx: FormattedTx
+ operations: ReviewTxState['operations']
+ details: ReviewTxState['details']
+}) => {
const {styles} = useStyles()
const notOwnedOutputs = React.useMemo(() => tx.outputs.filter((output) => !output.ownAddress), [tx.outputs])
@@ -37,6 +46,8 @@ export const OverviewTab = ({tx, operations}: {tx: FormattedTx; operations: Revi
+
+
)
}
@@ -94,7 +105,7 @@ const SenderSection = ({
}) => {
const strings = useStrings()
const {styles} = useStyles()
- const address = ownedOutputs[0]?.rewardAddress ?? ownedOutputs[0]?.address
+ const address = ownedOutputs[0]?.rewardAddress ?? ownedOutputs[0]?.address ?? '-'
return (
@@ -172,24 +183,30 @@ const SenderSectionLabel = () => {
}
const ReceiverSection = ({notOwnedOutputs}: {notOwnedOutputs: FormattedOutputs}) => {
- const address = notOwnedOutputs[0]?.rewardAddress ?? notOwnedOutputs[0]?.address
+ const address = notOwnedOutputs[0]?.rewardAddress ?? notOwnedOutputs[0]?.address ?? '-'
const {styles} = useStyles()
const strings = useStrings()
- const addressType = useAddressType(address)
- const isScriptAddress = addressType === 'script'
+ const {customReceiverTitle} = useReviewTx()
return (
<>
- {isScriptAddress ? strings.receiveToScriptLabel : strings.receiveToLabel}:
+
+ {notOwnedOutputs[0]?.addressKind === CredKind.Script && customReceiverTitle == null
+ ? strings.receiveToScriptLabel
+ : strings.receiveToLabel}
+ :
+
-
-
- {address}
-
-
+ {customReceiverTitle ?? (
+
+
+ {address}
+
+
+ )}
>
)
@@ -221,6 +238,29 @@ const OperationsSection = ({operations}: {operations: ReviewTxState['operations'
)
}
+const Details = ({details}: {details: ReviewTxState['details']}) => {
+ const {openModal} = useModal()
+ const {styles} = useStyles()
+
+ if (details == null) return null
+
+ const handleOnPress = () => {
+ openModal(details.title ?? '', {details.component}, 550)
+ }
+
+ return (
+
+
+
+
+
+ {details?.title}
+
+
+
+ )
+}
+
const useStyles = () => {
const {atoms, color} = useTheme()
const styles = StyleSheet.create({
@@ -290,6 +330,18 @@ const useStyles = () => {
...atoms.body_2_md_regular,
color: color.text_gray_medium,
},
+ detailsRow: {
+ ...atoms.flex_1,
+ ...atoms.flex_row,
+ ...atoms.justify_end,
+ },
+ details: {
+ ...atoms.px_lg,
+ },
+ detailsButton: {
+ ...atoms.body_2_md_medium,
+ color: color.text_primary_medium,
+ },
})
const colors = {
diff --git a/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/ReviewTxScreen.tsx b/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/ReviewTxScreen.tsx
index 035dc332c2..9b0550327d 100644
--- a/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/ReviewTxScreen.tsx
+++ b/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/ReviewTxScreen.tsx
@@ -1,15 +1,28 @@
import {createMaterialTopTabNavigator, MaterialTopTabBarProps} from '@react-navigation/material-top-tabs'
import {useTheme} from '@yoroi/theme'
import * as React from 'react'
-import {FlatList, ScrollView, StyleSheet, Text, TouchableOpacity, TouchableOpacityProps, View} from 'react-native'
+import {
+ FlatList,
+ StyleProp,
+ StyleSheet,
+ Text,
+ TouchableOpacity,
+ TouchableOpacityProps,
+ View,
+ ViewStyle,
+} from 'react-native'
import {Button} from '../../../../components/Button/Button'
import {SafeArea} from '../../../../components/SafeArea'
+import {ScrollView} from '../../../../components/ScrollView/ScrollView'
+import {isEmptyString} from '../../../../kernel/utils'
+import {formatMetadata} from '../../common/hooks/useFormattedMetadata'
import {useFormattedTx} from '../../common/hooks/useFormattedTx'
import {useOnConfirm} from '../../common/hooks/useOnConfirm'
import {useStrings} from '../../common/hooks/useStrings'
import {useTxBody} from '../../common/hooks/useTxBody'
import {useReviewTx} from '../../common/ReviewTxProvider'
+import {MetadataTab} from './Metadata/MetadataTab'
import {OverviewTab} from './Overview/OverviewTab'
import {UTxOsTab} from './UTxOs/UTxOsTab'
@@ -18,7 +31,7 @@ const MaterialTab = createMaterialTopTabNavigator()
export const ReviewTxScreen = () => {
const {styles} = useStyles()
const strings = useStrings()
- const {unsignedTx, operations, onSuccess, onError} = useReviewTx()
+ const {unsignedTx, operations, details, onSuccess, onError} = useReviewTx()
if (unsignedTx === null) throw new Error('ReviewTxScreen: missing unsignedTx')
@@ -28,21 +41,27 @@ export const ReviewTxScreen = () => {
onError,
})
- // TODO: add cbor arguments
+ // TODO: apply cbor
const txBody = useTxBody({unsignedTx})
const formatedTx = useFormattedTx(txBody)
+ const formattedMetadata = formatMetadata(unsignedTx, txBody)
- const OverViewTabMemo = React.memo(() => )
- const UTxOsTabMemo = React.memo(() => )
+ const tabsData = [
+ [strings.overviewTab, 'overview'],
+ [strings.utxosTab, 'utxos'],
+ ]
+
+ if (!isEmptyString(formattedMetadata.hash) && formattedMetadata.metadata != null)
+ tabsData.push([strings.metadataTab, 'metadata'])
return (
-
+ }>
{() => (
/* TODO: make scrollview general to use button border */
-
+
)}
@@ -51,7 +70,16 @@ export const ReviewTxScreen = () => {
{() => (
/* TODO: make scrollview general to use button border */
-
+
+
+ )}
+
+
+
+ {() => (
+ /* TODO: make scrollview general to use button border */
+
+
)}
@@ -64,16 +92,12 @@ export const ReviewTxScreen = () => {
)
}
-const TabBar = ({navigation, state}: MaterialTopTabBarProps) => {
+const TabBar = ({navigation, state, tabsData}: MaterialTopTabBarProps & {tabsData: Array>}) => {
const {styles} = useStyles()
- const strings = useStrings()
return (
(
navigation.navigate(key)} />
)}
@@ -105,9 +129,9 @@ export const Tab = ({
)
}
-const Actions = ({children}: {children: React.ReactNode}) => {
+const Actions = ({children, style}: {children: React.ReactNode; style?: StyleProp}) => {
const {styles} = useStyles()
- return {children}
+ return {children}
}
const useStyles = () => {
@@ -154,5 +178,8 @@ const useStyles = () => {
},
})
- return {styles} as const
+ const colors = {
+ lightGray: color.gray_200,
+ }
+ return {styles, colors} as const
}
diff --git a/apps/wallet-mobile/src/features/Settings/ManageCollateral/strings.ts b/apps/wallet-mobile/src/features/Settings/ManageCollateral/strings.ts
deleted file mode 100644
index 0b5fc162c0..0000000000
--- a/apps/wallet-mobile/src/features/Settings/ManageCollateral/strings.ts
+++ /dev/null
@@ -1,77 +0,0 @@
-import {defineMessages, useIntl} from 'react-intl'
-
-export const useStrings = () => {
- const intl = useIntl()
- return {
- lockedAsCollateral: intl.formatMessage(messages.lockedAsCollateral),
- removeCollateral: intl.formatMessage(messages.removeCollateral),
- collateralSpent: intl.formatMessage(messages.collateralSpent),
- generateCollateral: intl.formatMessage(messages.generateCollateral),
- notEnoughFundsAlertTitle: intl.formatMessage(messages.notEnoughFundsAlertTitle),
- notEnoughFundsAlertMessage: intl.formatMessage(messages.notEnoughFundsAlertMessage),
- notEnoughFundsAlertOK: intl.formatMessage(messages.notEnoughFundsAlertOK),
- collateralInfoModalLabel: intl.formatMessage(messages.collateralInfoModalLabel),
- collateralInfoModalTitle: intl.formatMessage(messages.collateralInfoModalTitle),
- collateralInfoModalText: intl.formatMessage(messages.collateralInfoModalText),
- initialCollateralInfoModalTitle: intl.formatMessage(messages.initialCollateralInfoModalTitle),
- initialCollateralInfoModalText: intl.formatMessage(messages.initialCollateralInfoModalText),
- initialCollateralInfoModalButton: intl.formatMessage(messages.initialCollateralInfoModalButton),
- }
-}
-
-const messages = defineMessages({
- lockedAsCollateral: {
- id: 'components.settings.collateral.lockedAsCollateral',
- defaultMessage: '!!!Locked as collateral',
- },
- removeCollateral: {
- id: 'components.settings.collateral.removeCollateral',
- defaultMessage: '!!!If you want to return the amount locked as collateral to your balance press the remove icon',
- },
- collateralSpent: {
- id: 'components.settings.collateral.collateralSpent',
- defaultMessage: '!!!Your collateral is gone, please generate new collateral',
- },
- generateCollateral: {
- id: 'components.settings.collateral.generateCollateral',
- defaultMessage: '!!!Generate collateral',
- },
- notEnoughFundsAlertTitle: {
- id: 'components.settings.collateral.notEnoughFundsAlertTitle',
- defaultMessage: '!!!Not enough funds',
- },
- notEnoughFundsAlertMessage: {
- id: 'components.settings.collateral.notEnoughFundsAlertMessage',
- defaultMessage: '!!!We could not find enough funds in this wallet to create collateral.',
- },
- notEnoughFundsAlertOK: {
- id: 'components.settings.collateral.notEnoughFundsAlertOK',
- defaultMessage: '!!!OK',
- },
- collateralInfoModalLabel: {
- id: 'components.settings.collateral.collateralInfoModalLabel',
- defaultMessage: '!!!Collateral creation',
- },
- collateralInfoModalTitle: {
- id: 'components.settings.collateral.collateralInfoModalTitle',
- defaultMessage: '!!!What is collateral?',
- },
- collateralInfoModalText: {
- id: 'components.settings.collateral.collateralInfoModalText',
- defaultMessage:
- '!!!The collateral mechanism is an important feature that has been designed to ensure successful smart contract execution. It is used to guarantee that Cardano nodes are compensated for their work in case phase-2 validation fails.',
- },
- initialCollateralInfoModalTitle: {
- id: 'components.settings.collateral.initialCollateralInfoModalTitle',
- defaultMessage: '!!!Collateral creation',
- },
- initialCollateralInfoModalText: {
- id: 'components.settings.collateral.initialCollateralInfoModalText',
- defaultMessage:
- '!!!The collateral mechanism is designed to ensure smart contracts on Cardano execute successfully. It guarantees that nodes are compensated for their work if a contract fails during validation.',
- },
- initialCollateralInfoModalButton: {
- id: 'components.settings.collateral.initialCollateralInfoModalButton',
- defaultMessage: '!!!Add collateral',
- },
-})
diff --git a/apps/wallet-mobile/src/features/Swap/common/navigation.ts b/apps/wallet-mobile/src/features/Swap/common/navigation.ts
index 452adf22a6..813aa4a5b0 100644
--- a/apps/wallet-mobile/src/features/Swap/common/navigation.ts
+++ b/apps/wallet-mobile/src/features/Swap/common/navigation.ts
@@ -13,7 +13,6 @@ export const useNavigateTo = () => {
selectBuyToken: () => swapNavigation.navigate('swap-select-buy-token'),
selectSellToken: () => swapNavigation.navigate('swap-select-sell-token'),
startSwap: () => swapNavigation.navigate('swap-start-swap', {screen: 'token-swap'}),
- confirmTx: () => swapNavigation.navigate('swap-confirm-tx'),
reviewSwap: () => swapNavigation.navigate('swap-review'),
submittedTx: (txId: string) => swapNavigation.navigate('swap-submitted-tx', {txId}),
failedTx: () => swapNavigation.navigate('swap-failed-tx'),
diff --git a/apps/wallet-mobile/src/features/Swap/common/strings.ts b/apps/wallet-mobile/src/features/Swap/common/strings.ts
index 404c2308f6..2fc173ebbb 100644
--- a/apps/wallet-mobile/src/features/Swap/common/strings.ts
+++ b/apps/wallet-mobile/src/features/Swap/common/strings.ts
@@ -57,7 +57,7 @@ export const useStrings = () => {
spendingPassword: intl.formatMessage(messages.spendingPassword),
sign: intl.formatMessage(messages.sign),
searchTokens: intl.formatMessage(messages.searchTokens),
- confirm: intl.formatMessage(messages.confirm),
+ next: intl.formatMessage(messages.next),
chooseConnectionMethod: intl.formatMessage(messages.chooseConnectionMethod),
selecteAssetTitle: intl.formatMessage(messages.selectAssetTitle),
tokens: (qty: number) => intl.formatMessage(globalMessages.tokens, {qty}),
@@ -578,9 +578,9 @@ const messages = defineMessages({
id: 'components.send.selectasset.title',
defaultMessage: '!!!Select asset',
},
- confirm: {
- id: 'components.send.confirmscreen.confirmButton',
- defaultMessage: '!!!Confirm',
+ next: {
+ id: 'global.next',
+ defaultMessage: '!!!Next',
},
assignCollateral: {
id: 'components.send.confirmscreen.assignCollateral',
diff --git a/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/ConfirmTx.tsx b/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/ConfirmTx.tsx
deleted file mode 100644
index 6db51ff690..0000000000
--- a/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/ConfirmTx.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import React from 'react'
-import {ErrorBoundary} from 'react-error-boundary'
-
-import {ModalError} from '../../../../components/ModalError/ModalError'
-import {YoroiWallet} from '../../../../yoroi-wallets/cardano/types'
-import {YoroiSignedTx, YoroiUnsignedTx} from '../../../../yoroi-wallets/types/yoroi'
-import {useSelectedWallet} from '../../../WalletManager/common/hooks/useSelectedWallet'
-import {ConfirmTxWithHW} from './ConfirmTxWithHW'
-import {ConfirmTxWithPassword} from './ConfirmTxWithPassword'
-
-type Props = {
- wallet: YoroiWallet
- unsignedTx: YoroiUnsignedTx
- onCancel: () => void
- onSuccess: (signedTx: YoroiSignedTx) => void
-}
-
-export const ConfirmTx = ({wallet, onSuccess, onCancel, unsignedTx}: Props) => {
- const {meta} = useSelectedWallet()
- return meta.isHW ? (
- (
-
- )}
- >
-
-
- ) : (
-
- )
-}
diff --git a/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/ConfirmTxScreen.stories.tsx b/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/ConfirmTxScreen.stories.tsx
deleted file mode 100644
index 5236d812dd..0000000000
--- a/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/ConfirmTxScreen.stories.tsx
+++ /dev/null
@@ -1,107 +0,0 @@
-import {storiesOf} from '@storybook/react-native'
-import {mockSwapManager, mockSwapStateDefault, orderMocks, SwapProvider} from '@yoroi/swap'
-import React from 'react'
-
-import {rootStorage} from '../../../../kernel/storage/rootStorage'
-import {mocks as walletMocks} from '../../../../yoroi-wallets/mocks/wallet'
-import {WalletManagerProviderMock} from '../../../../yoroi-wallets/mocks/WalletManagerProviderMock'
-import {buildPortfolioTokenManagers} from '../../../Portfolio/common/helpers/build-token-managers'
-import {WalletManagerProvider} from '../../../WalletManager/context/WalletManagerProvider'
-import {buildNetworkManagers} from '../../../WalletManager/network-manager/network-manager'
-import {WalletManager} from '../../../WalletManager/wallet-manager'
-import {mocks} from '../../common/mocks'
-import {SwapFormProvider} from '../../common/SwapFormProvider'
-import {ConfirmTxScreen} from './ConfirmTxScreen'
-
-// TODO: should be mocked
-const {tokenManagers} = buildPortfolioTokenManagers()
-const networkManagers = buildNetworkManagers({tokenManagers})
-const walletManager = new WalletManager({
- rootStorage,
- networkManagers,
-})
-
-storiesOf('Swap ConfirmTxScreen', module) //
- .add('swap confirm tx: with password', () => {
- return
- })
- .add('swap confirm tx: with os', () => {
- return
- })
- .add('swap confirm tx: with hw', () => {
- return
- })
-
-const ConfirmTxWithPasswordScreen = () => {
- return (
-
-
-
-
-
-
-
- )
-}
-const ConfirmTxWithOSScreen = () => {
- return (
-
-
-
-
-
-
-
-
-
- )
-}
-const ConfirmTxWithHWScreen = () => {
- return (
-
-
-
-
-
-
-
- )
-}
-
-const calculation = orderMocks.mockedOrderCalculations1[0]
diff --git a/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/ConfirmTxScreen.tsx b/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/ConfirmTxScreen.tsx
deleted file mode 100644
index 7a6d3281a8..0000000000
--- a/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/ConfirmTxScreen.tsx
+++ /dev/null
@@ -1,200 +0,0 @@
-import {useSwap} from '@yoroi/swap'
-import {useTheme} from '@yoroi/theme'
-import React from 'react'
-import {InteractionManager, StyleSheet, useWindowDimensions, View, ViewProps} from 'react-native'
-import {ScrollView} from 'react-native-gesture-handler'
-import {SafeAreaView} from 'react-native-safe-area-context'
-
-import {Button} from '../../../../components/Button/Button'
-import {KeyboardAvoidingView} from '../../../../components/KeyboardAvoidingView/KeyboardAvoidingView'
-import {LoadingOverlay} from '../../../../components/LoadingOverlay/LoadingOverlay'
-import {useModal} from '../../../../components/Modal/ModalContext'
-import {Spacer} from '../../../../components/Spacer/Spacer'
-import {useMetrics} from '../../../../kernel/metrics/metricsManager'
-import {useSignAndSubmitTx} from '../../../../yoroi-wallets/hooks'
-import {YoroiSignedTx} from '../../../../yoroi-wallets/types/yoroi'
-import {asQuantity, Quantities} from '../../../../yoroi-wallets/utils/utils'
-import {useAuthOsWithEasyConfirmation} from '../../../Auth/common/hooks'
-import {useSelectedWallet} from '../../../WalletManager/common/hooks/useSelectedWallet'
-import {useNavigateTo} from '../../common/navigation'
-import {useStrings} from '../../common/strings'
-import {ConfirmTx} from './ConfirmTx'
-import {TransactionSummary} from './TransactionSummary'
-
-const BOTTOM_ACTION_SECTION = 220
-
-export const ConfirmTxScreen = () => {
- const [contentHeight, setContentHeight] = React.useState(0)
- const strings = useStrings()
- const styles = useStyles()
- const {wallet, meta} = useSelectedWallet()
- const navigate = useNavigateTo()
- const {track} = useMetrics()
- const {openModal, closeModal} = useModal()
- const {height: deviceHeight} = useWindowDimensions()
- const signedTxRef = React.useRef(null)
-
- const {unsignedTx, orderData} = useSwap()
- const sellTokenInfo = orderData.amounts.sell?.info
- const buyTokenInfo = orderData.amounts.buy?.info
-
- const minReceived = Quantities.denominated(
- asQuantity(orderData.selectedPoolCalculation?.buyAmountWithSlippage?.quantity.toString() ?? 0),
- buyTokenInfo?.decimals ?? 0,
- )
-
- const couldReceiveNoAssets = Quantities.isZero(minReceived)
-
- const {authWithOs, isLoading: authenticating} = useAuthOsWithEasyConfirmation(
- {id: wallet.id},
- {onSuccess: (rootKey) => signAndSubmitTx({unsignedTx, rootKey})},
- )
-
- const trackSwapOrderSubmitted = () => {
- if (orderData.selectedPoolCalculation === undefined) return
- track.swapOrderSubmitted({
- from_asset: [
- {
- asset_name: sellTokenInfo?.name,
- asset_ticker: sellTokenInfo?.ticker,
- policy_id: sellTokenInfo?.id.split('.')[0],
- },
- ],
- to_asset: [
- {asset_name: buyTokenInfo?.name, asset_ticker: buyTokenInfo?.ticker, policy_id: buyTokenInfo?.id.split('.')[0]},
- ],
- order_type: orderData.type,
- slippage_tolerance: orderData.slippage,
- from_amount: orderData.amounts.sell?.quantity.toString() ?? '0',
- to_amount: orderData.amounts.buy?.quantity.toString() ?? '0',
- pool_source: orderData.selectedPoolCalculation.pool.provider,
- swap_fees: Number(orderData.selectedPoolCalculation.cost.batcherFee),
- })
- }
-
- const {signAndSubmitTx, isLoading: processingTx} = useSignAndSubmitTx(
- {wallet},
- {
- signTx: {
- useErrorBoundary: true,
- onSuccess: (signedTx) => {
- signedTxRef.current = signedTx
- },
- },
- submitTx: {
- onSuccess: () => {
- trackSwapOrderSubmitted()
- navigate.submittedTx(signedTxRef.current?.signedTx.id ?? '')
- },
- onError: () => {
- navigate.failedTx()
- },
- useErrorBoundary: true,
- },
- },
- )
-
- const onPasswordTxSuccess = (signedTx: YoroiSignedTx) => {
- trackSwapOrderSubmitted()
- closeModal()
- InteractionManager.runAfterInteractions(() => {
- navigate.submittedTx(signedTx.signedTx.id)
- })
- }
-
- const txIsLoading = authenticating || processingTx
- const isButtonDisabled = txIsLoading || couldReceiveNoAssets
-
- return (
-
-
-
-
- {
- const {height} = event.nativeEvent.layout
- setContentHeight(height + BOTTOM_ACTION_SECTION)
- }}
- >
-
-
-
-
-
-
-
-
-
-
-
- )
-}
-
-const Actions = ({style, ...props}: ViewProps) => {
- const styles = useStyles()
- return
-}
-
-const useStyles = () => {
- const {color, atoms} = useTheme()
- const styles = StyleSheet.create({
- root: {
- flex: 1,
- backgroundColor: color.bg_color_max,
- paddingTop: 16,
- },
- container: {
- flex: 1,
- backgroundColor: color.bg_color_max,
- display: 'flex',
- flexDirection: 'column',
- justifyContent: 'space-between',
- },
- actions: {
- padding: 16,
- backgroundColor: color.bg_color_max,
- },
- modalContent: {
- flex: 1,
- alignSelf: 'stretch',
- ...atoms.px_lg,
- },
- scroll: {
- paddingHorizontal: 16,
- },
- actionBorder: {
- borderTopWidth: 1,
- borderTopColor: color.gray_200,
- },
- })
- return styles
-}
diff --git a/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/ConfirmTxWithHW.tsx b/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/ConfirmTxWithHW.tsx
deleted file mode 100644
index a962da3a2c..0000000000
--- a/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/ConfirmTxWithHW.tsx
+++ /dev/null
@@ -1,104 +0,0 @@
-import {useTheme} from '@yoroi/theme'
-import {HW} from '@yoroi/types'
-import React, {useState} from 'react'
-import {ScrollView, StyleSheet, View} from 'react-native'
-
-import {Text} from '../../../../components/Text'
-import {LedgerConnect} from '../../../../legacy/HW'
-import {YoroiWallet} from '../../../../yoroi-wallets/cardano/types'
-import {useSignWithHwAndSubmitTx} from '../../../../yoroi-wallets/hooks'
-import {withBLE, withUSB} from '../../../../yoroi-wallets/hw/hwWallet'
-import {YoroiSignedTx, YoroiUnsignedTx} from '../../../../yoroi-wallets/types/yoroi'
-import {useSelectedWallet} from '../../../WalletManager/common/hooks/useSelectedWallet'
-import {useWalletManager} from '../../../WalletManager/context/WalletManagerProvider'
-import {ActivityIndicator} from '../../common/ConfirmRawTx/ActivityIndicator'
-import {useStrings} from '../../common/strings'
-import {LedgerTransportSwitch} from './LedgerTransportSwitch'
-
-type Props = {
- wallet: YoroiWallet
- unsignedTx: YoroiUnsignedTx
- onCancel?: () => void
- onSuccess: (signedTx: YoroiSignedTx) => void
-}
-
-type TransportType = 'USB' | 'BLE'
-type Step = 'select-transport' | 'connect-transport' | 'loading'
-
-export const ConfirmTxWithHW = ({onSuccess, wallet, unsignedTx}: Props) => {
- const styles = useStyles()
- const {meta} = useSelectedWallet()
- const {walletManager} = useWalletManager()
- const [transportType, setTransportType] = React.useState('USB')
- const [step, setStep] = useState('select-transport')
- const strings = useStrings()
-
- const {signAndSubmitTx} = useSignWithHwAndSubmitTx(
- {wallet}, //
- {signTx: {onSuccess}},
- )
-
- const onSelectTransport = (transportType: TransportType) => {
- setTransportType(transportType)
- setStep('connect-transport')
- }
-
- const onConnectBLE = (deviceId: string) => {
- setStep('loading')
- const hwDeviceInfo = withBLE(meta, deviceId)
- walletManager.updateWalletHWDeviceInfo(meta.id, hwDeviceInfo)
- signAndSubmitTx({unsignedTx, useUSB: false, hwDeviceInfo})
- }
-
- const onConnectUSB = (deviceObj: HW.DeviceObj) => {
- setStep('loading')
- const hwDeviceInfo = withUSB(meta, deviceObj)
- walletManager.updateWalletHWDeviceInfo(meta.id, hwDeviceInfo)
- signAndSubmitTx({unsignedTx, useUSB: true, hwDeviceInfo})
- }
-
- if (step === 'select-transport') {
- return (
- onSelectTransport('BLE')}
- onSelectUSB={() => onSelectTransport('USB')}
- />
- )
- }
-
- if (step === 'connect-transport') {
- return (
-
-
-
- )
- }
-
- return (
-
-
-
- {strings.continueOnLedger}
-
- )
-}
-
-const useStyles = () => {
- const {color, atoms} = useTheme()
- const styles = StyleSheet.create({
- container: {
- ...atoms.flex_1,
- ...atoms.align_center,
- ...atoms.justify_center,
- ...atoms.gap_2xl,
- ...atoms.px_lg,
- },
- text: {
- ...atoms.body_1_lg_regular,
- ...atoms.text_center,
- color: color.text_gray_medium,
- },
- })
-
- return styles
-}
diff --git a/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/ConfirmTxWithPassword.tsx b/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/ConfirmTxWithPassword.tsx
deleted file mode 100644
index 9f587b995f..0000000000
--- a/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/ConfirmTxWithPassword.tsx
+++ /dev/null
@@ -1,74 +0,0 @@
-import {App} from '@yoroi/types'
-import React from 'react'
-
-import {YoroiWallet} from '../../../../yoroi-wallets/cardano/types'
-import {useSignWithPasswordAndSubmitTx} from '../../../../yoroi-wallets/hooks'
-import {YoroiSignedTx, YoroiUnsignedTx} from '../../../../yoroi-wallets/types/yoroi'
-import {ConfirmWithSpendingPassword} from '../../common/ConfirmWithSpendingPassword'
-import {ErrorData} from '../../common/ConfirmWithSpendingPassword/ConfirmWithSpendingPassword'
-import {useStrings} from '../../common/strings'
-
-type Props = {
- wallet: YoroiWallet
- unsignedTx: YoroiUnsignedTx
- onSuccess: (signedTx: YoroiSignedTx) => void
- onCancel?: () => void
-}
-
-export const ConfirmTxWithPassword = ({wallet, onSuccess, unsignedTx}: Props) => {
- const [errorData, setErrorData] = React.useState({
- errorMessage: '',
- errorLogs: '',
- })
- const strings = useStrings()
- const signedTxRef = React.useRef(undefined)
-
- const {signAndSubmitTx, isLoading} = useSignWithPasswordAndSubmitTx(
- {wallet}, //
- {
- submitTx: {onSuccess: () => signedTxRef.current && onSuccess(signedTxRef.current)},
- signTx: {
- onSuccess: (signedTx) => {
- signedTxRef.current = signedTx
- },
- },
- },
- )
-
- const showError = ({errorMessage, errorLogs}: ErrorData) => {
- setErrorData({
- errorMessage,
- errorLogs,
- })
- }
-
- const onConfirm = async (password: string) => {
- try {
- const rootKey = await wallet.encryptedStorage.xpriv.read(password)
- if (rootKey !== undefined) {
- signAndSubmitTx({unsignedTx, password})
- }
- } catch (err) {
- if (err instanceof App.Errors.WrongPassword) {
- showError({
- errorMessage: strings.incorrectPasswordTitle,
- errorLogs: strings.incorrectPasswordMessage,
- })
- } else {
- showError({
- errorMessage: strings.generalTxErrorMessage,
- errorLogs: err,
- })
- }
- }
- }
-
- return (
- 0 ? new Error(errorData.errorMessage) : undefined}
- onPasswordChange={() => setErrorData({errorMessage: '', errorLogs: ''})}
- />
- )
-}
diff --git a/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/TransactionSummary.stories.tsx b/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/TransactionSummary.stories.tsx
deleted file mode 100644
index 68d0f74e02..0000000000
--- a/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/TransactionSummary.stories.tsx
+++ /dev/null
@@ -1,168 +0,0 @@
-import {storiesOf} from '@storybook/react-native'
-import {tokenInfoMocks} from '@yoroi/portfolio'
-import {mockSwapManager, mockSwapStateDefault, orderMocks, SwapOrderCalculation, SwapProvider} from '@yoroi/swap'
-import React from 'react'
-import {StyleSheet, View} from 'react-native'
-
-import {mocks as walletMocks} from '../../../../yoroi-wallets/mocks/wallet'
-import {WalletManagerProviderMock} from '../../../../yoroi-wallets/mocks/WalletManagerProviderMock'
-import {mocks} from '../../common/mocks'
-import {SwapFormProvider} from '../../common/SwapFormProvider'
-import {TransactionSummary} from './TransactionSummary'
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- padding: 16,
- },
-})
-
-storiesOf('TransactionSummary', module) //
- .add('default', () => {
- return (
-
-
-
- )
- })
- .add('Price Alert', () => {
- return (
-
-
-
- )
- })
-
-const TxSummary = ({calculation}: {calculation: SwapOrderCalculation}) => {
- return (
-
-
-
-
-
-
-
- )
-}
-
-const defaultCalculation = orderMocks.mockedOrderCalculations1[0]
-const priceAlertCalculation = {
- order: {
- side: 'buy',
- slippage: 10,
- orderType: 'market',
- amounts: {
- sell: {
- quantity: 0n,
- info: {
- ...tokenInfoMocks.ftNameless,
- id: 'token.A',
- },
- },
- buy: {
- quantity: 100000001n,
- info: {
- ...tokenInfoMocks.ftNameless,
- id: 'token.B',
- },
- },
- },
- },
- sides: {
- buy: {
- quantity: 100000001n,
- info: {
- ...tokenInfoMocks.ftNameless,
- id: 'token.B',
- },
- },
- sell: {
- quantity: 7335973n,
- info: {
- ...tokenInfoMocks.ftNameless,
- id: 'token.A',
- },
- },
- },
- cost: {
- ptTotalRequired: {
- quantity: 2950000n,
- info: tokenInfoMocks.primaryETH,
- },
- batcherFee: {
- quantity: 950000n,
- info: tokenInfoMocks.primaryETH,
- },
- deposit: {
- quantity: 2000000n,
- info: tokenInfoMocks.primaryETH,
- },
- frontendFeeInfo: {
- fee: {
- quantity: 0n,
- info: tokenInfoMocks.primaryETH,
- },
- },
- liquidityFee: {
- quantity: 22008n,
- info: {
- ...tokenInfoMocks.ftNameless,
- id: 'token.A',
- },
- },
- },
- buyAmountWithSlippage: {
- quantity: 90000000n,
- info: {
- ...tokenInfoMocks.ftNameless,
- id: 'token.B',
- },
- },
- hasSupply: true,
- prices: {
- base: '0.07214312806368332309',
- market: '0.07214312806368332309',
- actualPrice: '0.08151081111111111111',
- withSlippage: '0.08151081111111111111',
- withFees: '0.08285972917140270829',
- withFeesAndSlippage: '0.09206636666666666667',
- difference: '14.854638820567161388',
- priceImpact: '10.0000000000000000000',
- },
- pool: {
- tokenA: {
- quantity: 529504614n,
- tokenId: 'token.A',
- },
- tokenB: {
- quantity: 7339640354n,
- tokenId: 'token.B',
- },
- ptPriceTokenA: '1',
- ptPriceTokenB: '0.0695404765',
- fee: '0.3',
- provider: 'muesliswap_v2',
- batcherFee: {
- quantity: 950000n,
- tokenId: '.',
- },
- deposit: {
- quantity: 2000000n,
- tokenId: '.',
- },
- poolId: '1',
- lpToken: {
- quantity: 0n,
- tokenId: 'unknown.',
- },
- },
-} as const
diff --git a/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/TransactionSummary.tsx b/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/TransactionSummary.tsx
deleted file mode 100644
index 72aa5d15ee..0000000000
--- a/apps/wallet-mobile/src/features/Swap/useCases/ConfirmTxScreen/TransactionSummary.tsx
+++ /dev/null
@@ -1,263 +0,0 @@
-import {getPoolUrlByProvider, useSwap} from '@yoroi/swap'
-import {useTheme} from '@yoroi/theme'
-import {capitalize} from 'lodash'
-import React from 'react'
-import {StyleSheet, View} from 'react-native'
-
-import {Divider} from '../../../../components/Divider/Divider'
-import {Icon} from '../../../../components/Icon'
-import {Spacer} from '../../../../components/Spacer/Spacer'
-import {Text} from '../../../../components/Text'
-import {asQuantity, Quantities} from '../../../../yoroi-wallets/utils/utils'
-import {TokenAmountItem} from '../../../Portfolio/common/TokenAmountItem/TokenAmountItem'
-import {useSelectedWallet} from '../../../WalletManager/common/hooks/useSelectedWallet'
-import {PRICE_IMPACT_HIGH_RISK, PRICE_IMPACT_MODERATE_RISK, PRICE_PRECISION} from '../../common/constants'
-import {getPriceImpactRisk, usePriceImpactRiskTheme} from '../../common/helpers'
-import {LiquidityPool} from '../../common/LiquidityPool/LiquidityPool'
-import {PoolIcon} from '../../common/PoolIcon/PoolIcon'
-import {useStrings} from '../../common/strings'
-import {useSwapForm} from '../../common/SwapFormProvider'
-
-export const TransactionSummary = () => {
- const strings = useStrings()
- const {styles} = useStyles()
- const {wallet} = useSelectedWallet()
- const {orderData} = useSwap()
- const {
- limitPrice: {displayValue: limitDisplayValue},
- } = useSwapForm()
- const {amounts, selectedPoolCalculation: calculation, type} = orderData
-
- // should never happen
- if (!calculation || !amounts.buy || !amounts.sell) throw new Error('No selected pool calculation/amounts found')
- const {pool, cost, prices} = calculation
-
- const priceImpact = prices.priceImpact
- const formattedActualPrice = Quantities.format(
- asQuantity(prices.actualPrice),
- orderData.tokens.priceDenomination,
- PRICE_PRECISION,
- )
-
- const priceImpactRisk = getPriceImpactRisk(Number(priceImpact))
- const priceImpactRiskTheme = usePriceImpactRiskTheme(priceImpactRisk)
- const priceImpactRiskTextColor = type === 'market' ? priceImpactRiskTheme.text : styles.text.color
-
- const sellTokenInfo = amounts.sell.info
- const buyTokenInfo = amounts.buy.info
-
- const tokenToSellName = sellTokenInfo.ticker ?? sellTokenInfo.name
- const tokenToBuyName = buyTokenInfo.ticker ?? buyTokenInfo.name
-
- const formattedFeeText = `${Quantities.format(
- asQuantity((cost.batcherFee.quantity + cost.frontendFeeInfo.fee.quantity).toString()),
- wallet.portfolioPrimaryTokenInfo.decimals,
- )} ${wallet.portfolioPrimaryTokenInfo.ticker}`
- const poolProviderFormatted = capitalize(pool.provider)
- const poolUrl = getPoolUrlByProvider(pool.provider)
-
- const liqFeeQuantity = Quantities.format(asQuantity(cost.liquidityFee.quantity.toString()), sellTokenInfo.decimals)
- const liqFeeQuantityFormatted = `${liqFeeQuantity} ${tokenToSellName}`
-
- const poolIcon =
-
- const priceInfoValue = `${limitDisplayValue} ${tokenToSellName}/${tokenToBuyName}`
- const minAdaInfoValue = `${Quantities.format(
- asQuantity(cost.deposit.quantity.toString()),
- wallet.portfolioPrimaryTokenInfo.decimals,
- )} ${wallet.portfolioPrimaryTokenInfo.ticker}`
- const minReceivedInfoValue = `${Quantities.format(
- asQuantity(calculation.buyAmountWithSlippage.quantity.toString()),
- buyTokenInfo.decimals,
- )} ${tokenToBuyName}`
-
- const feesInfo = [
- {
- label: strings.dex.toUpperCase(),
- value: ,
- },
- {
- label: `${capitalize(type)} ${strings.price}`,
- value: {priceInfoValue},
- },
- {
- label: strings.priceImpact,
- value:
- priceImpactRisk === 'none' ? (
- <1%
- ) : (
-
-
- {priceImpactRisk === 'high' && }
-
- {priceImpactRisk === 'moderate' && }
-
-
- {Math.ceil(Number(priceImpact) * 100) / 100}%
-
-
-
-
-
- {`(${formattedActualPrice} ${tokenToSellName}/${tokenToBuyName})`}
-
-
-
- ),
- warning: priceImpactRisk === 'high',
- hidden: orderData.type === 'limit',
- },
- {
- label: strings.swapMinAdaTitle,
- value: {minAdaInfoValue},
- },
- {
- label: strings.swapFeesTitle,
- value: {formattedFeeText},
- },
- {
- label: strings.swapLiqProvFee,
- value: {liqFeeQuantityFormatted},
- },
- {
- label: strings.swapMinReceivedTitle,
- value: (
-
- {minReceivedInfoValue}
-
- ),
- },
- ]
-
- return (
-
- {strings.swapFrom}
-
-
-
-
-
- {strings.swapTo}
-
-
-
-
-
- Swap details
-
- {feesInfo.map((orderInfo) => {
- if (orderInfo?.hidden) {
- return null
- }
-
- return (
-
-
-
-
-
- {orderInfo.label}
-
-
- {orderInfo.value}
-
-
- )
- })}
-
-
-
- {(priceImpactRisk === 'moderate' || priceImpactRisk === 'high') && type === 'market' && (
-
- {priceImpactRisk === 'moderate' && }
-
- {priceImpactRisk === 'high' && }
-
-
-
- {strings.priceImpactRiskHigh({
- riskValue: priceImpactRisk === 'moderate' ? PRICE_IMPACT_MODERATE_RISK : PRICE_IMPACT_HIGH_RISK,
- })}
-
-
- {strings.priceImpactDescription(priceImpactRisk)}
-
-
- )}
-
- )
-}
-
-const useStyles = () => {
- const {atoms, color} = useTheme()
- const styles = StyleSheet.create({
- priceImpactRiskContainer: {
- ...atoms.flex_1,
- ...atoms.justify_end,
- ...atoms.align_end,
- },
- priceImpactRiskText: {
- ...atoms.body_2_md_regular,
- },
- priceImpactLowRiskText: {
- color: color.secondary_600,
- },
- alignRight: {
- ...atoms.text_right,
- },
- flexBetween: {
- ...atoms.flex_row,
- ...atoms.justify_between,
- ...atoms.align_start,
- },
- flex: {
- ...atoms.flex_row,
- ...atoms.align_center,
- },
- text: {
- ...atoms.text_left,
- ...atoms.body_1_lg_regular,
- color: color.gray_900,
- },
- gray: {
- color: color.gray_700,
- },
- amountItemLabel: {
- fontSize: 12,
- color: color.gray_900,
- ...atoms.pb_sm,
- },
- orderValueContainer: {
- ...atoms.flex_row,
- ...atoms.align_end,
- ...atoms.justify_end,
- ...atoms.pl_sm,
- ...atoms.flex_1,
- },
- banner: {
- ...atoms.py_md,
- ...atoms.px_lg,
- ...atoms.rounded_sm,
- ...atoms.gap_sm,
- },
- bannerText: {
- fontSize: 14,
- lineHeight: 22,
- color: color.gray_900,
- },
- bold: {
- ...atoms.body_2_md_medium,
- },
- detailsTitle: {
- ...atoms.body_1_lg_medium,
- color: color.text_gray_medium,
- },
- })
-
- const colors = {
- icon: color.gray_max,
- gradientColor: color.bg_gradient_3,
- }
-
- return {styles, colors} as const
-}
diff --git a/apps/wallet-mobile/src/features/Swap/useCases/ReviewSwap/ReviewSwap.tsx b/apps/wallet-mobile/src/features/Swap/useCases/ReviewSwap/ReviewSwap.tsx
index d928b4baa2..2aeda6fe03 100644
--- a/apps/wallet-mobile/src/features/Swap/useCases/ReviewSwap/ReviewSwap.tsx
+++ b/apps/wallet-mobile/src/features/Swap/useCases/ReviewSwap/ReviewSwap.tsx
@@ -1,5 +1,6 @@
-import {useSwap} from '@yoroi/swap'
+import {getPoolUrlByProvider, useSwap} from '@yoroi/swap'
import {useTheme} from '@yoroi/theme'
+import {capitalize} from 'lodash'
import React from 'react'
import {InteractionManager, StyleSheet, useWindowDimensions, View, ViewProps} from 'react-native'
import {ScrollView} from 'react-native-gesture-handler'
@@ -7,19 +8,16 @@ import {SafeAreaView} from 'react-native-safe-area-context'
import {Button} from '../../../../components/Button/Button'
import {KeyboardAvoidingView} from '../../../../components/KeyboardAvoidingView/KeyboardAvoidingView'
-import {LoadingOverlay} from '../../../../components/LoadingOverlay/LoadingOverlay'
-import {useModal} from '../../../../components/Modal/ModalContext'
-import {Spacer} from '../../../../components/Spacer/Spacer'
import {useMetrics} from '../../../../kernel/metrics/metricsManager'
-import {useSignAndSubmitTx} from '../../../../yoroi-wallets/hooks'
+import {useWalletNavigation} from '../../../../kernel/navigation'
import {YoroiSignedTx} from '../../../../yoroi-wallets/types/yoroi'
import {asQuantity, Quantities} from '../../../../yoroi-wallets/utils/utils'
-import {useAuthOsWithEasyConfirmation} from '../../../Auth/common/hooks'
-import {useSelectedWallet} from '../../../WalletManager/common/hooks/useSelectedWallet'
+import {useReviewTx} from '../../../ReviewTx/common/ReviewTxProvider'
+import {LiquidityPool} from '../../common/LiquidityPool/LiquidityPool'
import {useNavigateTo} from '../../common/navigation'
+import {PoolIcon} from '../../common/PoolIcon/PoolIcon'
import {useStrings} from '../../common/strings'
-import {ConfirmTx} from '../ConfirmTxScreen/ConfirmTx'
-import {TransactionSummary} from '../ConfirmTxScreen/TransactionSummary'
+import {TransactionSummary} from './TransactionSummary'
const BOTTOM_ACTION_SECTION = 220
@@ -27,12 +25,12 @@ export const ReviewSwap = () => {
const [contentHeight, setContentHeight] = React.useState(0)
const strings = useStrings()
const styles = useStyles()
- const {wallet, meta} = useSelectedWallet()
const navigate = useNavigateTo()
const {track} = useMetrics()
- const {openModal, closeModal} = useModal()
const {height: deviceHeight} = useWindowDimensions()
- const signedTxRef = React.useRef(null)
+ const {navigateToTxReview} = useWalletNavigation()
+ const {unsignedTxChanged, onSuccessChanged, onErrorChanged, customReceiverTitleChanged, detailsChanged} =
+ useReviewTx()
const {unsignedTx, orderData} = useSwap()
const sellTokenInfo = orderData.amounts.sell?.info
@@ -45,11 +43,6 @@ export const ReviewSwap = () => {
const couldReceiveNoAssets = Quantities.isZero(minReceived)
- const {authWithOs, isLoading: authenticating} = useAuthOsWithEasyConfirmation(
- {id: wallet.id},
- {onSuccess: (rootKey) => signAndSubmitTx({unsignedTx, rootKey})},
- )
-
const trackSwapOrderSubmitted = () => {
if (orderData.selectedPoolCalculation === undefined) return
track.swapOrderSubmitted({
@@ -72,38 +65,38 @@ export const ReviewSwap = () => {
})
}
- const {signAndSubmitTx, isLoading: processingTx} = useSignAndSubmitTx(
- {wallet},
- {
- signTx: {
- useErrorBoundary: true,
- onSuccess: (signedTx) => {
- signedTxRef.current = signedTx
- },
- },
- submitTx: {
- onSuccess: () => {
- trackSwapOrderSubmitted()
- navigate.submittedTx(signedTxRef.current?.signedTx.id ?? '')
- },
- onError: () => {
- navigate.failedTx()
- },
- useErrorBoundary: true,
- },
- },
- )
+ const onSwapTxError = () => {
+ navigate.failedTx()
+ }
- const onPasswordTxSuccess = (signedTx: YoroiSignedTx) => {
+ const onSwapTxSuccess = (signedTx: YoroiSignedTx) => {
trackSwapOrderSubmitted()
- closeModal()
InteractionManager.runAfterInteractions(() => {
navigate.submittedTx(signedTx.signedTx.id)
})
}
- const txIsLoading = authenticating || processingTx
- const isButtonDisabled = txIsLoading || couldReceiveNoAssets
+ const onNext = () => {
+ let liquidityPool: React.ReactNode = null
+ if (orderData.selectedPoolCalculation) {
+ const poolIcon =
+ const poolProviderFormatted = capitalize(orderData.selectedPoolCalculation.pool.provider)
+ const poolUrl = getPoolUrlByProvider(orderData.selectedPoolCalculation.pool.provider)
+
+ liquidityPool = (
+
+ )
+ }
+
+ if (liquidityPool != null) customReceiverTitleChanged(liquidityPool)
+ detailsChanged({component: , title: strings.swapDetailsTitle})
+ unsignedTxChanged(unsignedTx)
+ onSuccessChanged(onSwapTxSuccess)
+ onErrorChanged(onSwapTxError)
+ navigateToTxReview()
+ }
+
+ const isButtonDisabled = couldReceiveNoAssets
return (
@@ -116,12 +109,10 @@ export const ReviewSwap = () => {
setContentHeight(height + BOTTOM_ACTION_SECTION)
}}
>
-
+
-
-
{
...(deviceHeight < contentHeight && styles.actionBorder),
}}
>
-
)
@@ -169,28 +135,21 @@ const useStyles = () => {
const {color, atoms} = useTheme()
const styles = StyleSheet.create({
root: {
- flex: 1,
+ ...atoms.flex_1,
+ ...atoms.pt_lg,
backgroundColor: color.bg_color_max,
- paddingTop: 16,
},
container: {
- flex: 1,
+ ...atoms.flex_1,
+ ...atoms.justify_between,
backgroundColor: color.bg_color_max,
- display: 'flex',
- flexDirection: 'column',
- justifyContent: 'space-between',
},
actions: {
- padding: 16,
+ ...atoms.p_lg,
backgroundColor: color.bg_color_max,
},
- modalContent: {
- flex: 1,
- alignSelf: 'stretch',
- ...atoms.px_lg,
- },
scroll: {
- paddingHorizontal: 16,
+ ...atoms.px_lg,
},
actionBorder: {
borderTopWidth: 1,
diff --git a/apps/wallet-mobile/src/features/Swap/useCases/ReviewSwap/TransactionSummary.stories.tsx b/apps/wallet-mobile/src/features/Swap/useCases/ReviewSwap/TransactionSummary.stories.tsx
index 68d0f74e02..28234c9837 100644
--- a/apps/wallet-mobile/src/features/Swap/useCases/ReviewSwap/TransactionSummary.stories.tsx
+++ b/apps/wallet-mobile/src/features/Swap/useCases/ReviewSwap/TransactionSummary.stories.tsx
@@ -34,20 +34,21 @@ storiesOf('TransactionSummary', module) //
})
const TxSummary = ({calculation}: {calculation: SwapOrderCalculation}) => {
+ const orderData = {...mocks.confirmTx.orderData, selectedPoolCalculation: calculation}
return (
-
+
diff --git a/apps/wallet-mobile/src/features/Swap/useCases/index.ts b/apps/wallet-mobile/src/features/Swap/useCases/index.ts
index dd252fe940..285bb7163c 100644
--- a/apps/wallet-mobile/src/features/Swap/useCases/index.ts
+++ b/apps/wallet-mobile/src/features/Swap/useCases/index.ts
@@ -1,4 +1,3 @@
-export * from './ConfirmTxScreen/ConfirmTxScreen'
export * from './ConfirmTxScreen/ShowFailedTxScreen/ShowFailedTxScreen'
export * from './ConfirmTxScreen/ShowSubmittedTxScreen/ShowSubmittedTxScreen'
export * from './StartOrderSwapScreen/CreateOrder/EditPool/SelectPoolFromListScreen/SelectPoolFromListScreen'
diff --git a/apps/wallet-mobile/src/features/Transactions/TxHistoryNavigator.tsx b/apps/wallet-mobile/src/features/Transactions/TxHistoryNavigator.tsx
index d4502b8284..f776390702 100644
--- a/apps/wallet-mobile/src/features/Transactions/TxHistoryNavigator.tsx
+++ b/apps/wallet-mobile/src/features/Transactions/TxHistoryNavigator.tsx
@@ -39,7 +39,6 @@ import {StartMultiTokenTxScreen} from '../Send/useCases/StartMultiTokenTx/StartM
import {NetworkTag} from '../Settings/useCases/changeAppSettings/ChangeNetwork/NetworkTag'
import {SwapTabNavigator} from '../Swap/SwapNavigator'
import {
- ConfirmTxScreen as ConfirmTxSwapScreen,
EditSlippageScreen,
SelectPoolFromListScreen,
ShowFailedTxScreen as FailedTxSwapScreen,
@@ -242,14 +241,6 @@ export const TxHistoryNavigator = () => {
}}
/>
-
-
- 'swap-confirm-tx': undefined
'swap-review': undefined
'swap-select-sell-token': undefined
'swap-select-buy-token': undefined
diff --git a/apps/wallet-mobile/src/yoroi-wallets/cardano/utils.ts b/apps/wallet-mobile/src/yoroi-wallets/cardano/utils.ts
index 253457b88c..5f3371d189 100644
--- a/apps/wallet-mobile/src/yoroi-wallets/cardano/utils.ts
+++ b/apps/wallet-mobile/src/yoroi-wallets/cardano/utils.ts
@@ -56,59 +56,6 @@ export const deriveRewardAddressFromAddress = async (address: string, chainId: n
}
}
-export const getAddressType = async (address: string) => {
- const isKeyAddress = await getIsAddressKeyBech32Format(address)
- if (isKeyAddress) return 'key'
-
- const isScriptAddress = await getIsAddressScriptBech32Format(address)
- if (isScriptAddress) return 'script'
-
- const isRewardAddress = await getIsRewardAddressBech32Format(address)
- if (isRewardAddress) return 'reward'
-
- throw new Error('invalid address format')
-}
-
-const getIsAddressKeyBech32Format = async (address: string): Promise => {
- const {csl, release} = wrappedCsl()
-
- try {
- await csl.Ed25519KeyHash.fromBech32(address)
- return true
- } catch {
- return false
- } finally {
- release()
- }
-}
-
-const getIsAddressScriptBech32Format = async (address: string): Promise => {
- const {csl, release} = wrappedCsl()
-
- try {
- await csl.ScriptHash.fromBech32(address)
- return true
- } catch {
- return false
- } finally {
- release()
- }
-}
-
-const getIsRewardAddressBech32Format = async (addressBech32: string): Promise => {
- const {csl, release} = wrappedCsl()
-
- try {
- const address = await csl.Address.fromBech32(addressBech32)
- await csl.RewardAddress.fromAddress(address)
- return true
- } catch {
- return false
- } finally {
- release()
- }
-}
-
/**
* Multi-asset related
*/
diff --git a/apps/wallet-mobile/translations/messages/src/features/ReviewTx/common/hooks/useStrings.json b/apps/wallet-mobile/translations/messages/src/features/ReviewTx/common/hooks/useStrings.json
index f7ec21070a..fdeb1cc006 100644
--- a/apps/wallet-mobile/translations/messages/src/features/ReviewTx/common/hooks/useStrings.json
+++ b/apps/wallet-mobile/translations/messages/src/features/ReviewTx/common/hooks/useStrings.json
@@ -4,14 +4,14 @@
"defaultMessage": "!!!Confirm",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 39,
+ "line": 42,
"column": 11,
- "index": 1785
+ "index": 1976
},
"end": {
- "line": 42,
+ "line": 45,
"column": 3,
- "index": 1852
+ "index": 2043
}
},
{
@@ -19,14 +19,14 @@
"defaultMessage": "!!!UTxOs",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 43,
+ "line": 46,
"column": 9,
- "index": 1863
+ "index": 2054
},
"end": {
- "line": 46,
+ "line": 49,
"column": 3,
- "index": 1926
+ "index": 2117
}
},
{
@@ -34,14 +34,14 @@
"defaultMessage": "!!!UTxOs",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 47,
+ "line": 50,
"column": 12,
- "index": 1940
+ "index": 2131
},
"end": {
- "line": 50,
+ "line": 53,
"column": 3,
- "index": 2012
+ "index": 2203
}
},
{
@@ -49,14 +49,59 @@
"defaultMessage": "!!!Overview",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 51,
+ "line": 54,
"column": 15,
- "index": 2029
+ "index": 2220
},
"end": {
- "line": 54,
+ "line": 57,
+ "column": 3,
+ "index": 2298
+ }
+ },
+ {
+ "id": "txReview.tabLabel.metadataTab",
+ "defaultMessage": "!!!Metadata",
+ "file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
+ "start": {
+ "line": 58,
+ "column": 15,
+ "index": 2315
+ },
+ "end": {
+ "line": 61,
+ "column": 3,
+ "index": 2396
+ }
+ },
+ {
+ "id": "txReview.metadata.metadataHash",
+ "defaultMessage": "!!!Metadata hash",
+ "file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
+ "start": {
+ "line": 62,
+ "column": 16,
+ "index": 2414
+ },
+ "end": {
+ "line": 65,
+ "column": 3,
+ "index": 2501
+ }
+ },
+ {
+ "id": "txReview.metadata.metadataJsonLabel",
+ "defaultMessage": "!!!Metadata",
+ "file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
+ "start": {
+ "line": 66,
+ "column": 21,
+ "index": 2524
+ },
+ "end": {
+ "line": 69,
"column": 3,
- "index": 2107
+ "index": 2611
}
},
{
@@ -64,14 +109,14 @@
"defaultMessage": "!!!Wallet",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 55,
+ "line": 70,
"column": 15,
- "index": 2124
+ "index": 2628
},
"end": {
- "line": 58,
+ "line": 73,
"column": 3,
- "index": 2198
+ "index": 2702
}
},
{
@@ -79,14 +124,14 @@
"defaultMessage": "!!!Fee",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 59,
+ "line": 74,
"column": 12,
- "index": 2212
+ "index": 2716
},
"end": {
- "line": 62,
+ "line": 77,
"column": 3,
- "index": 2271
+ "index": 2775
}
},
{
@@ -94,14 +139,14 @@
"defaultMessage": "!!!Your Wallet",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 63,
+ "line": 78,
"column": 17,
- "index": 2290
+ "index": 2794
},
"end": {
- "line": 66,
+ "line": 81,
"column": 3,
- "index": 2376
+ "index": 2880
}
},
{
@@ -109,14 +154,14 @@
"defaultMessage": "!!!Send",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 67,
+ "line": 82,
"column": 13,
- "index": 2391
+ "index": 2895
},
"end": {
- "line": 70,
+ "line": 85,
"column": 3,
- "index": 2466
+ "index": 2970
}
},
{
@@ -124,14 +169,14 @@
"defaultMessage": "!!!To",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 71,
+ "line": 86,
"column": 18,
- "index": 2486
+ "index": 2990
},
"end": {
- "line": 74,
+ "line": 89,
"column": 3,
- "index": 2564
+ "index": 3068
}
},
{
@@ -139,14 +184,14 @@
"defaultMessage": "!!!To script",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 75,
+ "line": 90,
"column": 24,
- "index": 2590
+ "index": 3094
},
"end": {
- "line": 78,
+ "line": 93,
"column": 3,
- "index": 2681
+ "index": 3185
}
},
{
@@ -154,14 +199,14 @@
"defaultMessage": "!!!Inputs",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 79,
+ "line": 94,
"column": 20,
- "index": 2703
+ "index": 3207
},
"end": {
- "line": 82,
+ "line": 97,
"column": 3,
- "index": 2784
+ "index": 3288
}
},
{
@@ -169,14 +214,14 @@
"defaultMessage": "!!!Outputs",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 83,
+ "line": 98,
"column": 21,
- "index": 2807
+ "index": 3311
},
"end": {
- "line": 86,
+ "line": 101,
"column": 3,
- "index": 2890
+ "index": 3394
}
},
{
@@ -184,14 +229,14 @@
"defaultMessage": "!!!Your address",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 87,
+ "line": 102,
"column": 25,
- "index": 2917
+ "index": 3421
},
"end": {
- "line": 90,
+ "line": 105,
"column": 3,
- "index": 3009
+ "index": 3513
}
},
{
@@ -199,14 +244,14 @@
"defaultMessage": "!!!Foreign address",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 91,
+ "line": 106,
"column": 28,
- "index": 3039
+ "index": 3543
},
"end": {
- "line": 94,
+ "line": 109,
"column": 3,
- "index": 3137
+ "index": 3641
}
},
{
@@ -214,14 +259,14 @@
"defaultMessage": "!!!Overview",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 95,
+ "line": 110,
"column": 12,
- "index": 3151
+ "index": 3655
},
"end": {
- "line": 98,
+ "line": 113,
"column": 3,
- "index": 3242
+ "index": 3746
}
},
{
@@ -229,14 +274,14 @@
"defaultMessage": "!!!JSON",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 99,
+ "line": 114,
"column": 8,
- "index": 3252
+ "index": 3756
},
"end": {
- "line": 102,
+ "line": 117,
"column": 3,
- "index": 3335
+ "index": 3839
}
},
{
@@ -244,14 +289,14 @@
"defaultMessage": "!!!Metadata",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 103,
+ "line": 118,
"column": 12,
- "index": 3349
+ "index": 3853
},
"end": {
- "line": 106,
+ "line": 121,
"column": 3,
- "index": 3439
+ "index": 3943
}
},
{
@@ -259,14 +304,14 @@
"defaultMessage": "!!!Policy ID",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 107,
+ "line": 122,
"column": 12,
- "index": 3453
+ "index": 3957
},
"end": {
- "line": 110,
+ "line": 125,
"column": 3,
- "index": 3542
+ "index": 4046
}
},
{
@@ -274,14 +319,14 @@
"defaultMessage": "!!!Fingerprint",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 111,
+ "line": 126,
"column": 15,
- "index": 3559
+ "index": 4063
},
"end": {
- "line": 114,
+ "line": 129,
"column": 3,
- "index": 3653
+ "index": 4157
}
},
{
@@ -289,14 +334,14 @@
"defaultMessage": "!!!Name",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 115,
+ "line": 130,
"column": 8,
- "index": 3663
+ "index": 4167
},
"end": {
- "line": 118,
+ "line": 133,
"column": 3,
- "index": 3755
+ "index": 4259
}
},
{
@@ -304,14 +349,14 @@
"defaultMessage": "!!!Token Supply",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 119,
+ "line": 134,
"column": 15,
- "index": 3772
+ "index": 4276
},
"end": {
- "line": 122,
+ "line": 137,
"column": 3,
- "index": 3879
+ "index": 4383
}
},
{
@@ -319,14 +364,14 @@
"defaultMessage": "!!!Symbol",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 123,
+ "line": 138,
"column": 10,
- "index": 3891
+ "index": 4395
},
"end": {
- "line": 126,
+ "line": 141,
"column": 3,
- "index": 3987
+ "index": 4491
}
},
{
@@ -334,14 +379,14 @@
"defaultMessage": "!!!Description",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 127,
+ "line": 142,
"column": 15,
- "index": 4004
+ "index": 4508
},
"end": {
- "line": 130,
+ "line": 145,
"column": 3,
- "index": 4110
+ "index": 4614
}
},
{
@@ -349,14 +394,14 @@
"defaultMessage": "!!!Details on",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 131,
+ "line": 146,
"column": 11,
- "index": 4123
+ "index": 4627
},
"end": {
- "line": 134,
+ "line": 149,
"column": 3,
- "index": 4224
+ "index": 4728
}
},
{
@@ -364,14 +409,14 @@
"defaultMessage": "!!!Asset Details",
"file": "src/features/ReviewTx/common/hooks/useStrings.tsx",
"start": {
- "line": 135,
+ "line": 150,
"column": 21,
- "index": 4247
+ "index": 4751
},
"end": {
- "line": 138,
+ "line": 153,
"column": 3,
- "index": 4331
+ "index": 4835
}
}
]
\ No newline at end of file
diff --git a/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeAppSettings/EnableLoginWithOs/EnableLoginWithOsScreen.json b/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeAppSettings/EnableLoginWithOs/EnableLoginWithOsScreen.json
index 99cbccae4b..51a155ad38 100644
--- a/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeAppSettings/EnableLoginWithOs/EnableLoginWithOsScreen.json
+++ b/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeAppSettings/EnableLoginWithOs/EnableLoginWithOsScreen.json
@@ -4,14 +4,14 @@
"defaultMessage": "!!!Not now",
"file": "src/features/Settings/useCases/changeAppSettings/EnableLoginWithOs/EnableLoginWithOsScreen.tsx",
"start": {
- "line": 57,
+ "line": 55,
"column": 16,
- "index": 1749
+ "index": 1669
},
"end": {
- "line": 60,
+ "line": 58,
"column": 3,
- "index": 1853
+ "index": 1773
}
},
{
@@ -19,14 +19,14 @@
"defaultMessage": "!!!Link",
"file": "src/features/Settings/useCases/changeAppSettings/EnableLoginWithOs/EnableLoginWithOsScreen.tsx",
"start": {
- "line": 61,
+ "line": 59,
"column": 14,
- "index": 1869
+ "index": 1789
},
"end": {
- "line": 64,
+ "line": 62,
"column": 3,
- "index": 1968
+ "index": 1888
}
},
{
@@ -34,14 +34,14 @@
"defaultMessage": "!!!Use your fingerprint",
"file": "src/features/Settings/useCases/changeAppSettings/EnableLoginWithOs/EnableLoginWithOsScreen.tsx",
"start": {
- "line": 65,
+ "line": 63,
"column": 11,
- "index": 1981
+ "index": 1901
},
"end": {
- "line": 68,
+ "line": 66,
"column": 3,
- "index": 2093
+ "index": 2013
}
},
{
@@ -49,14 +49,14 @@
"defaultMessage": "!!!for faster, easier access",
"file": "src/features/Settings/useCases/changeAppSettings/EnableLoginWithOs/EnableLoginWithOsScreen.tsx",
"start": {
- "line": 69,
+ "line": 67,
"column": 15,
- "index": 2110
+ "index": 2030
},
"end": {
- "line": 72,
+ "line": 70,
"column": 3,
- "index": 2231
+ "index": 2151
}
},
{
@@ -64,14 +64,14 @@
"defaultMessage": "!!!to your Yoroi wallet",
"file": "src/features/Settings/useCases/changeAppSettings/EnableLoginWithOs/EnableLoginWithOsScreen.tsx",
"start": {
- "line": 73,
+ "line": 71,
"column": 15,
- "index": 2248
+ "index": 2168
},
"end": {
- "line": 76,
+ "line": 74,
"column": 3,
- "index": 2364
+ "index": 2284
}
}
]
\ No newline at end of file
diff --git a/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeWalletSettings/ChangePassword/ChangePasswordScreen.json b/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeWalletSettings/ChangePassword/ChangePasswordScreen.json
index 5b190d2da3..b1c92cfe47 100644
--- a/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeWalletSettings/ChangePassword/ChangePasswordScreen.json
+++ b/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeWalletSettings/ChangePassword/ChangePasswordScreen.json
@@ -4,14 +4,14 @@
"defaultMessage": "!!!Current password",
"file": "src/features/Settings/useCases/changeWalletSettings/ChangePassword/ChangePasswordScreen.tsx",
"start": {
- "line": 116,
+ "line": 115,
"column": 25,
- "index": 4882
+ "index": 4857
},
"end": {
- "line": 119,
+ "line": 118,
"column": 3,
- "index": 5004
+ "index": 4979
}
},
{
@@ -19,14 +19,14 @@
"defaultMessage": "!!!New password",
"file": "src/features/Settings/useCases/changeWalletSettings/ChangePassword/ChangePasswordScreen.tsx",
"start": {
- "line": 120,
+ "line": 119,
"column": 25,
- "index": 5031
+ "index": 5006
},
"end": {
- "line": 123,
+ "line": 122,
"column": 3,
- "index": 5149
+ "index": 5124
}
},
{
@@ -34,14 +34,14 @@
"defaultMessage": "!!!Minimum {requirePasswordLength} characters",
"file": "src/features/Settings/useCases/changeWalletSettings/ChangePassword/ChangePasswordScreen.tsx",
"start": {
- "line": 124,
+ "line": 123,
"column": 31,
- "index": 5182
+ "index": 5157
},
"end": {
- "line": 127,
+ "line": 126,
"column": 3,
- "index": 5347
+ "index": 5322
}
},
{
@@ -49,14 +49,14 @@
"defaultMessage": "!!!Repeat new password",
"file": "src/features/Settings/useCases/changeWalletSettings/ChangePassword/ChangePasswordScreen.tsx",
"start": {
- "line": 128,
+ "line": 127,
"column": 28,
- "index": 5377
+ "index": 5352
},
"end": {
- "line": 131,
+ "line": 130,
"column": 3,
- "index": 5505
+ "index": 5480
}
},
{
@@ -64,14 +64,14 @@
"defaultMessage": "!!!Passwords do not match",
"file": "src/features/Settings/useCases/changeWalletSettings/ChangePassword/ChangePasswordScreen.tsx",
"start": {
- "line": 132,
+ "line": 131,
"column": 36,
- "index": 5543
+ "index": 5518
},
"end": {
- "line": 135,
+ "line": 134,
"column": 3,
- "index": 5682
+ "index": 5657
}
},
{
@@ -79,14 +79,14 @@
"defaultMessage": "!!!Change password",
"file": "src/features/Settings/useCases/changeWalletSettings/ChangePassword/ChangePasswordScreen.tsx",
"start": {
- "line": 136,
+ "line": 135,
"column": 18,
- "index": 5702
+ "index": 5677
},
"end": {
- "line": 139,
+ "line": 138,
"column": 3,
- "index": 5816
+ "index": 5791
}
}
]
\ No newline at end of file
diff --git a/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeWalletSettings/EasyConfirmation/DisableEasyConfirmationScreen.json b/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeWalletSettings/EasyConfirmation/DisableEasyConfirmationScreen.json
index f7f94ecc80..38b0bb4c23 100644
--- a/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeWalletSettings/EasyConfirmation/DisableEasyConfirmationScreen.json
+++ b/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeWalletSettings/EasyConfirmation/DisableEasyConfirmationScreen.json
@@ -6,12 +6,12 @@
"start": {
"line": 48,
"column": 18,
- "index": 1567
+ "index": 1554
},
"end": {
"line": 51,
"column": 3,
- "index": 1769
+ "index": 1756
}
},
{
@@ -21,12 +21,12 @@
"start": {
"line": 52,
"column": 17,
- "index": 1788
+ "index": 1775
},
"end": {
"line": 55,
"column": 3,
- "index": 1902
+ "index": 1889
}
}
]
\ No newline at end of file
diff --git a/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeWalletSettings/EasyConfirmation/EnableEasyConfirmationScreen.json b/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeWalletSettings/EasyConfirmation/EnableEasyConfirmationScreen.json
index 7a4651d26b..a5cc0bb4c8 100644
--- a/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeWalletSettings/EasyConfirmation/EnableEasyConfirmationScreen.json
+++ b/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeWalletSettings/EasyConfirmation/EnableEasyConfirmationScreen.json
@@ -4,14 +4,14 @@
"defaultMessage": "!!!This option will allow you to send transactions from your wallet just by confirming with fingerprint or face recognition with standard system fallback option. This makes your wallet less secure. This is a compromise between UX and security!",
"file": "src/features/Settings/useCases/changeWalletSettings/EasyConfirmation/EnableEasyConfirmationScreen.tsx",
"start": {
- "line": 93,
+ "line": 92,
"column": 17,
- "index": 3312
+ "index": 3287
},
"end": {
- "line": 101,
+ "line": 100,
"column": 3,
- "index": 3708
+ "index": 3683
}
},
{
@@ -19,14 +19,14 @@
"defaultMessage": "!!!Please remember your master password, as you may need it in case your biometrics data are removed from the device.",
"file": "src/features/Settings/useCases/changeWalletSettings/EasyConfirmation/EnableEasyConfirmationScreen.tsx",
"start": {
- "line": 102,
+ "line": 101,
"column": 17,
- "index": 3727
+ "index": 3702
},
"end": {
- "line": 107,
+ "line": 106,
"column": 3,
- "index": 3964
+ "index": 3939
}
},
{
@@ -34,14 +34,14 @@
"defaultMessage": "!!!Master password",
"file": "src/features/Settings/useCases/changeWalletSettings/EasyConfirmation/EnableEasyConfirmationScreen.tsx",
"start": {
- "line": 108,
+ "line": 107,
"column": 22,
- "index": 3988
+ "index": 3963
},
"end": {
- "line": 111,
+ "line": 110,
"column": 3,
- "index": 4116
+ "index": 4091
}
},
{
@@ -49,14 +49,14 @@
"defaultMessage": "!!!Enable",
"file": "src/features/Settings/useCases/changeWalletSettings/EasyConfirmation/EnableEasyConfirmationScreen.tsx",
"start": {
- "line": 112,
+ "line": 111,
"column": 16,
- "index": 4134
+ "index": 4109
},
"end": {
- "line": 115,
+ "line": 114,
"column": 3,
- "index": 4245
+ "index": 4220
}
}
]
\ No newline at end of file
diff --git a/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeWalletSettings/RenameWalletScreen/RenameWalletScreen.json b/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeWalletSettings/RenameWalletScreen/RenameWalletScreen.json
index aac9c8b185..b5ca86d87b 100644
--- a/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeWalletSettings/RenameWalletScreen/RenameWalletScreen.json
+++ b/apps/wallet-mobile/translations/messages/src/features/Settings/useCases/changeWalletSettings/RenameWalletScreen/RenameWalletScreen.json
@@ -4,14 +4,14 @@
"defaultMessage": "!!!Change name",
"file": "src/features/Settings/useCases/changeWalletSettings/RenameWalletScreen/RenameWalletScreen.tsx",
"start": {
- "line": 104,
+ "line": 103,
"column": 16,
- "index": 3375
+ "index": 3350
},
"end": {
- "line": 107,
+ "line": 106,
"column": 3,
- "index": 3479
+ "index": 3454
}
},
{
@@ -19,14 +19,14 @@
"defaultMessage": "!!!Wallet name",
"file": "src/features/Settings/useCases/changeWalletSettings/RenameWalletScreen/RenameWalletScreen.tsx",
"start": {
- "line": 108,
+ "line": 107,
"column": 24,
- "index": 3505
+ "index": 3480
},
"end": {
- "line": 111,
+ "line": 110,
"column": 3,
- "index": 3617
+ "index": 3592
}
}
]
\ No newline at end of file
diff --git a/apps/wallet-mobile/translations/messages/src/features/Swap/common/strings.json b/apps/wallet-mobile/translations/messages/src/features/Swap/common/strings.json
index 769574a718..6b455f1c70 100644
--- a/apps/wallet-mobile/translations/messages/src/features/Swap/common/strings.json
+++ b/apps/wallet-mobile/translations/messages/src/features/Swap/common/strings.json
@@ -6,12 +6,12 @@
"start": {
"line": 170,
"column": 12,
- "index": 11093
+ "index": 11087
},
"end": {
"line": 173,
"column": 3,
- "index": 11256
+ "index": 11250
}
},
{
@@ -21,12 +21,12 @@
"start": {
"line": 174,
"column": 24,
- "index": 11282
+ "index": 11276
},
"end": {
"line": 177,
"column": 3,
- "index": 11391
+ "index": 11385
}
},
{
@@ -36,12 +36,12 @@
"start": {
"line": 178,
"column": 13,
- "index": 11406
+ "index": 11400
},
"end": {
"line": 181,
"column": 3,
- "index": 11479
+ "index": 11473
}
},
{
@@ -51,12 +51,12 @@
"start": {
"line": 182,
"column": 20,
- "index": 11501
+ "index": 11495
},
"end": {
"line": 185,
"column": 3,
- "index": 11589
+ "index": 11583
}
},
{
@@ -66,12 +66,12 @@
"start": {
"line": 186,
"column": 13,
- "index": 11604
+ "index": 11598
},
"end": {
"line": 189,
"column": 3,
- "index": 11686
+ "index": 11680
}
},
{
@@ -81,12 +81,12 @@
"start": {
"line": 190,
"column": 13,
- "index": 11701
+ "index": 11695
},
"end": {
"line": 193,
"column": 3,
- "index": 11780
+ "index": 11774
}
},
{
@@ -96,12 +96,12 @@
"start": {
"line": 194,
"column": 16,
- "index": 11798
+ "index": 11792
},
"end": {
"line": 197,
"column": 3,
- "index": 11883
+ "index": 11877
}
},
{
@@ -111,12 +111,12 @@
"start": {
"line": 198,
"column": 15,
- "index": 11900
+ "index": 11894
},
"end": {
"line": 201,
"column": 3,
- "index": 11976
+ "index": 11970
}
},
{
@@ -126,12 +126,12 @@
"start": {
"line": 202,
"column": 12,
- "index": 11990
+ "index": 11984
},
"end": {
"line": 205,
"column": 3,
- "index": 12067
+ "index": 12061
}
},
{
@@ -141,12 +141,12 @@
"start": {
"line": 206,
"column": 10,
- "index": 12079
+ "index": 12073
},
"end": {
"line": 209,
"column": 3,
- "index": 12152
+ "index": 12146
}
},
{
@@ -156,12 +156,12 @@
"start": {
"line": 210,
"column": 18,
- "index": 12172
+ "index": 12166
},
"end": {
"line": 213,
"column": 3,
- "index": 12261
+ "index": 12255
}
},
{
@@ -171,12 +171,12 @@
"start": {
"line": 214,
"column": 11,
- "index": 12274
+ "index": 12268
},
"end": {
"line": 217,
"column": 3,
- "index": 12348
+ "index": 12342
}
},
{
@@ -186,12 +186,12 @@
"start": {
"line": 218,
"column": 15,
- "index": 12365
+ "index": 12359
},
"end": {
"line": 221,
"column": 3,
- "index": 12448
+ "index": 12442
}
},
{
@@ -201,12 +201,12 @@
"start": {
"line": 222,
"column": 15,
- "index": 12465
+ "index": 12459
},
"end": {
"line": 225,
"column": 3,
- "index": 12548
+ "index": 12542
}
},
{
@@ -216,12 +216,12 @@
"start": {
"line": 226,
"column": 19,
- "index": 12569
+ "index": 12563
},
"end": {
"line": 230,
"column": 3,
- "index": 12770
+ "index": 12764
}
},
{
@@ -231,12 +231,12 @@
"start": {
"line": 231,
"column": 18,
- "index": 12790
+ "index": 12784
},
"end": {
"line": 235,
"column": 3,
- "index": 13119
+ "index": 13113
}
},
{
@@ -246,12 +246,12 @@
"start": {
"line": 236,
"column": 14,
- "index": 13135
+ "index": 13129
},
"end": {
"line": 239,
"column": 3,
- "index": 13216
+ "index": 13210
}
},
{
@@ -261,12 +261,12 @@
"start": {
"line": 240,
"column": 21,
- "index": 13239
+ "index": 13233
},
"end": {
"line": 243,
"column": 3,
- "index": 13334
+ "index": 13328
}
},
{
@@ -276,12 +276,12 @@
"start": {
"line": 244,
"column": 26,
- "index": 13362
+ "index": 13356
},
"end": {
"line": 247,
"column": 3,
- "index": 13511
+ "index": 13505
}
},
{
@@ -291,12 +291,12 @@
"start": {
"line": 248,
"column": 25,
- "index": 13538
+ "index": 13532
},
"end": {
"line": 251,
"column": 3,
- "index": 13642
+ "index": 13636
}
},
{
@@ -306,12 +306,12 @@
"start": {
"line": 252,
"column": 14,
- "index": 13658
+ "index": 13652
},
"end": {
"line": 255,
"column": 3,
- "index": 13746
+ "index": 13740
}
},
{
@@ -321,12 +321,12 @@
"start": {
"line": 256,
"column": 12,
- "index": 13760
+ "index": 13754
},
"end": {
"line": 259,
"column": 3,
- "index": 13857
+ "index": 13851
}
},
{
@@ -336,12 +336,12 @@
"start": {
"line": 260,
"column": 16,
- "index": 13875
+ "index": 13869
},
"end": {
"line": 263,
"column": 3,
- "index": 14013
+ "index": 14007
}
},
{
@@ -351,12 +351,12 @@
"start": {
"line": 264,
"column": 12,
- "index": 14027
+ "index": 14021
},
"end": {
"line": 267,
"column": 3,
- "index": 14101
+ "index": 14095
}
},
{
@@ -366,12 +366,12 @@
"start": {
"line": 268,
"column": 14,
- "index": 14117
+ "index": 14111
},
"end": {
"line": 271,
"column": 3,
- "index": 14197
+ "index": 14191
}
},
{
@@ -381,12 +381,12 @@
"start": {
"line": 272,
"column": 14,
- "index": 14213
+ "index": 14207
},
"end": {
"line": 276,
"column": 3,
- "index": 14394
+ "index": 14388
}
},
{
@@ -396,12 +396,12 @@
"start": {
"line": 277,
"column": 19,
- "index": 14415
+ "index": 14409
},
"end": {
"line": 280,
"column": 3,
- "index": 14497
+ "index": 14491
}
},
{
@@ -411,12 +411,12 @@
"start": {
"line": 281,
"column": 22,
- "index": 14521
+ "index": 14515
},
"end": {
"line": 284,
"column": 3,
- "index": 14631
+ "index": 14625
}
},
{
@@ -426,12 +426,12 @@
"start": {
"line": 285,
"column": 21,
- "index": 14654
+ "index": 14648
},
"end": {
"line": 288,
"column": 3,
- "index": 14800
+ "index": 14794
}
},
{
@@ -441,12 +441,12 @@
"start": {
"line": 289,
"column": 21,
- "index": 14823
+ "index": 14817
},
"end": {
"line": 292,
"column": 3,
- "index": 14934
+ "index": 14928
}
},
{
@@ -456,12 +456,12 @@
"start": {
"line": 293,
"column": 20,
- "index": 14956
+ "index": 14950
},
"end": {
"line": 296,
"column": 3,
- "index": 15101
+ "index": 15095
}
},
{
@@ -471,12 +471,12 @@
"start": {
"line": 297,
"column": 17,
- "index": 15120
+ "index": 15114
},
"end": {
"line": 300,
"column": 3,
- "index": 15197
+ "index": 15191
}
},
{
@@ -486,12 +486,12 @@
"start": {
"line": 301,
"column": 20,
- "index": 15219
+ "index": 15213
},
"end": {
"line": 304,
"column": 3,
- "index": 15317
+ "index": 15311
}
},
{
@@ -501,12 +501,12 @@
"start": {
"line": 305,
"column": 18,
- "index": 15337
+ "index": 15331
},
"end": {
"line": 308,
"column": 3,
- "index": 15433
+ "index": 15427
}
},
{
@@ -516,12 +516,12 @@
"start": {
"line": 309,
"column": 24,
- "index": 15459
+ "index": 15453
},
"end": {
"line": 313,
"column": 3,
- "index": 15762
+ "index": 15756
}
},
{
@@ -531,12 +531,12 @@
"start": {
"line": 314,
"column": 19,
- "index": 15783
+ "index": 15777
},
"end": {
"line": 317,
"column": 3,
- "index": 15929
+ "index": 15923
}
},
{
@@ -546,12 +546,12 @@
"start": {
"line": 318,
"column": 24,
- "index": 15955
+ "index": 15949
},
"end": {
"line": 321,
"column": 3,
- "index": 16047
+ "index": 16041
}
},
{
@@ -561,12 +561,12 @@
"start": {
"line": 322,
"column": 17,
- "index": 16066
+ "index": 16060
},
"end": {
"line": 325,
"column": 3,
- "index": 16203
+ "index": 16197
}
},
{
@@ -576,12 +576,12 @@
"start": {
"line": 326,
"column": 20,
- "index": 16225
+ "index": 16219
},
"end": {
"line": 329,
"column": 3,
- "index": 16320
+ "index": 16314
}
},
{
@@ -591,12 +591,12 @@
"start": {
"line": 330,
"column": 10,
- "index": 16332
+ "index": 16326
},
"end": {
"line": 333,
"column": 3,
- "index": 16409
+ "index": 16403
}
},
{
@@ -606,12 +606,12 @@
"start": {
"line": 334,
"column": 24,
- "index": 16435
+ "index": 16429
},
"end": {
"line": 338,
"column": 3,
- "index": 16717
+ "index": 16711
}
},
{
@@ -621,12 +621,12 @@
"start": {
"line": 339,
"column": 9,
- "index": 16728
+ "index": 16722
},
"end": {
"line": 342,
"column": 3,
- "index": 16790
+ "index": 16784
}
},
{
@@ -636,12 +636,12 @@
"start": {
"line": 343,
"column": 17,
- "index": 16809
+ "index": 16803
},
"end": {
"line": 346,
"column": 3,
- "index": 16911
+ "index": 16905
}
},
{
@@ -651,12 +651,12 @@
"start": {
"line": 347,
"column": 20,
- "index": 16933
+ "index": 16927
},
"end": {
"line": 350,
"column": 3,
- "index": 17039
+ "index": 17033
}
},
{
@@ -666,12 +666,12 @@
"start": {
"line": 351,
"column": 21,
- "index": 17062
+ "index": 17056
},
"end": {
"line": 354,
"column": 3,
- "index": 17164
+ "index": 17158
}
},
{
@@ -681,12 +681,12 @@
"start": {
"line": 355,
"column": 17,
- "index": 17183
+ "index": 17177
},
"end": {
"line": 358,
"column": 3,
- "index": 17270
+ "index": 17264
}
},
{
@@ -696,12 +696,12 @@
"start": {
"line": 359,
"column": 14,
- "index": 17286
+ "index": 17280
},
"end": {
"line": 362,
"column": 3,
- "index": 17367
+ "index": 17361
}
},
{
@@ -711,12 +711,12 @@
"start": {
"line": 363,
"column": 19,
- "index": 17388
+ "index": 17382
},
"end": {
"line": 366,
"column": 3,
- "index": 17479
+ "index": 17473
}
},
{
@@ -726,12 +726,12 @@
"start": {
"line": 367,
"column": 7,
- "index": 17488
+ "index": 17482
},
"end": {
"line": 370,
"column": 3,
- "index": 17554
+ "index": 17548
}
},
{
@@ -741,12 +741,12 @@
"start": {
"line": 371,
"column": 11,
- "index": 17567
+ "index": 17561
},
"end": {
"line": 374,
"column": 3,
- "index": 17642
+ "index": 17636
}
},
{
@@ -756,12 +756,12 @@
"start": {
"line": 375,
"column": 14,
- "index": 17658
+ "index": 17652
},
"end": {
"line": 378,
"column": 3,
- "index": 17740
+ "index": 17734
}
},
{
@@ -771,12 +771,12 @@
"start": {
"line": 379,
"column": 26,
- "index": 17768
+ "index": 17762
},
"end": {
"line": 382,
"column": 3,
- "index": 17861
+ "index": 17855
}
},
{
@@ -786,12 +786,12 @@
"start": {
"line": 383,
"column": 32,
- "index": 17895
+ "index": 17889
},
"end": {
"line": 388,
"column": 3,
- "index": 18115
+ "index": 18109
}
},
{
@@ -801,12 +801,12 @@
"start": {
"line": 389,
"column": 30,
- "index": 18147
+ "index": 18141
},
"end": {
"line": 392,
"column": 3,
- "index": 18249
+ "index": 18243
}
},
{
@@ -816,12 +816,12 @@
"start": {
"line": 393,
"column": 32,
- "index": 18283
+ "index": 18277
},
"end": {
"line": 396,
"column": 3,
- "index": 18383
+ "index": 18377
}
},
{
@@ -831,12 +831,12 @@
"start": {
"line": 397,
"column": 25,
- "index": 18410
+ "index": 18404
},
"end": {
"line": 400,
"column": 3,
- "index": 18495
+ "index": 18489
}
},
{
@@ -846,12 +846,12 @@
"start": {
"line": 401,
"column": 28,
- "index": 18525
+ "index": 18519
},
"end": {
"line": 404,
"column": 3,
- "index": 18613
+ "index": 18607
}
},
{
@@ -861,12 +861,12 @@
"start": {
"line": 405,
"column": 21,
- "index": 18636
+ "index": 18630
},
"end": {
"line": 408,
"column": 3,
- "index": 18734
+ "index": 18728
}
},
{
@@ -876,12 +876,12 @@
"start": {
"line": 409,
"column": 22,
- "index": 18758
+ "index": 18752
},
"end": {
"line": 412,
"column": 3,
- "index": 18924
+ "index": 18918
}
},
{
@@ -891,12 +891,12 @@
"start": {
"line": 413,
"column": 7,
- "index": 18933
+ "index": 18927
},
"end": {
"line": 416,
"column": 3,
- "index": 19000
+ "index": 18994
}
},
{
@@ -906,12 +906,12 @@
"start": {
"line": 417,
"column": 17,
- "index": 19019
+ "index": 19013
},
"end": {
"line": 420,
"column": 3,
- "index": 19107
+ "index": 19101
}
},
{
@@ -921,12 +921,12 @@
"start": {
"line": 421,
"column": 9,
- "index": 19118
+ "index": 19112
},
"end": {
"line": 424,
"column": 3,
- "index": 19191
+ "index": 19185
}
},
{
@@ -936,12 +936,12 @@
"start": {
"line": 425,
"column": 9,
- "index": 19202
+ "index": 19196
},
"end": {
"line": 428,
"column": 3,
- "index": 19263
+ "index": 19257
}
},
{
@@ -951,12 +951,12 @@
"start": {
"line": 429,
"column": 19,
- "index": 19284
+ "index": 19278
},
"end": {
"line": 432,
"column": 3,
- "index": 19366
+ "index": 19360
}
},
{
@@ -966,12 +966,12 @@
"start": {
"line": 433,
"column": 20,
- "index": 19388
+ "index": 19382
},
"end": {
"line": 436,
"column": 3,
- "index": 19472
+ "index": 19466
}
},
{
@@ -981,12 +981,12 @@
"start": {
"line": 437,
"column": 25,
- "index": 19499
+ "index": 19493
},
"end": {
"line": 440,
"column": 3,
- "index": 19619
+ "index": 19613
}
},
{
@@ -996,12 +996,12 @@
"start": {
"line": 441,
"column": 8,
- "index": 19629
+ "index": 19623
},
"end": {
"line": 444,
"column": 3,
- "index": 19688
+ "index": 19682
}
},
{
@@ -1011,12 +1011,12 @@
"start": {
"line": 445,
"column": 14,
- "index": 19704
+ "index": 19698
},
"end": {
"line": 448,
"column": 3,
- "index": 19763
+ "index": 19757
}
},
{
@@ -1026,12 +1026,12 @@
"start": {
"line": 449,
"column": 23,
- "index": 19788
+ "index": 19782
},
"end": {
"line": 452,
"column": 3,
- "index": 19873
+ "index": 19867
}
},
{
@@ -1041,12 +1041,12 @@
"start": {
"line": 453,
"column": 18,
- "index": 19893
+ "index": 19887
},
"end": {
"line": 456,
"column": 3,
- "index": 19968
+ "index": 19962
}
},
{
@@ -1056,12 +1056,12 @@
"start": {
"line": 457,
"column": 24,
- "index": 19994
+ "index": 19988
},
"end": {
"line": 460,
"column": 3,
- "index": 20091
+ "index": 20085
}
},
{
@@ -1071,12 +1071,12 @@
"start": {
"line": 461,
"column": 29,
- "index": 20122
+ "index": 20116
},
"end": {
"line": 464,
"column": 3,
- "index": 20209
+ "index": 20203
}
},
{
@@ -1086,12 +1086,12 @@
"start": {
"line": 465,
"column": 31,
- "index": 20242
+ "index": 20236
},
"end": {
"line": 468,
"column": 3,
- "index": 20363
+ "index": 20357
}
},
{
@@ -1101,12 +1101,12 @@
"start": {
"line": 469,
"column": 23,
- "index": 20388
+ "index": 20382
},
"end": {
"line": 472,
"column": 3,
- "index": 20495
+ "index": 20489
}
},
{
@@ -1116,12 +1116,12 @@
"start": {
"line": 473,
"column": 29,
- "index": 20526
+ "index": 20520
},
"end": {
"line": 476,
"column": 3,
- "index": 20613
+ "index": 20607
}
},
{
@@ -1131,12 +1131,12 @@
"start": {
"line": 477,
"column": 30,
- "index": 20645
+ "index": 20639
},
"end": {
"line": 480,
"column": 3,
- "index": 20734
+ "index": 20728
}
},
{
@@ -1146,12 +1146,12 @@
"start": {
"line": 481,
"column": 32,
- "index": 20768
+ "index": 20762
},
"end": {
"line": 484,
"column": 3,
- "index": 20861
+ "index": 20855
}
},
{
@@ -1161,12 +1161,12 @@
"start": {
"line": 485,
"column": 34,
- "index": 20897
+ "index": 20891
},
"end": {
"line": 488,
"column": 3,
- "index": 20994
+ "index": 20988
}
},
{
@@ -1176,12 +1176,12 @@
"start": {
"line": 489,
"column": 26,
- "index": 21022
+ "index": 21016
},
"end": {
"line": 492,
"column": 3,
- "index": 21102
+ "index": 21096
}
},
{
@@ -1191,12 +1191,12 @@
"start": {
"line": 493,
"column": 23,
- "index": 21127
+ "index": 21121
},
"end": {
"line": 496,
"column": 3,
- "index": 21201
+ "index": 21195
}
},
{
@@ -1206,12 +1206,12 @@
"start": {
"line": 497,
"column": 19,
- "index": 21222
+ "index": 21216
},
"end": {
"line": 500,
"column": 3,
- "index": 21292
+ "index": 21286
}
},
{
@@ -1221,12 +1221,12 @@
"start": {
"line": 501,
"column": 27,
- "index": 21321
+ "index": 21315
},
"end": {
"line": 504,
"column": 3,
- "index": 21408
+ "index": 21402
}
},
{
@@ -1236,12 +1236,12 @@
"start": {
"line": 505,
"column": 25,
- "index": 21435
+ "index": 21429
},
"end": {
"line": 508,
"column": 3,
- "index": 21518
+ "index": 21512
}
},
{
@@ -1251,12 +1251,12 @@
"start": {
"line": 509,
"column": 27,
- "index": 21547
+ "index": 21541
},
"end": {
"line": 512,
"column": 3,
- "index": 21634
+ "index": 21628
}
},
{
@@ -1266,12 +1266,12 @@
"start": {
"line": 513,
"column": 18,
- "index": 21654
+ "index": 21648
},
"end": {
"line": 516,
"column": 3,
- "index": 21732
+ "index": 21726
}
},
{
@@ -1281,12 +1281,12 @@
"start": {
"line": 517,
"column": 26,
- "index": 21760
+ "index": 21754
},
"end": {
"line": 520,
"column": 3,
- "index": 21878
+ "index": 21872
}
},
{
@@ -1296,12 +1296,12 @@
"start": {
"line": 521,
"column": 18,
- "index": 21898
+ "index": 21892
},
"end": {
"line": 526,
"column": 3,
- "index": 22127
+ "index": 22121
}
},
{
@@ -1311,12 +1311,12 @@
"start": {
"line": 527,
"column": 13,
- "index": 22142
+ "index": 22136
},
"end": {
"line": 530,
"column": 3,
- "index": 22256
+ "index": 22250
}
},
{
@@ -1326,12 +1326,12 @@
"start": {
"line": 531,
"column": 26,
- "index": 22284
+ "index": 22278
},
"end": {
"line": 534,
"column": 3,
- "index": 22436
+ "index": 22430
}
},
{
@@ -1341,12 +1341,12 @@
"start": {
"line": 535,
"column": 24,
- "index": 22462
+ "index": 22456
},
"end": {
"line": 538,
"column": 3,
- "index": 22656
+ "index": 22650
}
},
{
@@ -1356,12 +1356,12 @@
"start": {
"line": 539,
"column": 19,
- "index": 22677
+ "index": 22671
},
"end": {
"line": 542,
"column": 3,
- "index": 22803
+ "index": 22797
}
},
{
@@ -1371,12 +1371,12 @@
"start": {
"line": 543,
"column": 18,
- "index": 22823
+ "index": 22817
},
"end": {
"line": 546,
"column": 3,
- "index": 22933
+ "index": 22927
}
},
{
@@ -1386,12 +1386,12 @@
"start": {
"line": 547,
"column": 22,
- "index": 22957
+ "index": 22951
},
"end": {
"line": 550,
"column": 3,
- "index": 23051
+ "index": 23045
}
},
{
@@ -1401,12 +1401,12 @@
"start": {
"line": 551,
"column": 26,
- "index": 23079
+ "index": 23073
},
"end": {
"line": 554,
"column": 3,
- "index": 23237
+ "index": 23231
}
},
{
@@ -1416,12 +1416,12 @@
"start": {
"line": 555,
"column": 20,
- "index": 23259
+ "index": 23253
},
"end": {
"line": 558,
"column": 3,
- "index": 23365
+ "index": 23359
}
},
{
@@ -1431,12 +1431,12 @@
"start": {
"line": 561,
"column": 11,
- "index": 23424
+ "index": 23418
},
"end": {
"line": 564,
"column": 3,
- "index": 23519
+ "index": 23513
}
},
{
@@ -1446,12 +1446,12 @@
"start": {
"line": 565,
"column": 12,
- "index": 23533
+ "index": 23527
},
"end": {
"line": 568,
"column": 3,
- "index": 23636
+ "index": 23630
}
},
{
@@ -1461,12 +1461,12 @@
"start": {
"line": 569,
"column": 9,
- "index": 23647
+ "index": 23641
},
"end": {
"line": 572,
"column": 3,
- "index": 23737
+ "index": 23731
}
},
{
@@ -1476,12 +1476,12 @@
"start": {
"line": 573,
"column": 16,
- "index": 23755
+ "index": 23749
},
"end": {
"line": 576,
"column": 3,
- "index": 23851
+ "index": 23845
}
},
{
@@ -1491,27 +1491,27 @@
"start": {
"line": 577,
"column": 20,
- "index": 23873
+ "index": 23867
},
"end": {
"line": 580,
"column": 3,
- "index": 23962
+ "index": 23956
}
},
{
- "id": "components.send.confirmscreen.confirmButton",
- "defaultMessage": "!!!Confirm",
+ "id": "global.next",
+ "defaultMessage": "!!!Next",
"file": "src/features/Swap/common/strings.ts",
"start": {
"line": 581,
- "column": 11,
- "index": 23975
+ "column": 8,
+ "index": 23966
},
"end": {
"line": 584,
"column": 3,
- "index": 24069
+ "index": 24025
}
},
{
@@ -1521,12 +1521,12 @@
"start": {
"line": 585,
"column": 20,
- "index": 24091
+ "index": 24047
},
"end": {
"line": 588,
"column": 3,
- "index": 24189
+ "index": 24145
}
},
{
@@ -1536,12 +1536,12 @@
"start": {
"line": 589,
"column": 22,
- "index": 24213
+ "index": 24169
},
"end": {
"line": 592,
"column": 3,
- "index": 24325
+ "index": 24281
}
},
{
@@ -1551,12 +1551,12 @@
"start": {
"line": 593,
"column": 22,
- "index": 24349
+ "index": 24305
},
"end": {
"line": 596,
"column": 3,
- "index": 24504
+ "index": 24460
}
},
{
@@ -1566,12 +1566,12 @@
"start": {
"line": 597,
"column": 28,
- "index": 24534
+ "index": 24490
},
"end": {
"line": 600,
"column": 3,
- "index": 24655
+ "index": 24611
}
},
{
@@ -1581,12 +1581,12 @@
"start": {
"line": 601,
"column": 23,
- "index": 24680
+ "index": 24636
},
"end": {
"line": 605,
"column": 3,
- "index": 24978
+ "index": 24934
}
},
{
@@ -1596,12 +1596,12 @@
"start": {
"line": 606,
"column": 17,
- "index": 24997
+ "index": 24953
},
"end": {
"line": 609,
"column": 3,
- "index": 25099
+ "index": 25055
}
},
{
@@ -1611,12 +1611,12 @@
"start": {
"line": 610,
"column": 16,
- "index": 25117
+ "index": 25073
},
"end": {
"line": 613,
"column": 3,
- "index": 25272
+ "index": 25228
}
},
{
@@ -1626,12 +1626,12 @@
"start": {
"line": 614,
"column": 18,
- "index": 25292
+ "index": 25248
},
"end": {
"line": 617,
"column": 3,
- "index": 25386
+ "index": 25342
}
},
{
@@ -1641,12 +1641,12 @@
"start": {
"line": 618,
"column": 20,
- "index": 25408
+ "index": 25364
},
"end": {
"line": 621,
"column": 3,
- "index": 25502
+ "index": 25458
}
},
{
@@ -1656,12 +1656,12 @@
"start": {
"line": 622,
"column": 19,
- "index": 25523
+ "index": 25479
},
"end": {
"line": 625,
"column": 3,
- "index": 25627
+ "index": 25583
}
},
{
@@ -1671,12 +1671,12 @@
"start": {
"line": 626,
"column": 23,
- "index": 25652
+ "index": 25608
},
"end": {
"line": 629,
"column": 3,
- "index": 25775
+ "index": 25731
}
},
{
@@ -1686,12 +1686,12 @@
"start": {
"line": 630,
"column": 10,
- "index": 25787
+ "index": 25743
},
"end": {
"line": 633,
"column": 3,
- "index": 25902
+ "index": 25858
}
},
{
@@ -1701,12 +1701,12 @@
"start": {
"line": 634,
"column": 20,
- "index": 25924
+ "index": 25880
},
"end": {
"line": 637,
"column": 3,
- "index": 26024
+ "index": 25980
}
},
{
@@ -1716,12 +1716,12 @@
"start": {
"line": 638,
"column": 12,
- "index": 26038
+ "index": 25994
},
"end": {
"line": 641,
"column": 3,
- "index": 26141
+ "index": 26097
}
},
{
@@ -1731,12 +1731,12 @@
"start": {
"line": 642,
"column": 24,
- "index": 26167
+ "index": 26123
},
"end": {
"line": 645,
"column": 3,
- "index": 26261
+ "index": 26217
}
},
{
@@ -1746,12 +1746,12 @@
"start": {
"line": 646,
"column": 23,
- "index": 26286
+ "index": 26242
},
"end": {
"line": 650,
"column": 3,
- "index": 26489
+ "index": 26445
}
},
{
@@ -1761,12 +1761,12 @@
"start": {
"line": 651,
"column": 31,
- "index": 26522
+ "index": 26478
},
"end": {
"line": 654,
"column": 3,
- "index": 26615
+ "index": 26571
}
},
{
@@ -1776,12 +1776,12 @@
"start": {
"line": 655,
"column": 31,
- "index": 26648
+ "index": 26604
},
"end": {
"line": 658,
"column": 3,
- "index": 26783
+ "index": 26739
}
},
{
@@ -1791,12 +1791,12 @@
"start": {
"line": 659,
"column": 19,
- "index": 26804
+ "index": 26760
},
"end": {
"line": 662,
"column": 3,
- "index": 26902
+ "index": 26858
}
},
{
@@ -1806,12 +1806,12 @@
"start": {
"line": 663,
"column": 22,
- "index": 26926
+ "index": 26882
},
"end": {
"line": 666,
"column": 3,
- "index": 27049
+ "index": 27005
}
},
{
@@ -1821,12 +1821,12 @@
"start": {
"line": 667,
"column": 24,
- "index": 27075
+ "index": 27031
},
"end": {
"line": 670,
"column": 3,
- "index": 27178
+ "index": 27134
}
},
{
@@ -1836,12 +1836,12 @@
"start": {
"line": 671,
"column": 30,
- "index": 27210
+ "index": 27166
},
"end": {
"line": 674,
"column": 3,
- "index": 27315
+ "index": 27271
}
},
{
@@ -1851,12 +1851,12 @@
"start": {
"line": 675,
"column": 25,
- "index": 27342
+ "index": 27298
},
"end": {
"line": 678,
"column": 3,
- "index": 27442
+ "index": 27398
}
},
{
@@ -1866,12 +1866,12 @@
"start": {
"line": 679,
"column": 15,
- "index": 27459
+ "index": 27415
},
"end": {
"line": 682,
"column": 3,
- "index": 27542
+ "index": 27498
}
},
{
@@ -1881,12 +1881,12 @@
"start": {
"line": 683,
"column": 23,
- "index": 27567
+ "index": 27523
},
"end": {
"line": 686,
"column": 3,
- "index": 27676
+ "index": 27632
}
},
{
@@ -1896,12 +1896,12 @@
"start": {
"line": 687,
"column": 30,
- "index": 27708
+ "index": 27664
},
"end": {
"line": 691,
"column": 3,
- "index": 27898
+ "index": 27854
}
},
{
@@ -1911,12 +1911,12 @@
"start": {
"line": 692,
"column": 34,
- "index": 27934
+ "index": 27890
},
"end": {
"line": 695,
"column": 3,
- "index": 28114
+ "index": 28070
}
},
{
@@ -1926,12 +1926,12 @@
"start": {
"line": 696,
"column": 19,
- "index": 28135
+ "index": 28091
},
"end": {
"line": 699,
"column": 3,
- "index": 28304
+ "index": 28260
}
},
{
@@ -1941,12 +1941,12 @@
"start": {
"line": 700,
"column": 11,
- "index": 28317
+ "index": 28273
},
"end": {
"line": 703,
"column": 3,
- "index": 28411
+ "index": 28367
}
},
{
@@ -1956,12 +1956,12 @@
"start": {
"line": 704,
"column": 20,
- "index": 28433
+ "index": 28389
},
"end": {
"line": 707,
"column": 3,
- "index": 28528
+ "index": 28484
}
}
]
\ No newline at end of file
diff --git a/apps/wallet-mobile/translations/messages/src/features/Transactions/TxHistoryNavigator.json b/apps/wallet-mobile/translations/messages/src/features/Transactions/TxHistoryNavigator.json
index 4d63427ed7..b3bc604f57 100644
--- a/apps/wallet-mobile/translations/messages/src/features/Transactions/TxHistoryNavigator.json
+++ b/apps/wallet-mobile/translations/messages/src/features/Transactions/TxHistoryNavigator.json
@@ -4,14 +4,14 @@
"defaultMessage": "!!!Receive",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 413,
+ "line": 404,
"column": 16,
- "index": 15106
+ "index": 14827
},
"end": {
- "line": 416,
+ "line": 407,
"column": 3,
- "index": 15195
+ "index": 14916
}
},
{
@@ -19,14 +19,14 @@
"defaultMessage": "!!!Address details",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 417,
+ "line": 408,
"column": 32,
- "index": 15229
+ "index": 14950
},
"end": {
- "line": 420,
+ "line": 411,
"column": 3,
- "index": 15342
+ "index": 15063
}
},
{
@@ -34,14 +34,14 @@
"defaultMessage": "!!!Swap",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 421,
+ "line": 412,
"column": 13,
- "index": 15357
+ "index": 15078
},
"end": {
- "line": 424,
+ "line": 415,
"column": 3,
- "index": 15430
+ "index": 15151
}
},
{
@@ -49,14 +49,14 @@
"defaultMessage": "!!!Swap from",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 425,
+ "line": 416,
"column": 17,
- "index": 15449
+ "index": 15170
},
"end": {
- "line": 428,
+ "line": 419,
"column": 3,
- "index": 15526
+ "index": 15247
}
},
{
@@ -64,14 +64,14 @@
"defaultMessage": "!!!Swap to",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 429,
+ "line": 420,
"column": 15,
- "index": 15543
+ "index": 15264
},
"end": {
- "line": 432,
+ "line": 423,
"column": 3,
- "index": 15616
+ "index": 15337
}
},
{
@@ -79,14 +79,14 @@
"defaultMessage": "!!!Swap review",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 433,
+ "line": 424,
"column": 19,
- "index": 15637
+ "index": 15358
},
"end": {
- "line": 436,
+ "line": 427,
"column": 3,
- "index": 15709
+ "index": 15430
}
},
{
@@ -94,14 +94,14 @@
"defaultMessage": "!!!Slippage Tolerance",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 437,
+ "line": 428,
"column": 21,
- "index": 15732
+ "index": 15453
},
"end": {
- "line": 440,
+ "line": 431,
"column": 3,
- "index": 15827
+ "index": 15548
}
},
{
@@ -109,14 +109,14 @@
"defaultMessage": "!!!Select pool",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 441,
+ "line": 432,
"column": 14,
- "index": 15843
+ "index": 15564
},
"end": {
- "line": 444,
+ "line": 435,
"column": 3,
- "index": 15924
+ "index": 15645
}
},
{
@@ -124,14 +124,14 @@
"defaultMessage": "!!!Send",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 445,
+ "line": 436,
"column": 13,
- "index": 15939
+ "index": 15660
},
"end": {
- "line": 448,
+ "line": 439,
"column": 3,
- "index": 16019
+ "index": 15740
}
},
{
@@ -139,14 +139,14 @@
"defaultMessage": "!!!Scan QR code address",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 449,
+ "line": 440,
"column": 18,
- "index": 16039
+ "index": 15760
},
"end": {
- "line": 452,
+ "line": 443,
"column": 3,
- "index": 16140
+ "index": 15861
}
},
{
@@ -154,14 +154,14 @@
"defaultMessage": "!!!Select asset",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 453,
+ "line": 444,
"column": 20,
- "index": 16162
+ "index": 15883
},
"end": {
- "line": 456,
+ "line": 447,
"column": 3,
- "index": 16251
+ "index": 15972
}
},
{
@@ -169,14 +169,14 @@
"defaultMessage": "!!!Assets added",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 457,
+ "line": 448,
"column": 26,
- "index": 16279
+ "index": 16000
},
"end": {
- "line": 460,
+ "line": 451,
"column": 3,
- "index": 16380
+ "index": 16101
}
},
{
@@ -184,14 +184,14 @@
"defaultMessage": "!!!Edit amount",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 461,
+ "line": 452,
"column": 19,
- "index": 16401
+ "index": 16122
},
"end": {
- "line": 464,
+ "line": 455,
"column": 3,
- "index": 16494
+ "index": 16215
}
},
{
@@ -199,14 +199,14 @@
"defaultMessage": "!!!Confirm",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 465,
+ "line": 456,
"column": 16,
- "index": 16512
+ "index": 16233
},
"end": {
- "line": 468,
+ "line": 459,
"column": 3,
- "index": 16598
+ "index": 16319
}
},
{
@@ -214,14 +214,14 @@
"defaultMessage": "!!!Share this address to receive payments. To protect your privacy, new addresses are generated automatically once you use them.",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 469,
+ "line": 460,
"column": 19,
- "index": 16619
+ "index": 16340
},
"end": {
- "line": 475,
+ "line": 466,
"column": 3,
- "index": 16857
+ "index": 16578
}
},
{
@@ -229,14 +229,14 @@
"defaultMessage": "!!!Confirm transaction",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 476,
+ "line": 467,
"column": 27,
- "index": 16886
+ "index": 16607
},
"end": {
- "line": 479,
+ "line": 470,
"column": 3,
- "index": 16979
+ "index": 16700
}
},
{
@@ -244,14 +244,14 @@
"defaultMessage": "!!!Please scan a QR code",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 480,
+ "line": 471,
"column": 13,
- "index": 16994
+ "index": 16715
},
"end": {
- "line": 483,
+ "line": 474,
"column": 3,
- "index": 17069
+ "index": 16790
}
},
{
@@ -259,14 +259,14 @@
"defaultMessage": "!!!Success",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 484,
+ "line": 475,
"column": 25,
- "index": 17096
+ "index": 16817
},
"end": {
- "line": 487,
+ "line": 478,
"column": 3,
- "index": 17170
+ "index": 16891
}
},
{
@@ -274,14 +274,14 @@
"defaultMessage": "!!!Request specific amount",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 488,
+ "line": 479,
"column": 18,
- "index": 17190
+ "index": 16911
},
"end": {
- "line": 491,
+ "line": 482,
"column": 3,
- "index": 17304
+ "index": 17025
}
},
{
@@ -289,14 +289,14 @@
"defaultMessage": "!!!Buy/Sell ADA",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 492,
+ "line": 483,
"column": 28,
- "index": 17334
+ "index": 17055
},
"end": {
- "line": 495,
+ "line": 486,
"column": 3,
- "index": 17430
+ "index": 17151
}
},
{
@@ -304,14 +304,14 @@
"defaultMessage": "!!!Buy provider",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 496,
+ "line": 487,
"column": 29,
- "index": 17461
+ "index": 17182
},
"end": {
- "line": 499,
+ "line": 490,
"column": 3,
- "index": 17569
+ "index": 17290
}
},
{
@@ -319,14 +319,14 @@
"defaultMessage": "!!!Sell provider",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 500,
+ "line": 491,
"column": 30,
- "index": 17601
+ "index": 17322
},
"end": {
- "line": 503,
+ "line": 494,
"column": 3,
- "index": 17711
+ "index": 17432
}
},
{
@@ -334,14 +334,14 @@
"defaultMessage": "!!!Tx Details",
"file": "src/features/Transactions/TxHistoryNavigator.tsx",
"start": {
- "line": 504,
+ "line": 495,
"column": 18,
- "index": 17731
+ "index": 17452
},
"end": {
- "line": 507,
+ "line": 498,
"column": 3,
- "index": 17825
+ "index": 17546
}
}
]
\ No newline at end of file
diff --git a/apps/wallet-mobile/translations/messages/src/legacy/Dashboard/UserSummary.json b/apps/wallet-mobile/translations/messages/src/legacy/Dashboard/UserSummary.json
index b7e2443dc7..05af0bc668 100644
--- a/apps/wallet-mobile/translations/messages/src/legacy/Dashboard/UserSummary.json
+++ b/apps/wallet-mobile/translations/messages/src/legacy/Dashboard/UserSummary.json
@@ -6,12 +6,12 @@
"start": {
"line": 163,
"column": 9,
- "index": 5306
+ "index": 4904
},
"end": {
"line": 166,
"column": 3,
- "index": 5408
+ "index": 5006
}
},
{
@@ -21,12 +21,12 @@
"start": {
"line": 167,
"column": 16,
- "index": 5426
+ "index": 5024
},
"end": {
"line": 170,
"column": 3,
- "index": 5536
+ "index": 5134
}
},
{
@@ -36,12 +36,12 @@
"start": {
"line": 171,
"column": 18,
- "index": 5556
+ "index": 5154
},
"end": {
"line": 174,
"column": 3,
- "index": 5670
+ "index": 5268
}
},
{
@@ -51,12 +51,12 @@
"start": {
"line": 175,
"column": 23,
- "index": 5695
+ "index": 5293
},
"end": {
"line": 178,
"column": 3,
- "index": 5807
+ "index": 5405
}
}
]
\ No newline at end of file