fix(wallet): debounce send modal route requests and assign new uuid on each fetch

This commit is contained in:
Dario Gabriel Lipicar 2024-10-22 12:24:54 -03:00 committed by dlipicar
parent 0962497e89
commit f34050a5bc
2 changed files with 34 additions and 19 deletions

View File

@ -212,12 +212,11 @@ SplitView {
preSelectedHoldingID: loader.preSelectedHoldingID
preSelectedHoldingType: loader.preSelectedHoldingType
showCustomRoutingMode: ctrlShowCustomMode.checked
generateUuid: () => { return "12345" }
sendTransaction: () => {
if (!showSendErrorCheckBox.checked)
return
txStore.walletSectionSendInst.transactionSent(1, "0x123", generateUuid(), "Send error, please ignore")
txStore.walletSectionSendInst.transactionSent(1, "0x123", uuid, "Send error, please ignore")
}
}
Component.onCompleted: loader.active = true

View File

@ -73,17 +73,7 @@ StatusDialog {
popup.store.authenticateAndTransfer(d.uuid)
}
property var recalculateRoutesAndFees: Backpressure.debounce(popup, 600, function() {
if(!!popup.selectedAccount && !!popup.selectedAccount.address && !!holdingSelector.selectedItem
&& recipientInputLoader.ready && (amountToSend.ready || d.isCollectiblesTransfer)) {
popup.isLoading = true
d.routerError = ""
d.routerErrorDetails = ""
popup.store.suggestedRoutes(d.uuid, d.isCollectiblesTransfer ? "1" : amountToSend.amount, "0", d.extraParamsJson)
}
})
property var generateUuid: () => { return Utils.uuid() }
readonly property string uuid: d.uuid
QtObject {
id: d
@ -131,7 +121,7 @@ StatusDialog {
property string sendError: ""
readonly property string uuid: popup.generateUuid()
property string uuid: Utils.uuid()
property bool isPendingTx: false
property string totalTimeEstimate
property double totalFeesInFiat
@ -172,6 +162,27 @@ StatusDialog {
function addMetricsEvent(subEventName) {
Global.addCentralizedMetricIfEnabled(d.isBridgeTx ? "bridge" : "send", {subEvent: subEventName})
}
function areInputParametersValid() {
return !!popup.selectedAccount && !!popup.selectedAccount.address && !!holdingSelector.selectedItem
&& recipientInputLoader.ready && (amountToSend.ready || d.isCollectiblesTransfer)
}
property var debounceRecalculateRoutesAndFees: Backpressure.debounce(popup, 1000, function() {
if(d.areInputParametersValid()) {
popup.store.suggestedRoutes(d.uuid, d.isCollectiblesTransfer ? "1" : amountToSend.amount, "0", d.extraParamsJson)
}
})
function recalculateRoutesAndFees() {
if(d.areInputParametersValid()) {
popup.isLoading = true
}
d.uuid = Utils.uuid()
d.routerError = ""
d.routerErrorDetails = ""
debounceRecalculateRoutesAndFees()
}
}
LeftJoinModel {
@ -315,7 +326,7 @@ StatusDialog {
d.selectedHolding.tokensKey)
}
popup.recalculateRoutesAndFees()
d.recalculateRoutesAndFees()
}
}
}
@ -530,12 +541,12 @@ StatusDialog {
onValidChanged: {
d.sendError = ""
popup.recalculateRoutesAndFees()
d.recalculateRoutesAndFees()
}
onAmountChanged: {
d.sendError = ""
popup.recalculateRoutesAndFees()
d.recalculateRoutesAndFees()
}
}
@ -584,7 +595,7 @@ StatusDialog {
onIsLoading: popup.isLoading = true
onRecalculateRoutesAndFees: {
d.sendError = ""
popup.recalculateRoutesAndFees()
d.recalculateRoutesAndFees()
}
onAddressTextChanged: store.setSelectedRecipient(addressText)
}
@ -670,7 +681,7 @@ StatusDialog {
selectedAsset: d.selectedHolding
onReCalculateSuggestedRoute: {
d.sendError = ""
popup.recalculateRoutesAndFees()
d.recalculateRoutesAndFees()
}
errorType: d.errorType
isLoading: popup.isLoading
@ -749,6 +760,11 @@ StatusDialog {
Connections {
target: popup.store.walletSectionSendInst
function onSuggestedRoutesReady(txRoutes, errCode, errDescription) {
if (txRoutes.uuid !== d.uuid) {
// Suggested routes for a different fetch, ignore
return
}
popup.bestRoutes = txRoutes.suggestedRoutes
d.routerError = WalletUtils.getRouterErrorBasedOnCode(errCode)