fix(Swap): Fixing the account balance in the swap modal

The root cause of this issue is the improper computation of the  `accountBalance`  expression role in the accounts model. Its value depends on another model (`filteredBalancesModel`) and by the time the expression role gets computed the proper `balance ` is not ready in the `filteredBalancesModel`.

This is a quick fix, but maybe the real fix should be restructuring the adapter and the model dependencies. I'd look out for any `ModelUtils` usage and replace it with a declarative approach if possible.
This commit is contained in:
Alex Jbanca 2024-07-15 14:17:42 +03:00 committed by Alex Jbanca
parent 73bcacbfc0
commit 9f40f0fada
2 changed files with 13 additions and 2 deletions

View File

@ -442,7 +442,7 @@ StatusDialog {
accountAddress: root.swapAdaptor.selectedAccount.address accountAddress: root.swapAdaptor.selectedAccount.address
accountEmoji: root.swapAdaptor.selectedAccount.emoji accountEmoji: root.swapAdaptor.selectedAccount.emoji
accountColor: Utils.getColorForId(root.swapAdaptor.selectedAccount.colorId) accountColor: Utils.getColorForId(root.swapAdaptor.selectedAccount.colorId)
accountBalanceFormatted: payPanel.accountBalanceFormatted // FIXME https://github.com/status-im/status-desktop/issues/15554 accountBalanceFormatted: root.swapAdaptor.selectedAccount.accountBalance.formattedBalance
networkShortName: networkFilter.singleSelectionItemData.shortName networkShortName: networkFilter.singleSelectionItemData.shortName
networkName: networkFilter.singleSelectionItemData.chainName networkName: networkFilter.singleSelectionItemData.chainName

View File

@ -38,6 +38,7 @@ QObject {
// Probably this data transformation should live there since they have common base. // Probably this data transformation should live there since they have common base.
readonly property var nonWatchAccounts: SortFilterProxyModel { readonly property var nonWatchAccounts: SortFilterProxyModel {
sourceModel: root.swapStore.accounts sourceModel: root.swapStore.accounts
delayed: true // Delayed to allow `processAccountBalance` dependencies to be resolved
filters: ValueFilter { filters: ValueFilter {
roleName: "canSend" roleName: "canSend"
value: true value: true
@ -49,7 +50,17 @@ QObject {
proxyRoles: [ proxyRoles: [
FastExpressionRole { FastExpressionRole {
name: "accountBalance" name: "accountBalance"
expression: d.processAccountBalance(model.address) expression: {
// dependencies
root.swapFormData.fromTokensKey
root.fromToken
root.fromToken.symbol
root.fromToken.decimals
root.swapFormData.selectedNetworkChainId
root.swapFormData.fromTokensKey
return d.processAccountBalance(model.address)
}
expectedRoles: ["address"] expectedRoles: ["address"]
}, },
FastExpressionRole { FastExpressionRole {