import React from "react"; import { useLocation, useNavigate } from "react-router"; import { LinkButton } from "src/components/ui/custom/link-button"; import { LoadingButton } from "src/components/ui/custom/loading-button"; import type { Invoice } from "@getalby/lightning-tools/bolt11"; import { ArrowLeftIcon } from "lucide-react"; import { toast } from "sonner"; import AppHeader from "src/components/AppHeader"; import { FormattedBitcoinAmount } from "src/components/FormattedBitcoinAmount"; import FormattedFiatAmount from "src/components/FormattedFiatAmount"; import { InsufficientLightningBalanceAlert } from "src/components/InsufficientLightningBalanceAlert"; import Loading from "src/components/Loading"; import { PaymentFailedAlert } from "src/components/PaymentFailedAlert"; import { PendingPaymentAlert } from "src/components/PendingPaymentAlert"; import { Card, CardContent, CardFooter, CardHeader, CardTitle, } from "src/components/ui/card"; import { useBalances } from "src/hooks/useBalances"; import PayFromSelect from "src/screens/wallet/send/PayFromSelect"; import { PayInvoiceRequest, PayInvoiceResponse, TransactionMetadata, } from "src/types"; import { request } from "src/utils/request"; export default function ConfirmPayment() { const { state } = useLocation(); const navigate = useNavigate(); const { data: balances } = useBalances(); const invoice = state?.args?.paymentRequest as Invoice; const metadata = state?.args?.metadata as TransactionMetadata; const [appId, setAppId] = React.useState(); const [isLoading, setLoading] = React.useState(false); const [errorMessage, setErrorMessage] = React.useState(""); const confirmPayment = async () => { setErrorMessage(""); try { setLoading(true); const payload: PayInvoiceRequest = { metadata, fromAppId: appId, }; const payInvoiceResponse = await request( `/api/payments/${invoice.paymentRequest}`, { method: "POST", body: JSON.stringify(payload), headers: { "Content-Type": "application/json", }, } ); if (!payInvoiceResponse?.preimage) { throw new Error("No preimage in response"); } navigate(`/wallet/send/success`, { state: { preimage: payInvoiceResponse.preimage, pageTitle: "Pay Invoice", invoice, }, replace: true, }); toast("Successfully paid invoice"); } catch (e) { console.error(e); setErrorMessage("" + e); toast.error("Failed to send payment", { description: "" + e, }); } finally { setLoading(false); } }; React.useEffect(() => { if (!invoice) { navigate("/wallet/send"); } }, [navigate, invoice]); if (!balances || !invoice) { return ; } return (
{errorMessage && ( )}
Confirm Payment

{invoice.description && (

{invoice.description}

)}
Confirm Payment
Lightning Balance:{" "}
Back
); }