Add lnurlpay to balance

This commit is contained in:
nicolas.dorier 2024-02-21 17:45:15 +09:00
parent 2d370b8cea
commit f08608f766
No known key found for this signature in database
GPG key ID: 6618763EF09186FE
5 changed files with 34 additions and 13 deletions

View file

@ -57,10 +57,10 @@ namespace BTCPayServer.Plugins.BoltcardBalance.Controllers
var registration = await _dbContextFactory.GetBoltcardRegistration(issuerKey, boltData, true); var registration = await _dbContextFactory.GetBoltcardRegistration(issuerKey, boltData, true);
if (registration is null) if (registration is null)
return NotFound(); return NotFound();
return await GetBalanceView(registration.PullPaymentId); return await GetBalanceView(registration.PullPaymentId, p);
} }
[NonAction] [NonAction]
public async Task<IActionResult> GetBalanceView(string ppId) public async Task<IActionResult> GetBalanceView(string ppId, string p)
{ {
using var ctx = _dbContextFactory.CreateContext(); using var ctx = _dbContextFactory.CreateContext();
var pp = await ctx.PullPayments.FindAsync(ppId); var pp = await ctx.PullPayments.FindAsync(ppId);
@ -84,7 +84,8 @@ namespace BTCPayServer.Plugins.BoltcardBalance.Controllers
var vm = new BalanceViewModel() var vm = new BalanceViewModel()
{ {
Currency = blob.Currency, Currency = blob.Currency,
AmountDue = blob.Limit - totalPaid AmountDue = blob.Limit - totalPaid,
LNUrlPay = Url.Action(nameof(UIBoltcardController.GetPayRequest), "UIBoltcard", new { p }, "lnurlp")
}; };
foreach (var payout in payouts) foreach (var payout in payouts)
{ {

View file

@ -16,7 +16,7 @@ namespace BTCPayServer.Plugins.BoltcardBalance.ViewModels
public string Currency { get; set; } public string Currency { get; set; }
public decimal AmountDue { get; set; } public decimal AmountDue { get; set; }
public List<Transaction> Transactions { get; set; } = new List<Transaction>(); public List<Transaction> Transactions { get; set; } = new List<Transaction>();
public string LNUrlPay { get; set; }
} }
} }

View file

@ -11,20 +11,29 @@
<div class="col col-12 col-lg-12 mb-4"> <div class="col col-12 col-lg-12 mb-4">
<div class="bg-tile h-100 m-0 p-3 p-sm-5 rounded"> <div class="bg-tile h-100 m-0 p-3 p-sm-5 rounded">
<nav id="wizard-navbar"> <nav id="wizard-navbar">
@if (this.ViewData["NoCancelWizard"] is not true) @if (this.ViewData["NoCancelWizard"] is not true)
{ {
<a href="#" id="CancelWizard" class="cancel mt-4"> <button type="button" class="btn btn-secondary only-for-js mt-4" id="lnurlwithdraw-button">
<vc:icon symbol="close" /> <span class="fa fa-qrcode fa-2x" title="Deposit"></span>
</a> </button>
} <a href="#" id="CancelWizard" class="cancel mt-4">
<vc:icon symbol="close" />
</a>
}
</nav> </nav>
<div class="d-flex justify-content-center"> <div class="d-flex justify-content-center">
<div class="d-flex flex-column"> <div class="d-flex flex-column justify-content-center align-items-center">
<dl class="mb-0 mt-md-4"> <dl class="mb-0 mt-md-4">
<div class="d-flex d-print-inline-block flex-column mb-4"> <div class="d-flex d-print-inline-block flex-column mb-4">
<dt class="h4 fw-semibold text-nowrap text-primary text-print-default order-2 order-sm-1 mb-1">@DisplayFormatter.Currency(Model.AmountDue, Model.Currency)</dt> <dt class="h4 fw-semibold text-nowrap text-primary text-print-default order-2 order-sm-1 mb-1">@DisplayFormatter.Currency(Model.AmountDue, Model.Currency)</dt>
</div> </div>
</dl> </dl>
<div class="lnurl-pay d-none">
<vc:qr-code data="@Model.LNUrlPay" />
</div>
<div class="lnurl-pay d-flex gap-3 mt-3 mt-sm-0 d-none">
<a class="btn btn-primary" target="_blank" href="@Model.LNUrlPay">Deposit from Wallet...</a>
</div>
</div> </div>
</div> </div>
</div> </div>

View file

@ -67,6 +67,17 @@
setState("WaitingForCard"); setState("WaitingForCard");
document.getElementById("balance-table").innerHTML = ""; document.getElementById("balance-table").innerHTML = "";
}); });
document.getElementById("lnurlwithdraw-button").addEventListener("click", function (e) {
var el = document.getElementsByClassName("lnurl-pay");
for (var i = 0; i < el.length; i++) {
if (el[i].classList.contains("d-none"))
el[i].classList.remove("d-none");
else
el[i].classList.add("d-none");
}
});
setState("ShowBalance"); setState("ShowBalance");
} }
else { else {
@ -142,7 +153,7 @@
} }
} }
delegate('click', "#start-scan-btn", startScan); delegate('click', "#start-scan-btn", startScan);
// showBalance("lnurl://ewfw?p=test&c=test"); //showBalance("lnurl://ewfw?p=test&c=test");
}); });
})(); })();
</script> </script>

View file

@ -201,7 +201,7 @@ namespace BTCPayServer.Plugins.BoltcardTopUp.Controllers
await ctx.Payouts.AddAsync(payout); await ctx.Payouts.AddAsync(payout);
await ctx.SaveChangesAsync(); await ctx.SaveChangesAsync();
_boltcardBalanceController.ViewData["NoCancelWizard"] = true; _boltcardBalanceController.ViewData["NoCancelWizard"] = true;
return await _boltcardBalanceController.GetBalanceView(registration.PullPaymentId); return await _boltcardBalanceController.GetBalanceView(registration.PullPaymentId, p);
} }
} }
} }