fix(@desktop/wallet): Swap modal - Pay input amount - deleting 1 decimal deletes the entire number

fixes #15818
This commit is contained in:
Khushboo Mehta 2024-07-30 11:18:15 +02:00 committed by Khushboo-dev-cpp
parent 7f046208da
commit 2447fa3554
2 changed files with 14 additions and 9 deletions

View File

@ -1788,8 +1788,10 @@ Item {
function test_deleteing_input_characters_data() {
return [
{input: "0.001"},
{input: "1.00015"},
{input: "0.001", locale: Qt.locale("en_US")},
{input: "1.00015", locale: Qt.locale("en_US")},
{input: "0.001", locale: Qt.locale("pl_PL")},
{input: "1.90015", locale: Qt.locale("pl_PL")},
/* TODO uncomment after https://discord.com/channels/@me/927512790296563712/1260937239140241408
{input: "100.000000000000151001"},
{input: "1.0200000000000151001"} */
@ -1804,6 +1806,7 @@ Item {
const amountToSendInput = findChild(controlUnderTest, "amountToSendInput")
verify(!!amountToSendInput)
amountToSendInput.input.locale = data.locale
// Launch popup
launchAndVerfyModal()
@ -1812,9 +1815,10 @@ Item {
//TODO: should not be needed after https://github.com/status-im/status-desktop/issues/15417
amountToSendInput.input.input.cursorPosition = data.input.length
let amountToTestInLocale = data.input.replace('.', amountToSendInput.input.locale.decimalPoint)
for(let i =0; i< data.input.length; i++) {
keyClick(Qt.Key_Backspace)
let expectedAmount = data.input.substring(0, data.input.length - (i+1))
let expectedAmount = amountToTestInLocale.substring(0, data.input.length - (i+1))
compare(amountToSendInput.input.text, expectedAmount)
}
}

View File

@ -108,15 +108,16 @@ Control {
amountToSendInput.input.input.edit.clear()
return
}
let amountToSet = SQUtils.AmountsArithmetic.fromString(tokenAmount).toFixed().replace('.', LocaleUtils.userInputLocale.decimalPoint)
let amountToSet = SQUtils.AmountsArithmetic.fromString(tokenAmount).toFixed()
/* When deleting characters after a decimal point
eg: 0.000001 being deleted we have 0.00000 and it should not be updated to 0
and thats why we compare with toFixed()
also when deleting a numbers last digit, we should not update the text to 0
instead it should remain empty as entered by the user*/
if (SQUtils.AmountsArithmetic.fromString(amountToSendInput.input.text).toFixed() !== amountToSet &&
instead it should remain empty as entered by the user */
let currentInputTextAmount = SQUtils.AmountsArithmetic.fromString(amountToSendInput.input.text.replace(amountToSendInput.input.locale.decimalPoint,'.')).toFixed()
if (currentInputTextAmount !== amountToSet &&
!(amountToSet === "0" && !amountToSendInput.input.text)) {
amountToSendInput.input.text = amountToSet
amountToSendInput.input.text = amountToSet.replace('.', amountToSendInput.input.locale.decimalPoint)
}
}
}
@ -264,13 +265,13 @@ Control {
readonly property double maxSafeValue: WalletUtils.calculateMaxSafeSendAmount(
d.maxInputBalance, d.inputSymbol)
readonly property string maxSafeValueAsString: maxSafeValue.toLocaleString(
LocaleUtils.userInputLocale, 'f', -128)
amountToSendInput.input.locale, 'f', -128)
markAsInvalid: (!amountToSendInput.input.valid && !!amountToSendInput.input.text)
|| d.maxInputBalance === 0
formattedValue:
d.maxInputBalance === 0 ? LocaleUtils.userInputLocale.zeroDigit
d.maxInputBalance === 0 ? amountToSendInput.input.locale.zeroDigit
: root.currencyStore.formatCurrencyAmount(
maxSafeValue, d.inputSymbol,
{ noSymbol: !amountToSendInput.inputIsFiat })