forked from Kieran/snort
commit
e4b0d342c8
@ -1,15 +1,18 @@
|
||||
import "./Invoice.css";
|
||||
import { useState } from "react";
|
||||
import { decode as invoiceDecode } from "light-bolt11-decoder";
|
||||
import { useMemo } from "react";
|
||||
import NoteTime from "./NoteTime";
|
||||
import LNURLTip from "./LNURLTip";
|
||||
|
||||
export default function Invoice(props) {
|
||||
const invoice = props.invoice;
|
||||
const [showInvoice, setShowInvoice] = useState(false);
|
||||
|
||||
const info = useMemo(() => {
|
||||
try {
|
||||
let parsed = invoiceDecode(invoice);
|
||||
|
||||
|
||||
let amount = parseInt(parsed.sections.find(a => a.name === "amount")?.value);
|
||||
let timestamp = parseInt(parsed.sections.find(a => a.name === "timestamp")?.value);
|
||||
let expire = parseInt(parsed.sections.find(a => a.name === "expiry")?.value);
|
||||
@ -34,25 +37,30 @@ export default function Invoice(props) {
|
||||
<>
|
||||
<h4>⚡️ Invoice for {info?.amount?.toLocaleString()} sats</h4>
|
||||
<p>{info?.description}</p>
|
||||
{showInvoice && <LNURLTip lnInvoice={invoice} show={true} /> }
|
||||
</>
|
||||
)
|
||||
} else {
|
||||
return (
|
||||
<>
|
||||
<h4>⚡️ Invoice for {info?.amount?.toLocaleString()} sats</h4>
|
||||
{showInvoice && <LNURLTip lnInvoice={invoice} show={true} /> }
|
||||
</>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="note-invoice flex">
|
||||
<div className="f-grow flex f-col">
|
||||
{header()}
|
||||
{info?.expire ? <small>{info?.expired ? "Expired" : "Expires"} <NoteTime from={info.expire * 1000} /></small> : null}
|
||||
</div>
|
||||
|
||||
{info?.expired ? <div className="btn">Expired</div> :
|
||||
<div className="btn" onClick={() => window.open(`lightning:${invoice}`)}>Pay</div>}
|
||||
{info?.expired ? <div className="btn">Expired</div> : <div className="btn" onClick={(e) => setShowInvoice(true)}>Pay</div> }
|
||||
</div>
|
||||
|
||||
</>
|
||||
)
|
||||
}
|
@ -9,6 +9,7 @@ export default function LNURLTip(props) {
|
||||
const onClose = props.onClose || (() => { });
|
||||
const service = props.svc;
|
||||
const show = props.show || false;
|
||||
const lnInvoice = props.lnInvoice
|
||||
const amounts = [50, 100, 500, 1_000, 5_000, 10_000];
|
||||
const [payService, setPayService] = useState("");
|
||||
const [amount, setAmount] = useState(0);
|
||||
@ -19,7 +20,7 @@ export default function LNURLTip(props) {
|
||||
const [success, setSuccess] = useState(null);
|
||||
|
||||
useEffect(() => {
|
||||
if (show) {
|
||||
if (show && !lnInvoice) {
|
||||
loadService()
|
||||
.then(a => setPayService(a))
|
||||
.catch(() => setError("Failed to load LNURL service"));
|
||||
@ -165,7 +166,7 @@ export default function LNURLTip(props) {
|
||||
|
||||
function payInvoice() {
|
||||
if(success) return null;
|
||||
const pr = invoice.pr;
|
||||
const pr = lnInvoice ? lnInvoice : invoice.pr;
|
||||
return (
|
||||
<>
|
||||
<div className="invoice">
|
||||
|
Loading…
Reference in New Issue
Block a user