From fb6e7de1663f6886545b323de3ec34f13fae548e Mon Sep 17 00:00:00 2001 From: OleksandrSobol Date: Fri, 19 Feb 2021 10:37:30 +0200 Subject: [PATCH] CAKE-278 | fixed calculating estimated amount when receive amount is entered; fixed applyTemplate() method in the exchange_page.dart and reset() method in the exchange_view_model.dart --- .../changenow_exchange_provider.dart | 39 +++++++++++++++---- lib/src/screens/exchange/exchange_page.dart | 14 ++----- .../exchange/exchange_view_model.dart | 3 +- 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/lib/exchange/changenow/changenow_exchange_provider.dart b/lib/exchange/changenow/changenow_exchange_provider.dart index a852bc298..832eee88f 100644 --- a/lib/exchange/changenow/changenow_exchange_provider.dart +++ b/lib/exchange/changenow/changenow_exchange_provider.dart @@ -173,8 +173,32 @@ class ChangeNowExchangeProvider extends ExchangeProvider { double amount, bool isFixedRateMode, bool isReceiveAmount}) async { - final url = isFixedRateMode - ? apiUri + + if (isReceiveAmount && isFixedRateMode) { + final url = apiUri + _marketInfoUriSufix + _fixedRateUriSufix + apiKey; + final response = await get(url); + final responseJSON = json.decode(response.body) as List; + var rate = 0.0; + var fee = 0.0; + + for (var elem in responseJSON) { + final elemFrom = elem["from"] as String; + final elemTo = elem["to"] as String; + + if ((elemFrom == to.toString().toLowerCase()) && + (elemTo == from.toString().toLowerCase())) { + rate = elem["rate"] as double; + fee = elem["minerFee"] as double; + break; + } + } + + final estimatedAmount = (amount == 0.0)||(rate == 0.0) ? 0.0 + : (amount + fee)/rate; + + return estimatedAmount; + } else { + final url = isFixedRateMode + ? apiUri + _exchangeAmountUriSufix + _fixedRateUriSufix + amount.toString() + @@ -183,17 +207,18 @@ class ChangeNowExchangeProvider extends ExchangeProvider { '_' + to.toString() + '?api_key=' + apiKey - : apiUri + + : apiUri + _exchangeAmountUriSufix + amount.toString() + '/' + from.toString() + '_' + to.toString(); - final response = await get(url); - final responseJSON = json.decode(response.body) as Map; - final estimatedAmount = responseJSON['estimatedAmount'] as double; + final response = await get(url); + final responseJSON = json.decode(response.body) as Map; + final estimatedAmount = responseJSON['estimatedAmount'] as double; - return estimatedAmount; + return estimatedAmount; + } } } diff --git a/lib/src/screens/exchange/exchange_page.dart b/lib/src/screens/exchange/exchange_page.dart index 03cc866e6..149529b10 100644 --- a/lib/src/screens/exchange/exchange_page.dart +++ b/lib/src/screens/exchange/exchange_page.dart @@ -480,17 +480,9 @@ class ExchangePage extends BasePage { currency: CryptoCurrency.fromString(template.receiveCurrency)); switch (template.provider) { - case 'XMR.TO': - exchangeViewModel.changeProvider( - provider: exchangeViewModel.providerList[0]); - break; case 'ChangeNOW': exchangeViewModel.changeProvider( - provider: exchangeViewModel.providerList[1]); - break; - case 'MorphToken': - exchangeViewModel.changeProvider( - provider: exchangeViewModel.providerList[2]); + provider: exchangeViewModel.providerList[0]); break; } @@ -498,6 +490,7 @@ class ExchangePage extends BasePage { exchangeViewModel.depositAddress = template.depositAddress; exchangeViewModel.receiveAddress = template.receiveAddress; exchangeViewModel.isReceiveAmountEntered = false; + exchangeViewModel.isFixedRateMode = false; } void _setReactions( @@ -670,12 +663,11 @@ class ExchangePage extends BasePage { builder: (BuildContext context) { return AlertWithTwoActions( alertTitle: S.of(context).exchange, - alertContent: 'You will be able to enter receive amount when fixed rate is checked. Do you want to check fixed rate?', //FIXME + alertContent: 'You will be able to enter receive amount when fixed rate mode is checked. Do you want to switch to fixed rate mode?', //FIXME leftButtonText: S.of(context).cancel, rightButtonText: S.of(context).ok, actionLeftButton: () { FocusScope.of(context).unfocus(); - receiveAmountController.text = ''; Navigator.of(context).pop(); }, actionRightButton: () { diff --git a/lib/view_model/exchange/exchange_view_model.dart b/lib/view_model/exchange/exchange_view_model.dart index f38180230..0df6dbfd1 100644 --- a/lib/view_model/exchange/exchange_view_model.dart +++ b/lib/view_model/exchange/exchange_view_model.dart @@ -301,11 +301,10 @@ abstract class ExchangeViewModelBase with Store { @action void reset() { + _initialPairBasedOnWallet(); isReceiveAmountEntered = false; depositAmount = ''; receiveAmount = ''; - depositCurrency = CryptoCurrency.xmr; - receiveCurrency = CryptoCurrency.btc; depositAddress = depositCurrency == wallet.currency ? wallet.address : ''; receiveAddress = receiveCurrency == wallet.currency ? wallet.address : ''; isDepositAddressEnabled = !(depositCurrency == wallet.currency);