mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-03-12 19:02:01 +01:00
add pp link and instruction for ios
This commit is contained in:
parent
e64a47ff96
commit
c4ca57c28b
5 changed files with 110 additions and 18 deletions
|
@ -90,7 +90,8 @@ namespace BTCPayServer.Plugins.BoltcardBalance.Controllers
|
|||
AmountDue = blob.Limit - totalPaid,
|
||||
LNUrlBech32 = bech32LNUrl.AbsoluteUri,
|
||||
LNUrlPay = Url.Action(nameof(UIBoltcardController.GetPayRequest), "UIBoltcard", new { p }, "lnurlp"),
|
||||
BoltcardKeysResetLink = $"boltcard://reset?url={GetBoltcardDeeplinkUrl(pp.Id, OnExistingBehavior.KeepVersion)}"
|
||||
BoltcardKeysResetLink = $"boltcard://reset?url={GetBoltcardDeeplinkUrl(pp.Id, OnExistingBehavior.KeepVersion)}",
|
||||
PullPaymentLink = Url.Action(nameof(UIPullPaymentController.ViewPullPayment), "UIPullPayment", new { pullPaymentId = pp.Id }, Request.Scheme, Request.Host.ToString())
|
||||
};
|
||||
foreach (var payout in payouts)
|
||||
{
|
||||
|
|
|
@ -18,6 +18,7 @@ namespace BTCPayServer.Plugins.BoltcardBalance.ViewModels
|
|||
public List<Transaction> Transactions { get; set; } = new List<Transaction>();
|
||||
public string LNUrlBech32 { get; set; }
|
||||
public string BoltcardKeysResetLink { get; set; }
|
||||
public string PullPaymentLink { get; set; }
|
||||
public string LNUrlPay { get; set; }
|
||||
|
||||
}
|
||||
|
|
|
@ -13,12 +13,16 @@
|
|||
<nav id="wizard-navbar">
|
||||
@if (this.ViewData["NoCancelWizard"] is not true)
|
||||
{
|
||||
<button type="button" class="btn btn-secondary only-for-js mt-4" id="lnurlwithdraw-button">
|
||||
<span class="fa fa-qrcode fa-2x" title="Deposit"></span>
|
||||
</button>
|
||||
|
||||
<button type="button" class="btn btn-outline-danger only-for-js mt-4" id="reset-button">
|
||||
<span>Reset Boltcard</span>
|
||||
</button>
|
||||
@if (Model.AmountDue > 0)
|
||||
{
|
||||
<div class="boltcard-reset boltcard-details d-flex gap-3 mt-3 mt-sm-0 d-none">
|
||||
<a class="btn btn-outline-primary" href="@Model.PullPaymentLink">Sweep remaining balance</a>
|
||||
</div>
|
||||
}
|
||||
<a href="#" id="CancelWizard" class="cancel mt-4">
|
||||
<vc:icon symbol="close" />
|
||||
</a>
|
||||
|
@ -31,15 +35,16 @@
|
|||
<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>
|
||||
</dl>
|
||||
<div class="lnurl-pay boltcard-details d-none">
|
||||
<vc:qr-code data="@Model.LNUrlBech32" />
|
||||
@if (Model.AmountDue > 0)
|
||||
{
|
||||
<div class="boltcard-reset boltcard-details d-flex gap-3 mt-3 mt-sm-0 d-none">
|
||||
<a class="btn btn-outline-primary" href="@Model.PullPaymentLink">Sweep remaining balance</a>
|
||||
</div>
|
||||
}
|
||||
|
||||
<div class="boltcard-reset boltcard-details d-flex gap-3 mt-3 mt-sm-0 d-none">
|
||||
<a class="btn btn-outline-danger" target="_blank" href="@Model.BoltcardKeysResetLink">Reset Boltcard from app</a>
|
||||
</div>
|
||||
<div class="lnurl-pay boltcard-details d-flex gap-3 mt-3 mt-sm-0 d-none">
|
||||
<a class="btn btn-primary" target="_blank" href="@Model.LNUrlBech32">Deposit from Wallet...</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
@using BTCPayServer.Plugins.BoltcardBalance.ViewModels
|
||||
@using BTCPayServer.Services
|
||||
@inject DisplayFormatter DisplayFormatter
|
||||
|
||||
@model BalanceViewModel
|
||||
|
||||
@{
|
||||
Layout = null;
|
||||
}
|
||||
|
||||
<div class="col col-12 col-lg-12 mb-4">
|
||||
<div class="bg-tile h-100 m-0 p-3 p-sm-5 rounded">
|
||||
<nav id="wizard-navbar">
|
||||
@if (this.ViewData["NoCancelWizard"] is not true)
|
||||
{
|
||||
<button type="button" class="btn btn-secondary only-for-js mt-4" id="lnurlwithdraw-button">
|
||||
<span class="fa fa-qrcode fa-2x" title="Deposit"></span>
|
||||
</button>
|
||||
<button type="button" class="btn btn-outline-danger only-for-js mt-4" id="reset-button">
|
||||
<span>Reset Boltcard</span>
|
||||
</button>
|
||||
<a href="#" id="CancelWizard" class="cancel mt-4">
|
||||
<vc:icon symbol="close" />
|
||||
</a>
|
||||
}
|
||||
</nav>
|
||||
<div class="d-flex justify-content-center">
|
||||
<div class="d-flex flex-column justify-content-center align-items-center">
|
||||
<dl class="mb-0 mt-md-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>
|
||||
</div>
|
||||
</dl>
|
||||
<div class="lnurl-pay boltcard-details d-none">
|
||||
<vc:qr-code data="@Model.LNUrlBech32" />
|
||||
</div>
|
||||
<div class="boltcard-reset boltcard-details d-flex gap-3 mt-3 mt-sm-0 d-none">
|
||||
<a class="btn btn-outline-danger" target="_blank" href="@Model.BoltcardKeysResetLink">Reset Boltcard from app</a>
|
||||
</div>
|
||||
<div class="lnurl-pay boltcard-details d-flex gap-3 mt-3 mt-sm-0 d-none">
|
||||
<a class="btn btn-primary" target="_blank" href="@Model.LNUrlBech32">Deposit from Wallet...</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if (Model.Transactions.Any())
|
||||
{
|
||||
<div class="col col-12 col-lg-12 mb-4">
|
||||
<div class="bg-tile h-100 m-0 p-3 p-sm-5 rounded table-responsive">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="date-col">Date</th>
|
||||
<th class="amount-col">Amount</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var tx in Model.Transactions)
|
||||
{
|
||||
<tr>
|
||||
<td class="date-col">@tx.Date.ToBrowserDate(ViewsRazor.DateDisplayFormat.Relative)</td>
|
||||
<td class="amount-col">
|
||||
<span data-sensitive class="text-@(tx.Positive ? "success" : "danger")">@DisplayFormatter.Currency(tx.Balance, Model.Currency, DisplayFormatter.CurrencyFormat.Code)</span>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
}
|
|
@ -36,6 +36,11 @@
|
|||
</div>
|
||||
</div>
|
||||
<p class="text-secondary">NFC not supported in this device</p>
|
||||
<p class="text-secondary">Please use Chrome on Android, or extract the NFC value from the card (using an NFC reader app) and input below</p>
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control" id="nfc-manual-value" placeholder="lnurlw:..." />
|
||||
<button class="btn btn-secondary" id="nfc-manual-submit">Extract</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="scanning-btn" class="d-flex align-items-center justify-content-center d-none">
|
||||
<div class="d-flex gap-3 mt-3 mt-sm-0">
|
||||
|
@ -85,6 +90,7 @@
|
|||
}
|
||||
async function showBalance(lnurlw) {
|
||||
try {
|
||||
const initState = (!('NDEFReader' in window)) ? "NFCNotSupported" : "WaitingForCard";
|
||||
setState("Submitting");
|
||||
var uiDelay = delay(1000);
|
||||
var url = window.location.href.replace("#", "");
|
||||
|
@ -97,7 +103,7 @@
|
|||
document.getElementById("balance-table").innerHTML = this.responseText;
|
||||
document.getElementById("CancelWizard").addEventListener("click", function (e) {
|
||||
e.preventDefault();
|
||||
setState("WaitingForCard");
|
||||
setState(initState);
|
||||
document.getElementById("balance-table").innerHTML = "";
|
||||
});
|
||||
|
||||
|
@ -111,11 +117,11 @@
|
|||
setState("ShowBalance");
|
||||
}
|
||||
else if(this.readyState == 4 && this.status == 404) {
|
||||
setState("WaitingForCard");
|
||||
setState(initState);
|
||||
handleError(new Error("Initialized, but NOT by Bitcoin Atlantis"));
|
||||
}
|
||||
else {
|
||||
setState("WaitingForCard");
|
||||
setState(initState);
|
||||
}
|
||||
};
|
||||
xhttp.open('GET', url, true);
|
||||
|
@ -206,6 +212,12 @@
|
|||
}
|
||||
}
|
||||
delegate('click', "#start-scan-btn", startScan);
|
||||
delegate('click', "#nfc-manual-submit", async function () {
|
||||
var value = document.getElementById("nfc-manual-value").value;
|
||||
if (value) {
|
||||
await showBalance(value);
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (e) {
|
||||
handleError(e);
|
||||
|
|
Loading…
Add table
Reference in a new issue