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 preSelectedHoldingID: loader.preSelectedHoldingID
preSelectedHoldingType: loader.preSelectedHoldingType preSelectedHoldingType: loader.preSelectedHoldingType
showCustomRoutingMode: ctrlShowCustomMode.checked showCustomRoutingMode: ctrlShowCustomMode.checked
generateUuid: () => { return "12345" }
sendTransaction: () => { sendTransaction: () => {
if (!showSendErrorCheckBox.checked) if (!showSendErrorCheckBox.checked)
return 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 Component.onCompleted: loader.active = true

View File

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