parent
ab523ee19f
commit
2fb158b810
|
@ -1,6 +1,7 @@
|
|||
import QtQuick 2.14
|
||||
|
||||
import StatusQ.Controls 0.1
|
||||
import StatusQ.Core 0.1
|
||||
|
||||
/*!
|
||||
\qmltype StatusFloatValidator
|
||||
|
@ -53,8 +54,9 @@ StatusValidator {
|
|||
name: "floatValidator"
|
||||
errorMessage: qsTr("Please enter a valid numeric value.")
|
||||
|
||||
validate: function (t) {
|
||||
return !isNaN(t) && t >= bottom && t <= top ? true : {
|
||||
validate: function (tStr) {
|
||||
var t = LocaleUtils.numberFromLocaleString(tStr, root.locale)
|
||||
return !isNaN(t) && t >= bottom && t <= top ? true : {
|
||||
bottom: bottom,
|
||||
top: top,
|
||||
actual: t
|
||||
|
|
|
@ -53,7 +53,7 @@ QtObject {
|
|||
try {
|
||||
return Number.fromLocaleString(locale, num)
|
||||
} catch (_) {
|
||||
return parseFloat(num)
|
||||
return NaN
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -78,7 +78,7 @@ QtObject {
|
|||
if (typeof(currencyAmount) !== "object") {
|
||||
console.warn("Wrong type for currencyAmount: " + JSON.stringify(currencyAmount))
|
||||
console.trace()
|
||||
return NaN
|
||||
return "N/A"
|
||||
}
|
||||
|
||||
// Parse options
|
||||
|
|
|
@ -63,11 +63,13 @@ Input {
|
|||
return
|
||||
}
|
||||
|
||||
try {
|
||||
d.amount = LocaleUtils.numberFromLocaleString(text) || 0
|
||||
let amount = LocaleUtils.numberFromLocaleString(text)
|
||||
if (isNaN(amount)) {
|
||||
d.amount = 0
|
||||
root.validationError = qsTr("Invalid amount format")
|
||||
} else {
|
||||
d.amount = amount
|
||||
root.validationError = ""
|
||||
} catch (err) {
|
||||
root.validationError = qsTr("Invalid amount format")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ StatusDialog {
|
|||
}
|
||||
|
||||
property var recalculateRoutesAndFees: Backpressure.debounce(popup, 600, function() {
|
||||
if(!!popup.selectedAccount && !!assetSelector.selectedAsset && d.recipientReady && amountToSendInput.input.valid) {
|
||||
if(!!popup.selectedAccount && !!assetSelector.selectedAsset && d.recipientReady && amountToSendInput.inputNumberValid) {
|
||||
popup.isLoading = true
|
||||
let amount = Math.round(amountToSendInput.cryptoValueToSend * Math.pow(10, assetSelector.selectedAsset.decimals))
|
||||
popup.store.suggestedRoutes(popup.selectedAccount.address, amount.toString(16), assetSelector.selectedAsset.symbol,
|
||||
|
@ -87,7 +87,7 @@ StatusDialog {
|
|||
readonly property double maxInputBalance: amountToSendInput.inputIsFiat ? maxFiatBalance : maxCryptoBalance
|
||||
readonly property string selectedSymbol: !!assetSelector.selectedAsset ? assetSelector.selectedAsset.symbol : ""
|
||||
readonly property string inputSymbol: amountToSendInput.inputIsFiat ? popup.store.currentCurrency : selectedSymbol
|
||||
readonly property bool errorMode: popup.isLoading || !recipientReady ? false : errorType !== Constants.NoError || networkSelector.errorMode || isNaN(amountToSendInput.input.text)
|
||||
readonly property bool errorMode: popup.isLoading || !recipientReady ? false : errorType !== Constants.NoError || networkSelector.errorMode || !amountToSendInput.inputNumberValid
|
||||
readonly property bool recipientReady: (isAddressValid || isENSValid) && !recipientSelector.isPending
|
||||
property bool isAddressValid: Utils.isValidAddress(popup.addressText)
|
||||
property bool isENSValid: false
|
||||
|
@ -253,7 +253,7 @@ StatusDialog {
|
|||
return RootStore.getNetworkIcon(chainId)
|
||||
}
|
||||
onSelectedAssetChanged: {
|
||||
if (!assetSelector.selectedAsset || !amountToSendInput.input.text || isNaN(amountToSendInput.input.text)) {
|
||||
if (!assetSelector.selectedAsset || !amountToSendInput.inputNumberValid) {
|
||||
return
|
||||
}
|
||||
popup.recalculateRoutesAndFees()
|
||||
|
@ -300,7 +300,7 @@ StatusDialog {
|
|||
id: amountToReceive
|
||||
Layout.alignment: Qt.AlignRight
|
||||
Layout.fillWidth:true
|
||||
visible: popup.bestRoutes !== undefined && popup.bestRoutes.length > 0 && !!amountToSendInput.input.text && amountToSendInput.input.valid
|
||||
visible: popup.bestRoutes !== undefined && popup.bestRoutes.length > 0 && amountToSendInput.inputNumberValid
|
||||
store: popup.store
|
||||
isLoading: popup.isLoading
|
||||
selectedSymbol: d.selectedSymbol
|
||||
|
@ -462,7 +462,7 @@ StatusDialog {
|
|||
requiredGasInEth: d.totalFeesInEth
|
||||
selectedAsset: assetSelector.selectedAsset
|
||||
onReCalculateSuggestedRoute: popup.recalculateRoutesAndFees()
|
||||
visible: d.recipientReady && !!assetSelector.selectedAsset && !!amountToSendInput.input.text
|
||||
visible: d.recipientReady && !!assetSelector.selectedAsset && amountToSendInput.inputNumberValid
|
||||
errorType: d.errorType
|
||||
isLoading: popup.isLoading
|
||||
bestRoutes: popup.bestRoutes
|
||||
|
@ -476,7 +476,7 @@ StatusDialog {
|
|||
anchors.right: parent.right
|
||||
anchors.leftMargin: Style.current.bigPadding
|
||||
anchors.rightMargin: Style.current.bigPadding
|
||||
visible: d.recipientReady && !!assetSelector.selectedAsset && networkSelector.advancedOrCustomMode && !!amountToSendInput.input.text
|
||||
visible: d.recipientReady && !!assetSelector.selectedAsset && networkSelector.advancedOrCustomMode && amountToSendInput.inputNumberValid
|
||||
selectedTokenSymbol: d.selectedSymbol
|
||||
isLoading: popup.isLoading
|
||||
bestRoutes: popup.bestRoutes
|
||||
|
@ -494,7 +494,7 @@ StatusDialog {
|
|||
maxFiatFees: popup.isLoading ? "..." : popup.currencyStore.formatCurrencyAmount(d.totalFeesInFiat, popup.store.currentCurrency)
|
||||
totalTimeEstimate: popup.isLoading? "..." : d.totalTimeEstimate
|
||||
pending: d.isPendingTx || popup.isLoading
|
||||
visible: d.recipientReady && amountToSendInput.cryptoValueToSend >= 0 && !d.errorMode && !!amountToSendInput.input.text && amountToSendInput.input.valid
|
||||
visible: d.recipientReady && amountToSendInput.inputNumberValid && !d.errorMode
|
||||
onNextButtonClicked: popup.sendTransaction()
|
||||
}
|
||||
|
||||
|
|
|
@ -981,6 +981,9 @@ QtObject {
|
|||
}
|
||||
|
||||
function formatCurrencyAmount(amount, symbol, options = null, locale = null) {
|
||||
if (isNaN(amount)) {
|
||||
return "N/A"
|
||||
}
|
||||
var currencyAmount = getCurrencyAmount(amount, symbol)
|
||||
return LocaleUtils.currencyAmountToLocaleString(currencyAmount, options, locale)
|
||||
}
|
||||
|
|
|
@ -13,7 +13,8 @@ ColumnLayout {
|
|||
id: root
|
||||
|
||||
property alias input: topAmountToSendInput
|
||||
readonly property double inputNumber: topAmountToSendInput.text ? LocaleUtils.numberFromLocaleString(topAmountToSendInput.text) : 0
|
||||
readonly property bool inputNumberValid: !!input.text && !isNaN(d.inputNumber)
|
||||
readonly property double inputNumber: inputNumberValid ? d.inputNumber : 0
|
||||
readonly property int minSendCryptoDecimals: !inputIsFiat ? LocaleUtils.fractionalPartLength(inputNumber) : 0
|
||||
readonly property int minReceiveCryptoDecimals: !inputIsFiat ? minSendCryptoDecimals + 1 : 0
|
||||
readonly property int minSendFiatDecimals: inputIsFiat ? LocaleUtils.fractionalPartLength(inputNumber) : 0
|
||||
|
@ -34,7 +35,7 @@ ColumnLayout {
|
|||
}
|
||||
delayed: true
|
||||
}
|
||||
property var fiatValueToSend
|
||||
property double fiatValueToSend
|
||||
Binding {
|
||||
target: root
|
||||
property: "fiatValueToSend"
|
||||
|
@ -54,6 +55,7 @@ ColumnLayout {
|
|||
QtObject {
|
||||
id: d
|
||||
readonly property string zeroString: LocaleUtils.numberToLocaleString(0, 2)
|
||||
readonly property double inputNumber: LocaleUtils.numberFromLocaleString(topAmountToSendInput.text)
|
||||
property Timer waitTimer: Timer {
|
||||
interval: 1000
|
||||
onTriggered: reCalculateSuggestedRoute()
|
||||
|
@ -100,8 +102,8 @@ ColumnLayout {
|
|||
font: topAmountToSendInput.input.placeholder.font
|
||||
}
|
||||
Keys.onReleased: {
|
||||
const amount = topAmountToSendInput.text.trim()
|
||||
if (!Utils.containsOnlyDigits(amount) || isNaN(amount)) {
|
||||
const amount = LocaleUtils.numberFromLocaleString(topAmountToSendInput.text)
|
||||
if (isNaN(amount)) {
|
||||
return
|
||||
}
|
||||
d.waitTimer.restart()
|
||||
|
|
|
@ -572,11 +572,6 @@ QtObject {
|
|||
return JSON.stringify({imagePath: String(imgPath).replace("file://", ""), cropRect: cropRect})
|
||||
}
|
||||
|
||||
function containsOnlyDigits(msg) {
|
||||
var reg = new RegExp('[+-]?([0-9]*[.])?[0-9]+')
|
||||
return reg.test(msg)
|
||||
}
|
||||
|
||||
function addSocialLinkPrefix(link, type) {
|
||||
const prefix = Constants.socialLinkPrefixesByType[type]
|
||||
if (link.startsWith(prefix))
|
||||
|
|
Loading…
Reference in New Issue