From 1fbdda398bf5180b15a659dd9c085b3fc0a034dc Mon Sep 17 00:00:00 2001 From: Lucas Araujo Date: Wed, 20 Apr 2022 14:25:21 -0300 Subject: [PATCH 1/8] [DDW-1086] Fix error message and display value to proceed --- source/renderer/app/api/api.ts | 13 ++++++++++--- source/renderer/app/api/errors.ts | 2 +- .../renderer/app/api/utils/apiHelpers.spec.ts | 16 ++-------------- source/renderer/app/api/utils/apiHelpers.ts | 17 +++++++++-------- .../app/i18n/locales/defaultMessages.json | 2 +- source/renderer/app/i18n/locales/en-US.json | 2 +- source/renderer/app/i18n/locales/ja-JP.json | 2 +- 7 files changed, 25 insertions(+), 29 deletions(-) diff --git a/source/renderer/app/api/api.ts b/source/renderer/app/api/api.ts index f1c7dbd24a..90c824a82f 100644 --- a/source/renderer/app/api/api.ts +++ b/source/renderer/app/api/api.ts @@ -95,7 +95,10 @@ import { import { filterLogData } from '../../../common/utils/logging'; import { derivationPathToAddressPath } from '../utils/hardwareWalletUtils'; // Config constants -import { LOVELACES_PER_ADA } from '../config/numbersConfig'; +import { + DECIMAL_PLACES_IN_ADA, + LOVELACES_PER_ADA, +} from '../config/numbersConfig'; import { SMASH_SERVER_STATUSES, SMASH_SERVERS_LIST, @@ -906,13 +909,17 @@ export default class AdaApi { const { requiresAdaToRemainToSupportNativeTokens, - adaToRemain, + adaToProceed, } = doesWalletRequireAdaToRemainToSupportTokens( error, hasAssetsRemainingAfterTransaction ); if (requiresAdaToRemainToSupportNativeTokens) { - apiError.set('cannotLeaveWalletEmpty', true, { adaToRemain }); + apiError.set('cannotLeaveWalletEmpty', true, { + adaAmount: new BigNumber(adaToProceed).toFormat( + DECIMAL_PLACES_IN_ADA + ), + }); } throw apiError.result(); diff --git a/source/renderer/app/api/errors.ts b/source/renderer/app/api/errors.ts index 9f0eee4578..70dd119bec 100644 --- a/source/renderer/app/api/errors.ts +++ b/source/renderer/app/api/errors.ts @@ -114,7 +114,7 @@ export const messages = defineMessages({ cannotLeaveWalletEmpty: { id: 'api.errors.NotEnoughFundsForTransactionFeesErrorWithTokens', defaultMessage: - '!!!Insufficient funds to support tokens. A minimum of {adaToRemain} ADA must remain in the wallet after this transaction.', + '!!!Insufficient funds to support tokens. You need at least an extra {adaAmount} ADA to make this transaction', description: '"Balance after transaction would not leave enough ada in the wallet to support tokens remaining in wallet', }, diff --git a/source/renderer/app/api/utils/apiHelpers.spec.ts b/source/renderer/app/api/utils/apiHelpers.spec.ts index 07fedfa470..8efd59139e 100644 --- a/source/renderer/app/api/utils/apiHelpers.spec.ts +++ b/source/renderer/app/api/utils/apiHelpers.spec.ts @@ -48,20 +48,8 @@ describe('throw error if not enough Ada to support tokens', () => { requiresAdaToRemainToSupportNativeTokens: false, }); }); - it('should throw if there are tokens remaining in wallet after transaction and error is "cannot_cover_fee" and round to 2 minimum ada', () => { - const error: ErrorType = { - message: - 'I am unable to finalize the transaction, as there is not enough ada available to pay for the fee and also pay for the minimum ada quantities of all change outputs. I need approximately 0.629344 ada to proceed. Try increasing your wallet balance or sending a smaller amount.', - code: 'cannot_cover_fee', - }; - - expect(doesWalletRequireAdaToRemainToSupportTokens(error, true)).toEqual({ - requiresAdaToRemainToSupportNativeTokens: true, - adaToRemain: 2, - }); - }); - it('should throw if there are tokens remaining in wallet after transaction and error is "cannot_cover_fee" and round to 2 nearest whole value provided by error', () => { + it('should throw if there are tokens remaining in wallet after transaction and error is "cannot_cover_fee"', () => { const error: ErrorType = { message: 'I am unable to finalize the transaction, as there is not enough ada available to pay for the fee and also pay for the minimum ada quantities of all change outputs. I need approximately 2.629344 ada to proceed. Try increasing your wallet balance or sending a smaller amount.', @@ -70,7 +58,7 @@ describe('throw error if not enough Ada to support tokens', () => { expect(doesWalletRequireAdaToRemainToSupportTokens(error, true)).toEqual({ requiresAdaToRemainToSupportNativeTokens: true, - adaToRemain: 3, + adaToProceed: '2.629344', }); }); }); diff --git a/source/renderer/app/api/utils/apiHelpers.ts b/source/renderer/app/api/utils/apiHelpers.ts index 85f51f2927..1623bfc087 100644 --- a/source/renderer/app/api/utils/apiHelpers.ts +++ b/source/renderer/app/api/utils/apiHelpers.ts @@ -27,22 +27,23 @@ export const doesWalletRequireAdaToRemainToSupportTokens = ( hasAssetsRemainingAfterTransaction?: boolean ): { requiresAdaToRemainToSupportNativeTokens: boolean; - adaToRemain?: number; + adaToProceed?: string; } => { const adaToProceedRegex = new RegExp( - /.*I need approximately([\s\d.,]+)ada to proceed.*/ + /I need approximately\s+([\d.,]+)\s+ada to proceed/ ); + const [, adaToProceed] = adaToProceedRegex.exec(error.message) ?? []; + if ( error.code === 'cannot_cover_fee' && hasAssetsRemainingAfterTransaction && - adaToProceedRegex.test(error.message) + adaToProceed ) { - const roundedAda = Math.ceil( - Number(error.message.replace(adaToProceedRegex, '$1')) - ); - const adaToRemain = roundedAda > 2 ? roundedAda : 2; - return { requiresAdaToRemainToSupportNativeTokens: true, adaToRemain }; + return { + requiresAdaToRemainToSupportNativeTokens: true, + adaToProceed, + }; } return { requiresAdaToRemainToSupportNativeTokens: false }; }; diff --git a/source/renderer/app/i18n/locales/defaultMessages.json b/source/renderer/app/i18n/locales/defaultMessages.json index afc1637c08..078a80ba89 100644 --- a/source/renderer/app/i18n/locales/defaultMessages.json +++ b/source/renderer/app/i18n/locales/defaultMessages.json @@ -287,7 +287,7 @@ } }, { - "defaultMessage": "!!!Insufficient funds to support tokens. A minimum of {adaToRemain} ADA must remain in the wallet after this transaction.", + "defaultMessage": "!!!Insufficient funds to support tokens. You need at least an extra {adaAmount} ADA to make this transaction", "description": "\"Balance after transaction would not leave enough ada in the wallet to support tokens remaining in wallet", "end": { "column": 3, diff --git a/source/renderer/app/i18n/locales/en-US.json b/source/renderer/app/i18n/locales/en-US.json index d041e7adf3..86889ea631 100755 --- a/source/renderer/app/i18n/locales/en-US.json +++ b/source/renderer/app/i18n/locales/en-US.json @@ -6,7 +6,7 @@ "api.errors.IncorrectPasswordError": "Incorrect wallet password.", "api.errors.NotEnoughFundsForTransactionError": "Not enough ada. Try sending a smaller amount.", "api.errors.NotEnoughFundsForTransactionFeesError": "Not enough ada for fees. Try sending a smaller amount.", - "api.errors.NotEnoughFundsForTransactionFeesErrorWithTokens": "Insufficient funds to support tokens. A minimum of {adaToRemain} ADA must remain in the wallet after this transaction.", + "api.errors.NotEnoughFundsForTransactionFeesErrorWithTokens": "Insufficient funds to support tokens. You need at least an extra {adaAmount} ADA to make this transaction.", "api.errors.NotEnoughMoneyToSendError": "Not enough money to make this transaction.", "api.errors.TooBigTransactionError": "Transaction too big due to too many inputs.", "api.errors.TooBigTransactionErrorLinkLabel": "Learn more.", diff --git a/source/renderer/app/i18n/locales/ja-JP.json b/source/renderer/app/i18n/locales/ja-JP.json index 753ebd5330..5f234ff6b8 100755 --- a/source/renderer/app/i18n/locales/ja-JP.json +++ b/source/renderer/app/i18n/locales/ja-JP.json @@ -6,7 +6,7 @@ "api.errors.IncorrectPasswordError": "ウォレットパスワードが間違っています", "api.errors.NotEnoughFundsForTransactionError": "ADAが不足しています。送金額を減らしてください。", "api.errors.NotEnoughFundsForTransactionFeesError": "手数料分のADAが不足しています。送金額を減らしてください。", - "api.errors.NotEnoughFundsForTransactionFeesErrorWithTokens": "トークンをサポートする資金が不足しています。このトランザクションの後に、ウォレットに{adaToRemain} ADA以上残るようにしてください。", + "api.errors.NotEnoughFundsForTransactionFeesErrorWithTokens": "Insufficient funds to support tokens. You need at least an extra {adaAmount} ADA to make this transaction.", "api.errors.NotEnoughMoneyToSendError": "このトランザクションに必要な資金が不足しています。", "api.errors.TooBigTransactionError": "入力過多によりトランザクションサイズが超過しています。", "api.errors.TooBigTransactionErrorLinkLabel": "もっと知る。", From 79efe1afcdfc28017ef5aec083df262826f97b65 Mon Sep 17 00:00:00 2001 From: Lucas Araujo Date: Wed, 20 Apr 2022 15:17:33 -0300 Subject: [PATCH 2/8] [DDW-1086] Update missing translation --- source/renderer/app/i18n/locales/ja-JP.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/renderer/app/i18n/locales/ja-JP.json b/source/renderer/app/i18n/locales/ja-JP.json index 5f234ff6b8..5121e165fe 100755 --- a/source/renderer/app/i18n/locales/ja-JP.json +++ b/source/renderer/app/i18n/locales/ja-JP.json @@ -248,7 +248,7 @@ "loading.screen.updatingCardanoMessage": "Cardanoノードを更新しています", "loading.screen.validatingChunk": "ディスクのブロックチェーンステータスの検証", "loading.screen.validatingChunkDescription": "ブロックチェーンのハッシュ計算の整合性を検証します", - "news.newsfeed.empty": "Newsfeed is empty", + "news.newsfeed.empty": "ニュースフィードは空です", "news.newsfeed.iconTooltip": "ニュースフィード", "news.newsfeed.noFetch": "ニュースフィードを読み込んでいます...", "news.newsfeed.title": "ニュースフィード", From c3102d74a9b99e69cc21667f21a3133af7879264 Mon Sep 17 00:00:00 2001 From: Lucas Araujo Date: Wed, 20 Apr 2022 15:35:32 -0300 Subject: [PATCH 3/8] [ddw-1086] CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 074000e552..1a40e222d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ ### Fixes +- Fixed phrasing of insufficient funds for tokens message ([PR 2966](https://github.com/input-output-hk/daedalus/pull/2966)) - Fixed PopOver overlap ([PR 2954](https://github.com/input-output-hk/daedalus/pull/2954)) - Fixed tooltip being hidden in several places ([PR-2934](https://github.com/input-output-hk/daedalus/pull/2934)) - Adjusted padding for search field in stake pools ([PR 2945](https://github.com/input-output-hk/daedalus/pull/2945)) From f43e7067dead52c8b678b814773ab1b3a8f3d7ea Mon Sep 17 00:00:00 2001 From: Lucas Araujo Date: Fri, 22 Apr 2022 09:57:28 -0300 Subject: [PATCH 4/8] [DDW-1086] Add translation --- source/renderer/app/api/errors.ts | 2 +- source/renderer/app/i18n/locales/defaultMessages.json | 2 +- source/renderer/app/i18n/locales/en-US.json | 2 +- source/renderer/app/i18n/locales/ja-JP.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/renderer/app/api/errors.ts b/source/renderer/app/api/errors.ts index 70dd119bec..e31530a78c 100644 --- a/source/renderer/app/api/errors.ts +++ b/source/renderer/app/api/errors.ts @@ -114,7 +114,7 @@ export const messages = defineMessages({ cannotLeaveWalletEmpty: { id: 'api.errors.NotEnoughFundsForTransactionFeesErrorWithTokens', defaultMessage: - '!!!Insufficient funds to support tokens. You need at least an extra {adaAmount} ADA to make this transaction', + '!!!Insufficient funds to support tokens. You need an additional {adaAmount} ADA to process this transaction.', description: '"Balance after transaction would not leave enough ada in the wallet to support tokens remaining in wallet', }, diff --git a/source/renderer/app/i18n/locales/defaultMessages.json b/source/renderer/app/i18n/locales/defaultMessages.json index 078a80ba89..89374d7388 100644 --- a/source/renderer/app/i18n/locales/defaultMessages.json +++ b/source/renderer/app/i18n/locales/defaultMessages.json @@ -287,7 +287,7 @@ } }, { - "defaultMessage": "!!!Insufficient funds to support tokens. You need at least an extra {adaAmount} ADA to make this transaction", + "defaultMessage": "!!!Insufficient funds to support tokens. You need an additional {adaAmount} ADA to process this transaction.", "description": "\"Balance after transaction would not leave enough ada in the wallet to support tokens remaining in wallet", "end": { "column": 3, diff --git a/source/renderer/app/i18n/locales/en-US.json b/source/renderer/app/i18n/locales/en-US.json index 86889ea631..dab1e9c7e5 100755 --- a/source/renderer/app/i18n/locales/en-US.json +++ b/source/renderer/app/i18n/locales/en-US.json @@ -6,7 +6,7 @@ "api.errors.IncorrectPasswordError": "Incorrect wallet password.", "api.errors.NotEnoughFundsForTransactionError": "Not enough ada. Try sending a smaller amount.", "api.errors.NotEnoughFundsForTransactionFeesError": "Not enough ada for fees. Try sending a smaller amount.", - "api.errors.NotEnoughFundsForTransactionFeesErrorWithTokens": "Insufficient funds to support tokens. You need at least an extra {adaAmount} ADA to make this transaction.", + "api.errors.NotEnoughFundsForTransactionFeesErrorWithTokens": "Insufficient funds to support tokens. You need an additional {adaAmount} ADA to process this transaction.", "api.errors.NotEnoughMoneyToSendError": "Not enough money to make this transaction.", "api.errors.TooBigTransactionError": "Transaction too big due to too many inputs.", "api.errors.TooBigTransactionErrorLinkLabel": "Learn more.", diff --git a/source/renderer/app/i18n/locales/ja-JP.json b/source/renderer/app/i18n/locales/ja-JP.json index 5121e165fe..c7960b8566 100755 --- a/source/renderer/app/i18n/locales/ja-JP.json +++ b/source/renderer/app/i18n/locales/ja-JP.json @@ -6,7 +6,7 @@ "api.errors.IncorrectPasswordError": "ウォレットパスワードが間違っています", "api.errors.NotEnoughFundsForTransactionError": "ADAが不足しています。送金額を減らしてください。", "api.errors.NotEnoughFundsForTransactionFeesError": "手数料分のADAが不足しています。送金額を減らしてください。", - "api.errors.NotEnoughFundsForTransactionFeesErrorWithTokens": "Insufficient funds to support tokens. You need at least an extra {adaAmount} ADA to make this transaction.", + "api.errors.NotEnoughFundsForTransactionFeesErrorWithTokens": "トークンをサポートする資金が不足しています。このトランザクションを処理するためには、あと{adaAmount} ADAが必要です。", "api.errors.NotEnoughMoneyToSendError": "このトランザクションに必要な資金が不足しています。", "api.errors.TooBigTransactionError": "入力過多によりトランザクションサイズが超過しています。", "api.errors.TooBigTransactionErrorLinkLabel": "もっと知る。", From 69566fbcb79fd5a79f055708dabf8d48c2c3901f Mon Sep 17 00:00:00 2001 From: Lucas Araujo Date: Fri, 13 May 2022 11:06:35 -0300 Subject: [PATCH 5/8] [DDW-1086] Update text and round up value --- source/renderer/app/api/api.ts | 9 ++------- source/renderer/app/api/errors.ts | 2 +- source/renderer/app/api/utils/apiHelpers.spec.ts | 2 +- source/renderer/app/api/utils/apiHelpers.ts | 4 ++-- source/renderer/app/i18n/locales/defaultMessages.json | 2 +- source/renderer/app/i18n/locales/en-US.json | 2 +- source/renderer/app/i18n/locales/ja-JP.json | 2 +- 7 files changed, 9 insertions(+), 14 deletions(-) diff --git a/source/renderer/app/api/api.ts b/source/renderer/app/api/api.ts index df14bdaf4b..340dabc1fa 100644 --- a/source/renderer/app/api/api.ts +++ b/source/renderer/app/api/api.ts @@ -95,10 +95,7 @@ import { import { filterLogData } from '../../../common/utils/logging'; import { derivationPathToAddressPath } from '../utils/hardwareWalletUtils'; // Config constants -import { - DECIMAL_PLACES_IN_ADA, - LOVELACES_PER_ADA, -} from '../config/numbersConfig'; +import { LOVELACES_PER_ADA } from '../config/numbersConfig'; import { SMASH_SERVER_STATUSES, SMASH_SERVERS_LIST, @@ -916,9 +913,7 @@ export default class AdaApi { ); if (requiresAdaToRemainToSupportNativeTokens) { apiError.set('cannotLeaveWalletEmpty', true, { - adaAmount: new BigNumber(adaToProceed).toFormat( - DECIMAL_PLACES_IN_ADA - ), + adaAmount: adaToProceed, }); } diff --git a/source/renderer/app/api/errors.ts b/source/renderer/app/api/errors.ts index e31530a78c..c3c6c8e0a1 100644 --- a/source/renderer/app/api/errors.ts +++ b/source/renderer/app/api/errors.ts @@ -114,7 +114,7 @@ export const messages = defineMessages({ cannotLeaveWalletEmpty: { id: 'api.errors.NotEnoughFundsForTransactionFeesErrorWithTokens', defaultMessage: - '!!!Insufficient funds to support tokens. You need an additional {adaAmount} ADA to process this transaction.', + '!!!Insufficient funds to support tokens. You need at least an additional {adaAmount} ADA amount in your wallet to process this transaction.', description: '"Balance after transaction would not leave enough ada in the wallet to support tokens remaining in wallet', }, diff --git a/source/renderer/app/api/utils/apiHelpers.spec.ts b/source/renderer/app/api/utils/apiHelpers.spec.ts index 8efd59139e..77b65515b8 100644 --- a/source/renderer/app/api/utils/apiHelpers.spec.ts +++ b/source/renderer/app/api/utils/apiHelpers.spec.ts @@ -58,7 +58,7 @@ describe('throw error if not enough Ada to support tokens', () => { expect(doesWalletRequireAdaToRemainToSupportTokens(error, true)).toEqual({ requiresAdaToRemainToSupportNativeTokens: true, - adaToProceed: '2.629344', + adaToProceed: 3, }); }); }); diff --git a/source/renderer/app/api/utils/apiHelpers.ts b/source/renderer/app/api/utils/apiHelpers.ts index 1623bfc087..8277cc29d4 100644 --- a/source/renderer/app/api/utils/apiHelpers.ts +++ b/source/renderer/app/api/utils/apiHelpers.ts @@ -27,7 +27,7 @@ export const doesWalletRequireAdaToRemainToSupportTokens = ( hasAssetsRemainingAfterTransaction?: boolean ): { requiresAdaToRemainToSupportNativeTokens: boolean; - adaToProceed?: string; + adaToProceed?: number; } => { const adaToProceedRegex = new RegExp( /I need approximately\s+([\d.,]+)\s+ada to proceed/ @@ -42,7 +42,7 @@ export const doesWalletRequireAdaToRemainToSupportTokens = ( ) { return { requiresAdaToRemainToSupportNativeTokens: true, - adaToProceed, + adaToProceed: Math.ceil(Number(adaToProceed)), }; } return { requiresAdaToRemainToSupportNativeTokens: false }; diff --git a/source/renderer/app/i18n/locales/defaultMessages.json b/source/renderer/app/i18n/locales/defaultMessages.json index 88e5da831e..5c83f96321 100644 --- a/source/renderer/app/i18n/locales/defaultMessages.json +++ b/source/renderer/app/i18n/locales/defaultMessages.json @@ -287,7 +287,7 @@ } }, { - "defaultMessage": "!!!Insufficient funds to support tokens. You need an additional {adaAmount} ADA to process this transaction.", + "defaultMessage": "!!!Insufficient funds to support tokens. You need at least an additional {adaAmount} ADA amount in your wallet to process this transaction.", "description": "\"Balance after transaction would not leave enough ada in the wallet to support tokens remaining in wallet", "end": { "column": 3, diff --git a/source/renderer/app/i18n/locales/en-US.json b/source/renderer/app/i18n/locales/en-US.json index e977771880..144291f2e0 100755 --- a/source/renderer/app/i18n/locales/en-US.json +++ b/source/renderer/app/i18n/locales/en-US.json @@ -6,7 +6,7 @@ "api.errors.IncorrectPasswordError": "Incorrect wallet password.", "api.errors.NotEnoughFundsForTransactionError": "Not enough ada. Try sending a smaller amount.", "api.errors.NotEnoughFundsForTransactionFeesError": "Not enough ada for fees. Try sending a smaller amount.", - "api.errors.NotEnoughFundsForTransactionFeesErrorWithTokens": "Insufficient funds to support tokens. You need an additional {adaAmount} ADA to process this transaction.", + "api.errors.NotEnoughFundsForTransactionFeesErrorWithTokens": "Insufficient funds to support tokens. You need at least an additional {adaAmount} ADA amount in your wallet to process this transaction.", "api.errors.NotEnoughMoneyToSendError": "Not enough money to make this transaction.", "api.errors.TooBigTransactionError": "Transaction too big due to too many inputs.", "api.errors.TooBigTransactionErrorLinkLabel": "Learn more.", diff --git a/source/renderer/app/i18n/locales/ja-JP.json b/source/renderer/app/i18n/locales/ja-JP.json index 6c1b08aaf5..ec7ed6cb81 100755 --- a/source/renderer/app/i18n/locales/ja-JP.json +++ b/source/renderer/app/i18n/locales/ja-JP.json @@ -6,7 +6,7 @@ "api.errors.IncorrectPasswordError": "ウォレットパスワードが間違っています", "api.errors.NotEnoughFundsForTransactionError": "ADAが不足しています。送金額を減らしてください。", "api.errors.NotEnoughFundsForTransactionFeesError": "手数料分のADAが不足しています。送金額を減らしてください。", - "api.errors.NotEnoughFundsForTransactionFeesErrorWithTokens": "トークンをサポートする資金が不足しています。このトランザクションを処理するためには、あと{adaAmount} ADAが必要です。", + "api.errors.NotEnoughFundsForTransactionFeesErrorWithTokens": "トークンをサポートする資金が不足しています。このトランザクションを処理するためには、ウォレットに少なくともあと{adaAmount} ADAが必要です。", "api.errors.NotEnoughMoneyToSendError": "このトランザクションに必要な資金が不足しています。", "api.errors.TooBigTransactionError": "入力過多によりトランザクションサイズが超過しています。", "api.errors.TooBigTransactionErrorLinkLabel": "もっと知る。", From 5b1e8bf46d3638fe01250e4b72202024376033b1 Mon Sep 17 00:00:00 2001 From: Lucas Araujo Date: Fri, 13 May 2022 12:53:24 -0300 Subject: [PATCH 6/8] [DDW-1086] Update text --- source/renderer/app/api/errors.ts | 2 +- source/renderer/app/i18n/locales/defaultMessages.json | 2 +- source/renderer/app/i18n/locales/en-US.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/renderer/app/api/errors.ts b/source/renderer/app/api/errors.ts index c3c6c8e0a1..0f0e84b501 100644 --- a/source/renderer/app/api/errors.ts +++ b/source/renderer/app/api/errors.ts @@ -114,7 +114,7 @@ export const messages = defineMessages({ cannotLeaveWalletEmpty: { id: 'api.errors.NotEnoughFundsForTransactionFeesErrorWithTokens', defaultMessage: - '!!!Insufficient funds to support tokens. You need at least an additional {adaAmount} ADA amount in your wallet to process this transaction.', + '!!!Insufficient funds to support tokens. You need at least an additional {adaAmount} ADA in your wallet to process this transaction.', description: '"Balance after transaction would not leave enough ada in the wallet to support tokens remaining in wallet', }, diff --git a/source/renderer/app/i18n/locales/defaultMessages.json b/source/renderer/app/i18n/locales/defaultMessages.json index 5c83f96321..49fdc1ff37 100644 --- a/source/renderer/app/i18n/locales/defaultMessages.json +++ b/source/renderer/app/i18n/locales/defaultMessages.json @@ -287,7 +287,7 @@ } }, { - "defaultMessage": "!!!Insufficient funds to support tokens. You need at least an additional {adaAmount} ADA amount in your wallet to process this transaction.", + "defaultMessage": "!!!Insufficient funds to support tokens. You need at least an additional {adaAmount} ADA in your wallet to process this transaction.", "description": "\"Balance after transaction would not leave enough ada in the wallet to support tokens remaining in wallet", "end": { "column": 3, diff --git a/source/renderer/app/i18n/locales/en-US.json b/source/renderer/app/i18n/locales/en-US.json index 144291f2e0..75ed38668a 100755 --- a/source/renderer/app/i18n/locales/en-US.json +++ b/source/renderer/app/i18n/locales/en-US.json @@ -6,7 +6,7 @@ "api.errors.IncorrectPasswordError": "Incorrect wallet password.", "api.errors.NotEnoughFundsForTransactionError": "Not enough ada. Try sending a smaller amount.", "api.errors.NotEnoughFundsForTransactionFeesError": "Not enough ada for fees. Try sending a smaller amount.", - "api.errors.NotEnoughFundsForTransactionFeesErrorWithTokens": "Insufficient funds to support tokens. You need at least an additional {adaAmount} ADA amount in your wallet to process this transaction.", + "api.errors.NotEnoughFundsForTransactionFeesErrorWithTokens": "Insufficient funds to support tokens. You need at least an additional {adaAmount} ADA in your wallet to process this transaction.", "api.errors.NotEnoughMoneyToSendError": "Not enough money to make this transaction.", "api.errors.TooBigTransactionError": "Transaction too big due to too many inputs.", "api.errors.TooBigTransactionErrorLinkLabel": "Learn more.", From 5830c412a3b0337ef3719e7319b0cfcca02cd94d Mon Sep 17 00:00:00 2001 From: Lucas Araujo Date: Mon, 16 May 2022 21:57:58 -0300 Subject: [PATCH 7/8] [DW-1086] Remove regex object --- source/renderer/app/api/utils/apiHelpers.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/renderer/app/api/utils/apiHelpers.ts b/source/renderer/app/api/utils/apiHelpers.ts index 8277cc29d4..08ed2ec5a1 100644 --- a/source/renderer/app/api/utils/apiHelpers.ts +++ b/source/renderer/app/api/utils/apiHelpers.ts @@ -29,9 +29,7 @@ export const doesWalletRequireAdaToRemainToSupportTokens = ( requiresAdaToRemainToSupportNativeTokens: boolean; adaToProceed?: number; } => { - const adaToProceedRegex = new RegExp( - /I need approximately\s+([\d.,]+)\s+ada to proceed/ - ); + const adaToProceedRegex = /I need approximately\s+([\d.,]+)\s+ada to proceed/; const [, adaToProceed] = adaToProceedRegex.exec(error.message) ?? []; From 721d1eda97b13bdc3c71acc70ab3b22d6d612cdf Mon Sep 17 00:00:00 2001 From: Lucas Araujo Date: Mon, 16 May 2022 21:58:56 -0300 Subject: [PATCH 8/8] [DW-1086] Fix hasAssetsAfterTransaction function --- .../dialogs/send-confirmation/helpers.spec.ts | 88 +++++++++++++++++++ .../dialogs/send-confirmation/helpers.ts | 34 +++++-- .../wallet/dialogs/send-confirmation/hooks.ts | 1 + .../wallet/dialogs/send-confirmation/types.ts | 7 +- 4 files changed, 124 insertions(+), 6 deletions(-) create mode 100644 source/renderer/app/containers/wallet/dialogs/send-confirmation/helpers.spec.ts diff --git a/source/renderer/app/containers/wallet/dialogs/send-confirmation/helpers.spec.ts b/source/renderer/app/containers/wallet/dialogs/send-confirmation/helpers.spec.ts new file mode 100644 index 0000000000..6b99ca8613 --- /dev/null +++ b/source/renderer/app/containers/wallet/dialogs/send-confirmation/helpers.spec.ts @@ -0,0 +1,88 @@ +import BigNumber from 'bignumber.js'; +import { hasAssetsAfterTransaction } from './helpers'; + +const assetWithOneQuantity = { + policyId: 'policyId1', + assetName: '54657374636f696e', + quantity: new BigNumber(1), + fingerprint: 'policyId154657374636f696e', + metadata: { + name: 'Testcoin', + description: 'Test coin', + }, + uniqueId: 'uniqueId1', + decimals: 1, + recommendedDecimals: null, +}; + +const assetWithTenQuantity = { + policyId: 'policyId2', + assetName: '436f696e74657374', + quantity: new BigNumber(10), + fingerprint: 'policyId2436f696e74657374', + uniqueId: 'uniqueId2', + decimals: 1, + recommendedDecimals: null, +}; + +describe('hasAssetsAfterTransaction', () => { + test('Should be true when wallet has assets and tx sending no assets', () => { + expect( + hasAssetsAfterTransaction({ + assetTokens: [assetWithOneQuantity, assetWithTenQuantity], + selectedAssets: [], + assetsAmounts: [], + }) + ).toEqual(true); + }); + + test('Should be true when wallet has assets and tx is not sending all asset types', () => { + expect( + hasAssetsAfterTransaction({ + assetTokens: [assetWithOneQuantity, assetWithTenQuantity], + selectedAssets: [assetWithTenQuantity], + assetsAmounts: ['5'], + }) + ).toEqual(true); + }); + + test('Should be true when wallet has assets and tx is not sending all assets', () => { + expect( + hasAssetsAfterTransaction({ + assetTokens: [assetWithOneQuantity, assetWithTenQuantity], + selectedAssets: [assetWithOneQuantity, assetWithTenQuantity], + assetsAmounts: ['1', '5'], + }) + ).toEqual(true); + }); + + test('Should be false when wallet has no assets', () => { + expect( + hasAssetsAfterTransaction({ + assetTokens: [], + selectedAssets: [], + assetsAmounts: [], + }) + ).toEqual(false); + }); + + test('Should be false when tx is sending all assets (1 asset)', () => { + expect( + hasAssetsAfterTransaction({ + assetTokens: [assetWithOneQuantity], + selectedAssets: [assetWithOneQuantity], + assetsAmounts: ['1'], + }) + ).toEqual(false); + }); + + test('Should be false when tx is sending all assets (2 assets)', () => { + expect( + hasAssetsAfterTransaction({ + assetTokens: [assetWithOneQuantity, assetWithTenQuantity], + selectedAssets: [assetWithOneQuantity, assetWithTenQuantity], + assetsAmounts: ['1', '10'], + }) + ).toEqual(false); + }); +}); diff --git a/source/renderer/app/containers/wallet/dialogs/send-confirmation/helpers.ts b/source/renderer/app/containers/wallet/dialogs/send-confirmation/helpers.ts index 59dfe902c5..540ce70ec3 100644 --- a/source/renderer/app/containers/wallet/dialogs/send-confirmation/helpers.ts +++ b/source/renderer/app/containers/wallet/dialogs/send-confirmation/helpers.ts @@ -7,7 +7,12 @@ import { AssetToken } from '../../../../api/assets/types'; import { HwDeviceStatuses } from '../../../../domains/Wallet'; import { FORM_VALIDATION_DEBOUNCE_WAIT } from '../../../../config/timingConfig'; import { formattedTokenWalletAmount } from '../../../../utils/formatters'; -import { CreateForm, FormFields, HasAssetsAfterTransaction } from './types'; +import { + CreateForm, + FormFields, + HasAssetsAfterTransaction, + IsSendingAllFromSelected, +} from './types'; export const doTermsNeedAcceptance = ({ isFlight, areTermsAccepted }) => !areTermsAccepted && isFlight; @@ -25,13 +30,32 @@ export const isNotEnoughFundsForTokenError = (errorId) => export const isPasswordValid = ({ isHardwareWallet, isValid }) => isHardwareWallet || isValid; +export const isSendingAllFromSelected = ({ + selectedAssets = [], + assetsAmounts = [], +}: IsSendingAllFromSelected) => + Boolean(selectedAssets.length) && + selectedAssets.every(({ quantity }, i) => + quantity.isEqualTo(assetsAmounts?.[i]) + ); + export const hasAssetsAfterTransaction = ({ selectedAssets = [], assetTokens = [], -}: HasAssetsAfterTransaction) => - selectedAssets.length - ? selectedAssets.length < assetTokens.length - : assetTokens.length > 0; + assetsAmounts = [], +}: HasAssetsAfterTransaction) => { + const sendingTokens = Boolean(selectedAssets.length); + const hasTokens = Boolean(assetTokens.length); + const sendingAllTokenTypes = selectedAssets.length === assetTokens.length; + const sendingAllFromSelected = isSendingAllFromSelected({ + assetsAmounts, + selectedAssets, + }); + + return sendingTokens + ? !(sendingAllTokenTypes && sendingAllFromSelected) + : hasTokens; +}; export const getFormattedAssetAmount = ( { metadata, decimals }: AssetToken, diff --git a/source/renderer/app/containers/wallet/dialogs/send-confirmation/hooks.ts b/source/renderer/app/containers/wallet/dialogs/send-confirmation/hooks.ts index 4e168fb557..d5cdd82351 100644 --- a/source/renderer/app/containers/wallet/dialogs/send-confirmation/hooks.ts +++ b/source/renderer/app/containers/wallet/dialogs/send-confirmation/hooks.ts @@ -39,6 +39,7 @@ export const useForm = ({ hasAssetsRemainingAfterTransaction: hasAssetsAfterTransaction({ assetTokens, selectedAssets, + assetsAmounts, }), ...(selectedAssets.length ? { assets: selectedAssets, assetsAmounts } diff --git a/source/renderer/app/containers/wallet/dialogs/send-confirmation/types.ts b/source/renderer/app/containers/wallet/dialogs/send-confirmation/types.ts index 5df99942b0..caeebbc1da 100644 --- a/source/renderer/app/containers/wallet/dialogs/send-confirmation/types.ts +++ b/source/renderer/app/containers/wallet/dialogs/send-confirmation/types.ts @@ -94,5 +94,10 @@ export type CreateForm = Pick; export type HasAssetsAfterTransaction = Pick< ViewProps, - 'assetTokens' | 'selectedAssets' + 'assetTokens' | 'selectedAssets' | 'assetsAmounts' +>; + +export type IsSendingAllFromSelected = Pick< + ViewProps, + 'selectedAssets' | 'assetsAmounts' >;