From 76615b0bf750e742c529846058a99178f458b041 Mon Sep 17 00:00:00 2001 From: Khushboo Mehta Date: Wed, 20 Sep 2023 18:07:09 +0200 Subject: [PATCH] fix(@desktop/wallet): Move selected recipient and send type to nim fixes #12206 --- .../main/wallet_section/send/controller.nim | 4 +- .../main/wallet_section/send/io_interface.nim | 4 +- .../main/wallet_section/send/module.nim | 6 +- .../modules/main/wallet_section/send/view.nim | 40 +++++++++-- .../service/transaction/async_tasks.nim | 6 +- .../service/transaction/service.nim | 8 +-- ui/app/AppLayouts/Browser/BrowserLayout.qml | 1 - .../Profile/views/EnsDetailsView.qml | 4 +- .../Profile/views/EnsSearchView.qml | 4 +- .../views/EnsTermsAndConditionsView.qml | 4 +- ui/app/AppLayouts/Wallet/WalletLayout.qml | 4 +- ui/app/mainui/AppMain.qml | 16 ++--- ui/imports/shared/popups/send/SendModal.qml | 67 +++++++++---------- .../shared/status/StatusStickerMarket.qml | 4 +- .../status/StatusStickerPackClickPopup.qml | 4 +- .../shared/stores/send/TransactionStore.qml | 18 +++-- ui/imports/utils/Constants.qml | 3 +- 17 files changed, 111 insertions(+), 86 deletions(-) diff --git a/src/app/modules/main/wallet_section/send/controller.nim b/src/app/modules/main/wallet_section/send/controller.nim index 21f0d1614a..e35bb419e1 100644 --- a/src/app/modules/main/wallet_section/send/controller.nim +++ b/src/app/modules/main/wallet_section/send/controller.nim @@ -88,12 +88,12 @@ proc authenticateUser*(self: Controller, keyUid = "") = keyUid: keyUid) self.events.emit(SIGNAL_SHARED_KEYCARD_MODULE_AUTHENTICATE_USER, data) -proc suggestedRoutes*(self: Controller, account: string, amount: Uint256, token: string, disabledFromChainIDs, disabledToChainIDs, preferredChainIDs: seq[int], sendType: int, lockedInAmounts: string): string = +proc suggestedRoutes*(self: Controller, account: string, amount: Uint256, token: string, disabledFromChainIDs, disabledToChainIDs, preferredChainIDs: seq[int], sendType: SendType, lockedInAmounts: string): string = let suggestedRoutes = self.transactionService.suggestedRoutes(account, amount, token, disabledFromChainIDs, disabledToChainIDs, preferredChainIDs, sendType, lockedInAmounts) return suggestedRoutes.toJson() proc transfer*(self: Controller, from_addr: string, to_addr: string, tokenSymbol: string, - value: string, uuid: string, selectedRoutes: seq[TransactionPathDto], password: string, sendType: int) = + value: string, uuid: string, selectedRoutes: seq[TransactionPathDto], password: string, sendType: SendType) = self.transactionService.transfer(from_addr, to_addr, tokenSymbol, value, uuid, selectedRoutes, password, sendType) proc areTestNetworksEnabled*(self: Controller): bool = diff --git a/src/app/modules/main/wallet_section/send/io_interface.nim b/src/app/modules/main/wallet_section/send/io_interface.nim index 6a42984c18..e67b3ad780 100644 --- a/src/app/modules/main/wallet_section/send/io_interface.nim +++ b/src/app/modules/main/wallet_section/send/io_interface.nim @@ -23,14 +23,14 @@ method refreshWalletAccounts*(self: AccessInterface) {.base.} = method getTokenBalanceOnChain*(self: AccessInterface, address: string, chainId: int, symbol: string): CurrencyAmount {.base.} = raise newException(ValueError, "No implementation available") -method suggestedRoutes*(self: AccessInterface, account: string, amount: UInt256, token: string, disabledFromChainIDs, disabledToChainIDs, preferredChainIDs: seq[int], sendType: int, lockedInAmounts: string): string {.base.} = +method suggestedRoutes*(self: AccessInterface, account: string, amount: UInt256, token: string, disabledFromChainIDs, disabledToChainIDs, preferredChainIDs: seq[int], sendType: SendType, lockedInAmounts: string): string {.base.} = raise newException(ValueError, "No implementation available") method suggestedRoutesReady*(self: AccessInterface, suggestedRoutes: SuggestedRoutesDto) {.base.} = raise newException(ValueError, "No implementation available") method authenticateAndTransfer*(self: AccessInterface, from_addr: string, to_addr: string, - tokenSymbol: string, value: string, uuid: string, sendType: int) {.base.} = + tokenSymbol: string, value: string, uuid: string, sendType: SendType) {.base.} = raise newException(ValueError, "No implementation available") method onUserAuthenticated*(self: AccessInterface, password: string) {.base.} = diff --git a/src/app/modules/main/wallet_section/send/module.nim b/src/app/modules/main/wallet_section/send/module.nim index 948a86eccf..c00190b84a 100644 --- a/src/app/modules/main/wallet_section/send/module.nim +++ b/src/app/modules/main/wallet_section/send/module.nim @@ -30,7 +30,7 @@ type TmpSendTransactionDetails = object value: string paths: seq[TransactionPathDto] uuid: string - sendType: int + sendType: SendType type Module* = ref object of io_interface.AccessInterface @@ -242,7 +242,7 @@ method viewDidLoad*(self: Module) = method getTokenBalanceOnChain*(self: Module, address: string, chainId: int, symbol: string): CurrencyAmount = return self.controller.getTokenBalanceOnChain(address, chainId, symbol) -method authenticateAndTransfer*(self: Module, from_addr: string, to_addr: string, tokenSymbol: string, value: string, uuid: string, sendType: int) = +method authenticateAndTransfer*(self: Module, from_addr: string, to_addr: string, tokenSymbol: string, value: string, uuid: string, sendType: SendType) = self.tmpSendTransactionDetails.fromAddr = from_addr self.tmpSendTransactionDetails.toAddr = to_addr self.tmpSendTransactionDetails.tokenSymbol = tokenSymbol @@ -290,7 +290,7 @@ method onUserAuthenticated*(self: Module, password: string) = method transactionWasSent*(self: Module, chainId: int, txHash, uuid, error: string) = self.view.transactionWasSent(chainId, txHash, uuid, error) -method suggestedRoutes*(self: Module, account: string, amount: UInt256, token: string, disabledFromChainIDs, disabledToChainIDs, preferredChainIDs: seq[int], sendType: int, lockedInAmounts: string): string = +method suggestedRoutes*(self: Module, account: string, amount: UInt256, token: string, disabledFromChainIDs, disabledToChainIDs, preferredChainIDs: seq[int], sendType: SendType, lockedInAmounts: string): string = return self.controller.suggestedRoutes(account, amount, token, disabledFromChainIDs, disabledToChainIDs, preferredChainIDs, sendType, lockedInAmounts) method suggestedRoutesReady*(self: Module, suggestedRoutes: SuggestedRoutesDto) = diff --git a/src/app/modules/main/wallet_section/send/view.nim b/src/app/modules/main/wallet_section/send/view.nim index 87dd478e07..9986de31c4 100644 --- a/src/app/modules/main/wallet_section/send/view.nim +++ b/src/app/modules/main/wallet_section/send/view.nim @@ -4,6 +4,7 @@ import ./io_interface, ./accounts_model, ./account_item, ./network_model, ./netw import app/modules/shared_models/token_model import app/modules/shared_models/collectibles_model as collectibles import app/modules/shared_models/collectibles_nested_model as nested_collectibles +import app_service/service/transaction/dto as transaction_dto QtObject: type @@ -22,6 +23,8 @@ QtObject: transactionRoutes: TransactionRoutes selectedAssetSymbol: string showUnPreferredChains: bool + sendType: transaction_dto.SendType + selectedRecipient: string # for receive modal selectedReceiveAccount: AccountItem @@ -143,6 +146,28 @@ QtObject: read = getShowUnPreferredChains notify = showUnPreferredChainsChanged + proc sendTypeChanged*(self: View) {.signal.} + proc getSendType(self: View): int {.slot.} = + return ord(self.sendType) + proc setSendType(self: View, sendType: int) {.slot.} = + self.sendType = (SendType)sendType + self.sendTypeChanged() + QtProperty[int] sendType: + write = setSendType + read = getSendType + notify = sendTypeChanged + + proc selectedRecipientChanged*(self: View) {.signal.} + proc getSelectedRecipient(self: View): string {.slot.} = + return self.selectedRecipient + proc setSelectedRecipient(self: View, selectedRecipient: string) {.slot.} = + self.selectedRecipient = selectedRecipient + self.selectedRecipientChanged() + QtProperty[string] selectedRecipient: + read = getSelectedRecipient + write = setSelectedRecipient + notify = selectedRecipientChanged + proc updateNetworksDisabledChains(self: View) = # if the setting to show unpreferred chains is toggled, add all unpreferred chains to disabled chains list if not self.showUnPreferredChains: @@ -172,15 +197,14 @@ QtObject: proc transactionWasSent*(self: View, chainId: int, txHash: string, uuid: string, error: string) {.slot} = self.transactionSent(chainId, txHash, uuid, error) - proc authenticateAndTransfer*(self: View, from_addr: string, to_addr: string, tokenSymbol: string, - value: string, uuid: string, sendType: int) {.slot.} = - self.delegate.authenticateAndTransfer(from_addr, to_addr, tokenSymbol, value, uuid, sendType) + proc authenticateAndTransfer*(self: View, value: string, uuid: string) {.slot.} = + self.delegate.authenticateAndTransfer(self.selectedSenderAccount.address(), self.selectedRecipient, self.selectedAssetSymbol, value, uuid, self.sendType) proc suggestedRoutesReady*(self: View, suggestedRoutes: QVariant) {.signal.} proc setTransactionRoute*(self: View, routes: TransactionRoutes) = - self.transactionRoutes = routes - self.suggestedRoutesReady(newQVariant(self.transactionRoutes)) - proc suggestedRoutes*(self: View, amount: string, sendType: int): string {.slot.} = + self.transactionRoutes = routes + self.suggestedRoutesReady(newQVariant(self.transactionRoutes)) + proc suggestedRoutes*(self: View, amount: string): string {.slot.} = var parsedAmount = stint.u256(0) try: parsedAmount = amount.parse(Uint256) @@ -189,7 +213,7 @@ QtObject: return self.delegate.suggestedRoutes(self.selectedSenderAccount.address(), parsedAmount, self.selectedAssetSymbol, self.fromNetworksModel.getRouteDisabledNetworkChainIds(), - self.toNetworksModel.getRouteDisabledNetworkChainIds(), self.toNetworksModel.getRoutePreferredNetworkChainIds(), sendType, self.fromNetworksModel.getRouteLockedChainIds()) + self.toNetworksModel.getRouteDisabledNetworkChainIds(), self.toNetworksModel.getRoutePreferredNetworkChainIds(), self.sendType, self.fromNetworksModel.getRouteLockedChainIds()) proc switchSenderAccountByAddress*(self: View, address: string) = let (account, index) = self.senderAccounts.getItemByAddress(address) @@ -235,6 +259,8 @@ QtObject: self.toNetworksModel.updateToNetworks(path) proc resetStoredProperties*(self: View) {.slot.} = + self.sendType = transaction_dto.SendType.Transfer + self.selectedRecipient = "" self.fromNetworksModel.reset() self.toNetworksModel.reset() self.transactionRoutes = newTransactionRoutes() diff --git a/src/app_service/service/transaction/async_tasks.nim b/src/app_service/service/transaction/async_tasks.nim index b98885a299..ea64068711 100644 --- a/src/app_service/service/transaction/async_tasks.nim +++ b/src/app_service/service/transaction/async_tasks.nim @@ -20,7 +20,7 @@ type disabledFromChainIDs: seq[int] disabledToChainIDs: seq[int] preferredChainIDs: seq[int] - sendType: int + sendType: SendType lockedInAmounts: string proc getGasEthValue*(gweiValue: float, gasLimit: uint64): float = @@ -88,12 +88,12 @@ const getSuggestedRoutesTask*: Task = proc(argEncoded: string) {.gcsafe, nimcall except: discard - let response = eth.suggestedRoutes(arg.account, amountAsHex, arg.token, arg.disabledFromChainIDs, arg.disabledToChainIDs, arg.preferredChainIDs, arg.sendType, lockedInAmounts).result + let response = eth.suggestedRoutes(arg.account, amountAsHex, arg.token, arg.disabledFromChainIDs, arg.disabledToChainIDs, arg.preferredChainIDs, ord(arg.sendType), lockedInAmounts).result var bestPaths = response["Best"].getElems().map(x => x.toTransactionPathDto()) # retry along with unpreferred chains incase no route is possible with preferred chains if(bestPaths.len == 0 and arg.preferredChainIDs.len > 0): - let response = eth.suggestedRoutes(arg.account, amountAsHex, arg.token, arg.disabledFromChainIDs, arg.disabledToChainIDs, @[], arg.sendType, lockedInAmounts).result + let response = eth.suggestedRoutes(arg.account, amountAsHex, arg.token, arg.disabledFromChainIDs, arg.disabledToChainIDs, @[], ord(arg.sendType), lockedInAmounts).result bestPaths = response["Best"].getElems().map(x => x.toTransactionPathDto()) bestPaths.sort(sortAsc[TransactionPathDto]) diff --git a/src/app_service/service/transaction/service.nim b/src/app_service/service/transaction/service.nim index 4018764c8f..08016eb702 100644 --- a/src/app_service/service/transaction/service.nim +++ b/src/app_service/service/transaction/service.nim @@ -310,10 +310,10 @@ QtObject: uuid: string, routes: seq[TransactionPathDto], password: string, - sendType: int + sendType: SendType ) = try: - let isERC721Transfer = sendType == ord(ERC721Transfer) + let isERC721Transfer = sendType == ERC721Transfer var paths: seq[TransactionBridgeDto] = @[] var chainID = 0 @@ -387,7 +387,7 @@ QtObject: uuid: string, selectedRoutes: seq[TransactionPathDto], password: string, - sendType: int + sendType: SendType ) = try: var chainID = 0 @@ -424,7 +424,7 @@ QtObject: error "error handling suggestedRoutesReady response", errDesription=e.msg self.events.emit(SIGNAL_SUGGESTED_ROUTES_READY, SuggestedRoutesArgs(suggestedRoutes: suggestedRoutesDto)) - proc suggestedRoutes*(self: Service, account: string, amount: Uint256, token: string, disabledFromChainIDs, disabledToChainIDs, preferredChainIDs: seq[int], sendType: int, lockedInAmounts: string): SuggestedRoutesDto = + proc suggestedRoutes*(self: Service, account: string, amount: Uint256, token: string, disabledFromChainIDs, disabledToChainIDs, preferredChainIDs: seq[int], sendType: SendType, lockedInAmounts: string): SuggestedRoutesDto = let arg = GetSuggestedRoutesTaskArg( tptr: cast[ByteAddress](getSuggestedRoutesTask), vptr: cast[ByteAddress](self.vptr), diff --git a/ui/app/AppLayouts/Browser/BrowserLayout.qml b/ui/app/AppLayouts/Browser/BrowserLayout.qml index 01caf8ac23..905cf443dc 100644 --- a/ui/app/AppLayouts/Browser/BrowserLayout.qml +++ b/ui/app/AppLayouts/Browser/BrowserLayout.qml @@ -63,7 +63,6 @@ StatusSectionLayout { property Component sendTransactionModalComponent: SendModal { anchors.centerIn: parent - selectedAccount: WalletStore.dappBrowserAccount preSelectedHolding: store.getAsset(WalletStore.dappBrowserAccount.assets, "ETH") preSelectedHoldingType: Constants.HoldingType.Asset } diff --git a/ui/app/AppLayouts/Profile/views/EnsDetailsView.qml b/ui/app/AppLayouts/Profile/views/EnsDetailsView.qml index 657081be20..702372a60e 100644 --- a/ui/app/AppLayouts/Profile/views/EnsDetailsView.qml +++ b/ui/app/AppLayouts/Profile/views/EnsDetailsView.qml @@ -118,7 +118,7 @@ Item { id: releaseEnsModal modalHeader: qsTr("Release your username") interactive: false - sendType: Constants.SendType.ENSRelease + preSelectedSendType: Constants.SendType.ENSRelease preSelectedRecipient: root.ensUsernamesStore.getEnsRegisteredAddress() preDefinedAmountToSend: LocaleUtils.numberToLocaleString(0) preSelectedHolding: store.getAsset(releaseEnsModal.store.assets, Constants.ethToken) @@ -131,7 +131,7 @@ Item { root.ensUsernamesStore.authenticateAndReleaseEns( root.chainId, root.username, - selectedAccount.address, + store.selectedSenderAccount.address, path.gasAmount, eip1559Enabled ? "" : path.gasFees.gasPrice, eip1559Enabled ? path.gasFees.maxPriorityFeePerGas : "", diff --git a/ui/app/AppLayouts/Profile/views/EnsSearchView.qml b/ui/app/AppLayouts/Profile/views/EnsSearchView.qml index 795aa7aaa9..4109d52521 100644 --- a/ui/app/AppLayouts/Profile/views/EnsSearchView.qml +++ b/ui/app/AppLayouts/Profile/views/EnsSearchView.qml @@ -63,7 +63,7 @@ Item { id: connectEnsModal modalHeader: qsTr("Connect username with your pubkey") interactive: false - sendType: Constants.SendType.ENSSetPubKey + preSelectedSendType: Constants.SendType.ENSSetPubKey preSelectedRecipient: root.ensUsernamesStore.getEnsRegisteredAddress() preDefinedAmountToSend: LocaleUtils.numberToLocaleString(0) preSelectedHolding: store.getAsset(connectEnsModal.store.assets, Constants.ethToken) @@ -75,7 +75,7 @@ Item { root.ensUsernamesStore.authenticateAndSetPubKey( root.ensUsernamesStore.chainId, ensUsername.text + (isStatus ? ".stateofus.eth" : "" ), - selectedAccount.address, + store.selectedSenderAccount.address, path.gasAmount, eip1559Enabled ? "" : path.gasFees.gasPrice, "", diff --git a/ui/app/AppLayouts/Profile/views/EnsTermsAndConditionsView.qml b/ui/app/AppLayouts/Profile/views/EnsTermsAndConditionsView.qml index 5b02fdb97e..375524f47c 100644 --- a/ui/app/AppLayouts/Profile/views/EnsTermsAndConditionsView.qml +++ b/ui/app/AppLayouts/Profile/views/EnsTermsAndConditionsView.qml @@ -48,7 +48,7 @@ Item { sourceComponent: SendModal { id: buyEnsModal interactive: false - sendType: Constants.SendType.ENSRegister + preSelectedSendType: Constants.SendType.ENSRegister preSelectedRecipient: root.ensUsernamesStore.getEnsRegisteredAddress() preDefinedAmountToSend: LocaleUtils.numberToLocaleString(10) preSelectedHolding: store.getAsset(buyEnsModal.store.assets, JSON.parse(root.stickersStore.getStatusToken()).symbol) @@ -61,7 +61,7 @@ Item { root.ensUsernamesStore.authenticateAndRegisterEns( root.ensUsernamesStore.chainId, username, - selectedAccount.address, + store.selectedSenderAccount.address, path.gasAmount, eip1559Enabled ? "" : path.gasFees.gasPrice, eip1559Enabled ? path.gasFees.maxPriorityFeePerGas : "", diff --git a/ui/app/AppLayouts/Wallet/WalletLayout.qml b/ui/app/AppLayouts/Wallet/WalletLayout.qml index 2a0bb280e9..3d29b29441 100644 --- a/ui/app/AppLayouts/Wallet/WalletLayout.qml +++ b/ui/app/AppLayouts/Wallet/WalletLayout.qml @@ -150,14 +150,14 @@ Item { networkConnectionStore: root.networkConnectionStore onLaunchShareAddressModal: Global.openPopup(receiveModalComponent) onLaunchSendModal: { - root.sendModalPopup.sendType = Constants.SendType.Transfer + root.sendModalPopup.preSelectedSendType = Constants.SendType.Transfer root.sendModalPopup.preSelectedHoldingID = walletStore.currentViewedHoldingID root.sendModalPopup.preSelectedHoldingType = walletStore.currentViewedHoldingType root.sendModalPopup.onlyAssets = false root.sendModalPopup.open() } onLaunchBridgeModal: { - root.sendModalPopup.sendType = Constants.SendType.Bridge + root.sendModalPopup.preSelectedSendType = Constants.SendType.Bridge root.sendModalPopup.preSelectedHoldingID = walletStore.currentViewedHoldingID root.sendModalPopup.preSelectedHoldingType = walletStore.currentViewedHoldingType root.sendModalPopup.onlyAssets = true diff --git a/ui/app/mainui/AppMain.qml b/ui/app/mainui/AppMain.qml index 39aec3d3b2..b4648f36fe 100644 --- a/ui/app/mainui/AppMain.qml +++ b/ui/app/mainui/AppMain.qml @@ -1328,38 +1328,32 @@ Item { id: sendModal active: false - function open(address = "") { + function open() { this.active = true - this.item.addressText = address; this.item.open() } function closed() { // this.sourceComponent = undefined // kill an opened instance this.active = false } - property var selectedAccount property var preSelectedHolding property string preSelectedHoldingID property int preSelectedHoldingType - property int sendType: -1 + property int preSelectedSendType: Constants.SendType.Unknown property bool onlyAssets: false sourceComponent: SendModal { onlyAssets: sendModal.onlyAssets onClosed: { sendModal.closed() - sendModal.sendType = -1 + sendModal.preSelectedSendType = Constants.SendType.Unknown sendModal.preSelectedHoldingID = "" sendModal.preSelectedHoldingType = Constants.HoldingType.Unknown sendModal.preSelectedHolding = undefined - sendModal.selectedAccount = undefined } } onLoaded: { - if (!!sendModal.selectedAccount) { - item.selectedAccount = sendModal.selectedAccount - } - if(sendModal.sendType >= 0) { - item.sendType = sendModal.sendType + if(sendModal.preSelectedSendType !== Constants.SendType.Unknown) { + item.preSelectedSendType = sendModal.preSelectedSendType } if(preSelectedHoldingType !== Constants.HoldingType.Unknown) { item.preSelectedHoldingID = sendModal.preSelectedHoldingID diff --git a/ui/imports/shared/popups/send/SendModal.qml b/ui/imports/shared/popups/send/SendModal.qml index f3c68c81fb..848888595e 100644 --- a/ui/imports/shared/popups/send/SendModal.qml +++ b/ui/imports/shared/popups/send/SendModal.qml @@ -29,6 +29,7 @@ StatusDialog { property var preSelectedHolding property string preSelectedHoldingID property int preSelectedHoldingType + property int preSelectedSendType property bool interactive: true property alias onlyAssets: holdingSelector.onlyAssets @@ -36,13 +37,10 @@ StatusDialog { property TransactionStore store: TransactionStore {} property CurrenciesStore currencyStore: store.currencyStore - property var selectedAccount: store.selectedSenderAccount property var collectiblesModel: store.collectiblesModel property var nestedCollectiblesModel: store.nestedCollectiblesModel property var bestRoutes - property alias addressText: recipientLoader.addressText property bool isLoading: false - property int sendType: Constants.SendType.Transfer property MessageDialog sendingError: MessageDialog { id: sendingError @@ -52,24 +50,15 @@ StatusDialog { } property var sendTransaction: function() { - let recipientAddress = Utils.isValidAddress(popup.addressText) ? popup.addressText : recipientLoader.resolvedENSAddress d.isPendingTx = true - popup.store.authenticateAndTransfer( - popup.selectedAccount.address, - recipientAddress, - d.selectedSymbol, - amountToSendInput.cryptoValueToSend, - d.uuid, - sendType) + popup.store.authenticateAndTransfer(amountToSendInput.cryptoValueToSend, d.uuid) } property var recalculateRoutesAndFees: Backpressure.debounce(popup, 600, function() { - if(!!popup.selectedAccount && !!holdingSelector.selectedItem + if(!!store.selectedSenderAccount && !!holdingSelector.selectedItem && recipientLoader.ready && amountToSendInput.inputNumberValid) { popup.isLoading = true - - popup.store.suggestedRoutes(d.isERC721Transfer ? "1" : amountToSendInput.cryptoValueToSend, - popup.sendType) + popup.store.suggestedRoutes(d.isERC721Transfer ? "1" : amountToSendInput.cryptoValueToSend) } }) @@ -82,16 +71,15 @@ StatusDialog { readonly property double maxFiatBalance: isSelectedHoldingValidAsset ? selectedHolding.totalCurrencyBalance.amount : 0 readonly property double maxCryptoBalance: isSelectedHoldingValidAsset ? selectedHolding.totalBalance.amount : 0 readonly property double maxInputBalance: amountToSendInput.inputIsFiat ? maxFiatBalance : maxCryptoBalance - readonly property string selectedSymbol: store.selectedAssetSymbol - readonly property string inputSymbol: amountToSendInput.inputIsFiat ? popup.currencyStore.currentCurrency : selectedSymbol + readonly property string inputSymbol: amountToSendInput.inputIsFiat ? popup.currencyStore.currentCurrency : store.selectedAssetSymbol readonly property bool errorMode: popup.isLoading || !recipientLoader.ready ? false : errorType !== Constants.NoError || networkSelector.errorMode || !amountToSendInput.inputNumberValid readonly property string uuid: Utils.uuid() property bool isPendingTx: false property string totalTimeEstimate property double totalFeesInFiat property double totalAmountToReceive - readonly property bool isBridgeTx: popup.sendType === Constants.SendType.Bridge - readonly property bool isERC721Transfer: popup.sendType === Constants.SendType.ERC721Transfer + readonly property bool isBridgeTx: store.sendType === Constants.SendType.Bridge + readonly property bool isERC721Transfer: store.sendType === Constants.SendType.ERC721Transfer property var selectedHolding: null property var selectedHoldingType: Constants.HoldingType.Unknown readonly property bool isSelectedHoldingValidAsset: !!selectedHolding && selectedHoldingType === Constants.HoldingType.Asset @@ -125,11 +113,11 @@ StatusDialog { onSelectedHoldingChanged: { if (d.selectedHoldingType === Constants.HoldingType.Asset) { - if(popup.sendType !== Constants.SendType.Bridge) - popup.sendType = Constants.SendType.Transfer + if(store.sendType !== Constants.SendType.Bridge) + store.setSendType(Constants.SendType.Transfer) store.setSelectedAssetSymbol(selectedHolding.symbol) } else if (d.selectedHoldingType === Constants.HoldingType.Collectible) { - popup.sendType = Constants.SendType.ERC721Transfer + store.setSendType(Constants.SendType.ERC721Transfer) amountToSendInput.input.text = 1 store.setSelectedAssetSymbol(selectedHolding.contractAddress+":"+selectedHolding.tokenId) store.setRouteEnabledFromChains(selectedHolding.chainId) @@ -148,11 +136,13 @@ StatusDialog { color: Theme.palette.baseColor3 } - onSelectedAccountChanged: popup.recalculateRoutesAndFees() - onOpened: { amountToSendInput.input.input.edit.forceActiveFocus() + if(popup.preSelectedSendType !== Constants.SendType.Unknown) { + store.setSendType(popup.preSelectedSendType) + } + if (popup.preSelectedHoldingType !== Constants.HoldingType.Unknown) { tokenListRect.browsingHoldingType = popup.preSelectedHoldingType if(!!popup.preSelectedHolding) { @@ -173,7 +163,7 @@ StatusDialog { if(d.isBridgeTx) { recipientLoader.selectedRecipientType = TabAddressSelectorView.Type.Address - recipientLoader.selectedRecipient = {address: popup.selectedAccount.address} + recipientLoader.selectedRecipient = {address: store.selectedSenderAccount.address} } } @@ -187,9 +177,13 @@ StatusDialog { sorters: RoleSorter { roleName: "position"; sortOrder: Qt.AscendingOrder } } - selectedAccount: !!popup.selectedAccount ? popup.selectedAccount: {} + selectedAccount: !!store.selectedSenderAccount ? store.selectedSenderAccount: {} getNetworkShortNames: function(chainIds) {return store.getNetworkShortNames(chainIds)} - onSelectedIndexChanged: store.switchSenderAccount(selectedIndex) + onSelectedIndexChanged: { + store.switchSenderAccount(selectedIndex) + d.setSelectedHoldingId(d.selectedHolding.symbol, d.selectedHoldingType) + popup.recalculateRoutesAndFees() + } } @@ -249,8 +243,8 @@ StatusDialog { id: holdingSelector Layout.fillWidth: true Layout.fillHeight: true - assetsModel: popup.selectedAccount && popup.selectedAccount.assets ? popup.selectedAccount.assets : null - collectiblesModel: popup.selectedAccount ? popup.nestedCollectiblesModel : null + assetsModel:store.selectedSenderAccount && store.selectedSenderAccount.assets ? store.selectedSenderAccount.assets : null + collectiblesModel: store.selectedSenderAccount ? popup.nestedCollectiblesModel : null currentCurrencySymbol: RootStore.currencyStore.currentCurrencySymbol visible: (!!d.selectedHolding && d.selectedHoldingType !== Constants.HoldingType.Unknown) || (!!d.hoveredHolding && d.hoveredHoldingType !== Constants.HoldingType.Unknown) @@ -294,7 +288,7 @@ StatusDialog { Layout.fillWidth: true isBridgeTx: d.isBridgeTx interactive: popup.interactive - selectedSymbol: d.selectedSymbol + selectedSymbol: store.selectedAssetSymbol maxInputBalance: d.maxInputBalance currentCurrency: popup.currencyStore.currentCurrency @@ -324,7 +318,7 @@ StatusDialog { visible: !!popup.bestRoutes && popup.bestRoutes !== undefined && popup.bestRoutes.count > 0 && amountToSendInput.inputNumberValid isLoading: popup.isLoading - selectedSymbol: d.selectedSymbol + selectedSymbol: store.selectedAssetSymbol isBridgeTx: d.isBridgeTx cryptoValueToReceive: d.totalAmountToReceive inputIsFiat: amountToSendInput.inputIsFiat @@ -376,8 +370,8 @@ StatusDialog { anchors.rightMargin: Style.current.bigPadding visible: !d.selectedHolding - assets: popup.selectedAccount && popup.selectedAccount.assets ? popup.selectedAccount.assets : null - collectibles: popup.selectedAccount ? popup.nestedCollectiblesModel : null + assets: store.selectedSenderAccount && store.selectedSenderAccount.assets ? store.selectedSenderAccount.assets : null + collectibles: store.selectedSenderAccount ? popup.nestedCollectiblesModel : null onlyAssets: holdingSelector.onlyAssets searchTokenSymbolByAddressFn: function (address) { return store.findTokenSymbolByAddress(address) @@ -422,6 +416,7 @@ StatusDialog { selectedAsset: d.selectedHolding onIsLoading: popup.isLoading = true onRecalculateRoutesAndFees: popup.recalculateRoutesAndFees() + onAddressTextChanged: store.setSelectedRecipient(addressText) } } @@ -432,7 +427,7 @@ StatusDialog { anchors.leftMargin: Style.current.bigPadding anchors.rightMargin: Style.current.bigPadding store: popup.store - selectedAccount: popup.selectedAccount + selectedAccount: store.selectedSenderAccount onRecipientSelected: { recipientLoader.selectedRecipientType = type recipientLoader.selectedRecipient = recipient @@ -449,7 +444,7 @@ StatusDialog { anchors.rightMargin: Style.current.bigPadding store: popup.store interactive: popup.interactive - selectedAccount: popup.selectedAccount + selectedAccount: store.selectedSenderAccount ensAddressOrEmpty: recipientLoader.resolvedENSAddress amountToSend: amountToSendInput.cryptoValueToSendFloat minSendCryptoDecimals: amountToSendInput.minSendCryptoDecimals @@ -470,7 +465,7 @@ StatusDialog { anchors.leftMargin: Style.current.bigPadding anchors.rightMargin: Style.current.bigPadding visible: recipientLoader.ready && !!d.selectedHolding && networkSelector.advancedOrCustomMode && amountToSendInput.inputNumberValid - selectedTokenSymbol: d.selectedSymbol + selectedTokenSymbol: store.selectedAssetSymbol isLoading: popup.isLoading bestRoutes: popup.bestRoutes store: popup.store diff --git a/ui/imports/shared/status/StatusStickerMarket.qml b/ui/imports/shared/status/StatusStickerMarket.qml index 82507641fc..ce1306fa4f 100644 --- a/ui/imports/shared/status/StatusStickerMarket.qml +++ b/ui/imports/shared/status/StatusStickerMarket.qml @@ -200,7 +200,7 @@ Item { required property string packId interactive: false - sendType: Constants.SendType.StickersBuy + preSelectedSendType: Constants.SendType.StickersBuy preSelectedRecipient: root.store.stickersStore.getStickersMarketAddress() preDefinedAmountToSend: LocaleUtils.numberToLocaleString(parseFloat(price)) preSelectedHolding: store.getAsset(buyStickersModal.store.assets, JSON.parse(root.store.stickersStore.getStatusToken()).symbol) @@ -211,7 +211,7 @@ Item { let eip1559Enabled = path.gasFees.eip1559Enabled let maxFeePerGas = path.gasFees.maxFeePerGasM root.store.stickersStore.authenticateAndBuy(packId, - selectedAccount.address, + store.selectedSenderAccount.address, path.gasAmount, eip1559Enabled ? "" : path.gasFees.gasPrice, eip1559Enabled ? path.gasFees.maxPriorityFeePerGas : "", diff --git a/ui/imports/shared/status/StatusStickerPackClickPopup.qml b/ui/imports/shared/status/StatusStickerPackClickPopup.qml index 5e04cc6800..15cd4f2459 100644 --- a/ui/imports/shared/status/StatusStickerPackClickPopup.qml +++ b/ui/imports/shared/status/StatusStickerPackClickPopup.qml @@ -69,7 +69,7 @@ ModalPopup { SendModal { id: buyStickersPackModal interactive: false - sendType: Constants.SendType.StickersBuy + preSelectedSendType: Constants.SendType.StickersBuy preSelectedRecipient: stickerPackDetailsPopup.store.stickersStore.getStickersMarketAddress() preDefinedAmountToSend: LocaleUtils.numberToLocaleString(parseFloat(price)) preSelectedHolding: store.getAsset(buyStickersPackModal.store.assets, JSON.parse(stickerPackDetailsPopup.store.stickersStore.getStatusToken()).symbol) @@ -80,7 +80,7 @@ ModalPopup { let eip1559Enabled = path.gasFees.eip1559Enabled let maxFeePerGas = path.gasFees.maxFeePerGasM stickerPackDetailsPopup.store.stickersStore.authenticateAndBuy(packId, - selectedAccount.address, + store.selectedSenderAccount.address, path.gasAmount, eip1559Enabled ? "" : path.gasFees.gasPrice, eip1559Enabled ? path.gasFees.maxPriorityFeePerGas : "", diff --git a/ui/imports/shared/stores/send/TransactionStore.qml b/ui/imports/shared/stores/send/TransactionStore.qml index d8880e3293..24a3afefe9 100644 --- a/ui/imports/shared/stores/send/TransactionStore.qml +++ b/ui/imports/shared/stores/send/TransactionStore.qml @@ -37,6 +37,16 @@ QtObject { } property string selectedAssetSymbol: walletSectionSendInst.selectedAssetSymbol property bool showUnPreferredChains: walletSectionSendInst.showUnPreferredChains + property int sendType: walletSectionSendInst.sendType + property string selectedRecipient: walletSectionSendInst.selectedRecipient + + function setSendType(sendType) { + walletSectionSendInst.setSendType(sendType) + } + + function setSelectedRecipient(recipientAddress) { + walletSectionSendInst.setSelectedRecipient(recipientAddress) + } function getEtherscanLink(chainID) { return networksModule.all.getBlockExplorerURL(chainID) @@ -46,12 +56,12 @@ QtObject { globalUtils.copyToClipboard(text) } - function authenticateAndTransfer(from, to, tokenSymbol, amount, uuid, sendType) { - walletSectionSendInst.authenticateAndTransfer(from, to, tokenSymbol, amount, uuid, sendType) + function authenticateAndTransfer(amount, uuid) { + walletSectionSendInst.authenticateAndTransfer(amount, uuid) } - function suggestedRoutes(amount, sendType) { - walletSectionSendInst.suggestedRoutes(amount, sendType) + function suggestedRoutes(amount) { + walletSectionSendInst.suggestedRoutes(amount) } function resolveENS(value) { diff --git a/ui/imports/utils/Constants.qml b/ui/imports/utils/Constants.qml index cb09e62c94..4dade3ee98 100644 --- a/ui/imports/utils/Constants.qml +++ b/ui/imports/utils/Constants.qml @@ -984,7 +984,8 @@ QtObject { ENSSetPubKey, StickersBuy, Bridge, - ERC721Transfer + ERC721Transfer, + Unknown } enum ErrorType {