mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-18 22:44:29 +01:00
Show the fiat price when sending coins
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 = "";
|
||||||
|
|||||||
Reference in New Issue
Block a user