Show the fiat price when sending coins

This commit is contained in:
nicolas.dorier
2018-07-26 23:23:28 +09:00
parent ad1307746c
commit 1606f43609
4 changed files with 58 additions and 10 deletions

View File

@@ -13,6 +13,7 @@ using BTCPayServer.Models;
using BTCPayServer.Models.WalletViewModels; using BTCPayServer.Models.WalletViewModels;
using BTCPayServer.Security; using BTCPayServer.Security;
using BTCPayServer.Services; using BTCPayServer.Services;
using BTCPayServer.Services.Rates;
using BTCPayServer.Services.Stores; using BTCPayServer.Services.Stores;
using BTCPayServer.Services.Wallets; using BTCPayServer.Services.Wallets;
using LedgerWallet; using LedgerWallet;
@@ -41,17 +42,22 @@ namespace BTCPayServer.Controllers
private readonly ExplorerClientProvider _explorerProvider; private readonly ExplorerClientProvider _explorerProvider;
private readonly IFeeProviderFactory _feeRateProvider; private readonly IFeeProviderFactory _feeRateProvider;
private readonly BTCPayWalletProvider _walletProvider; private readonly BTCPayWalletProvider _walletProvider;
BTCPayRateProviderFactory _RateProvider;
CurrencyNameTable _currencyTable;
public WalletsController(StoreRepository repo, public WalletsController(StoreRepository repo,
CurrencyNameTable currencyTable,
BTCPayNetworkProvider networkProvider, BTCPayNetworkProvider networkProvider,
UserManager<ApplicationUser> userManager, UserManager<ApplicationUser> userManager,
IOptions<MvcJsonOptions> mvcJsonOptions, IOptions<MvcJsonOptions> mvcJsonOptions,
NBXplorerDashboard dashboard, NBXplorerDashboard dashboard,
BTCPayRateProviderFactory rateProvider,
ExplorerClientProvider explorerProvider, ExplorerClientProvider explorerProvider,
IFeeProviderFactory feeRateProvider, IFeeProviderFactory feeRateProvider,
BTCPayWalletProvider walletProvider) BTCPayWalletProvider walletProvider)
{ {
_currencyTable = currencyTable;
_Repo = repo; _Repo = repo;
_RateProvider = rateProvider;
_NetworkProvider = networkProvider; _NetworkProvider = networkProvider;
_userManager = userManager; _userManager = userManager;
_mvcJsonOptions = mvcJsonOptions; _mvcJsonOptions = mvcJsonOptions;
@@ -118,9 +124,30 @@ namespace BTCPayServer.Controllers
if (paymentMethod == null) if (paymentMethod == null)
return NotFound(); return NotFound();
var storeData = store.GetStoreBlob();
var rateRules = store.GetStoreBlob().GetRateRules(_NetworkProvider);
rateRules.GlobalMultiplier = 1.0m;
var currencyPair = new Rating.CurrencyPair(paymentMethod.PaymentId.CryptoCode, storeData.DefaultLang ?? "USD");
WalletModel model = new WalletModel(); WalletModel model = new WalletModel();
model.ServerUrl = GetLedgerWebsocketUrl(this.HttpContext, walletId.CryptoCode, paymentMethod.DerivationStrategyBase); model.ServerUrl = GetLedgerWebsocketUrl(this.HttpContext, walletId.CryptoCode, paymentMethod.DerivationStrategyBase);
model.CryptoCurrency = walletId.CryptoCode; model.CryptoCurrency = walletId.CryptoCode;
using (CancellationTokenSource cts = new CancellationTokenSource())
{
try
{
cts.CancelAfter(TimeSpan.FromSeconds(5));
var result = await _RateProvider.FetchRate(currencyPair, rateRules).WithCancellation(cts.Token);
if (result.Value != null)
{
model.Rate = result.Value;
model.Divisibility = _currencyTable.GetNumberFormatInfo(currencyPair.Right, true).CurrencyDecimalDigits;
model.Fiat = currencyPair.Right;
}
}
catch { }
}
return View(model); return View(model);
} }

View File

@@ -15,5 +15,8 @@ namespace BTCPayServer.Models.WalletViewModels
get; get;
set; set;
} }
public decimal? Rate { get; set; }
public int Divisibility { get; set; }
public string Fiat { get; set; }
} }
} }

View File

@@ -41,7 +41,14 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Amount</label> <label>Amount</label>
<input id="amount-textbox" name="Amount" class="form-control" type="text" /> <div class="input-group">
<input id="amount-textbox" name="Amount" class="form-control" type="text" onkeyup='updateFiatValue();' />
<div class="input-group-prepend">
<span class="input-group-text text-muted" style="display:none;" id="fiatValue"></span>
</div>
</div>
@*<span class="text-muted" id="fiatValue"></span>*@
<span id="Amount-Error" class="text-danger"></span> <span id="Amount-Error" class="text-danger"></span>
<p class="form-text text-muted crypto-info" style="display: none;"> <p class="form-text text-muted crypto-info" style="display: none;">
Your current balance is <a id="crypto-balance-link" href="#"><span id="crypto-balance"></span></a> <span id="crypto-code"></span>. Your current balance is <a id="crypto-balance-link" href="#"><span id="crypto-balance"></span></a> <span id="crypto-code"></span>.
@@ -63,11 +70,11 @@
</form> </form>
</div> </div>
</div> </div>
@section Scripts @section Scripts
{ {
<script type="text/javascript"> <script type="text/javascript">
var srvModel = @Html.Raw(Json.Serialize(Model)); var srvModel = @Html.Raw(Json.Serialize(Model));
</script> </script>
<script src="~/js/ledgerwebsocket.js" type="text/javascript" defer="defer"></script> <script src="~/js/ledgerwebsocket.js" type="text/javascript" defer="defer"></script>
<script src="~/js/StoreWallet.js" type="text/javascript" defer="defer"></script> <script src="~/js/StoreWallet.js" type="text/javascript" defer="defer"></script>
} }

View File

@@ -1,4 +1,15 @@
$(function () { 
function updateFiatValue() {
if (srvModel.rate !== null) {
var fiatValue = $("#fiatValue");
fiatValue.css("display", "inline");
var amountValue = parseFloat($("#amount-textbox").val());
if (!isNaN(amountValue)) {
fiatValue.text("= " + (srvModel.rate * amountValue).toFixed(srvModel.divisibility) + " " + srvModel.fiat);
}
}
}
$(function () {
var ledgerDetected = false; var ledgerDetected = false;
var bridge = new ledgerwebsocket.LedgerWebSocketBridge(srvModel.serverUrl); var bridge = new ledgerwebsocket.LedgerWebSocketBridge(srvModel.serverUrl);
var recommendedFees = ""; var recommendedFees = "";