alby-hub/frontend/src/components/ReceiveToLightning.tsx
frnandu b55978d7bc
feat: just in time channels with lsps2 (#2275)
* feat: just in time channels with lsps2

* fix: clarify JIT receive channel fee

* fix: fees

* fix: fees 2

* fix: don't show low inbound when LSPS2 is active

* fix: remove the receive limit below the input if LSPS2 is being used

* fix: simplify

* fix: bring back fee % for outgoing

* fix: remove unneeded changes

* fix: typo

* fix: unneeded

* fix: don't show open first channel is LSPS2

* feat: clearer JIT channel fee copy on receive screen

* fix: add LSPS2 var info

* fix: don't duplicate JIT fee hint on create invoice form

* fix: make paymentDone a standard boolean

* fix: update to golang:1.26 in Dockerfile

* feat: read LSPS2 sources from channel suggestions, set minimum receive amount, update guide link

* docs:  update LDK_LSPS2_ADDRESSES to be used as an override

* fix: only show minimum jit receive amount on validation error

* fix: add more detail to receive error when receiving low amounts with jit

* fix: do not use JIT when user has public channels

* feat: add option to disable JIT

* fix: isTrusted check, add jit property to event

* fix: do not require node restart for toggling JIT

* chore: simplify JIT alert

* chore: add guide link on node settings JIT description

* feat: fetch the lsp2info to have access to params like minimum/maximum payment size

* refactor: share single learn-more link across JIT fee hint branches

* fix: remove variable amount invoice support

* fix: use lsps2info for min payment size and remove channelPeerSuggestion usage of minimumChannelSize

* fix: only do amount validation according to lsps2Info values if jit is enabled in settings

* feat: add jit first payment fee alert on receive via lightning address

* fix: remove unnecessary conditional

* fix: ensure at least one sat is left over when opening JIT channel

* chore: remove hardcoded suggestions

* chore: rename JIT enabled config variable

* fix: ui checks when JIT is disabled

* fix: amount input validation message

* fix: formatting

---------

Co-authored-by: anon <anon@anon.com>
Co-authored-by: saunter <68239231+stackingsaunter@users.noreply.github.com>
Co-authored-by: fmar <fmar@fmar>
Co-authored-by: René Aaron <rene@twentyuno.net>
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
2026-06-10 14:47:07 +07:00

64 lines
2.2 KiB
TypeScript

import { CopyIcon, LinkIcon, ReceiptTextIcon, ZapIcon } from "lucide-react";
import FirstChannelJitAlert from "src/components/FirstChannelJitAlert";
import Loading from "src/components/Loading";
import QRCode from "src/components/QRCode";
import { Button } from "src/components/ui/button";
import { Card, CardContent, CardFooter } from "src/components/ui/card";
import { LinkButton } from "src/components/ui/custom/link-button";
import { Separator } from "src/components/ui/separator";
import { useAlbyMe } from "src/hooks/useAlbyMe";
import { useInfo } from "src/hooks/useInfo";
import { copyToClipboard } from "src/lib/clipboard";
export function ReceiveToLightning() {
const { data: info } = useInfo();
const { data: me } = useAlbyMe();
if (!info || !me) {
return <Loading />;
}
return (
<div className="grid gap-2">
<FirstChannelJitAlert />
<Card>
<CardContent className="flex flex-col items-center gap-6">
<QRCode value={me.lightning_address} className="w-full h-auto" />
<p className="text-center font-medium text-lg break-all">
{me.lightning_address}
</p>
</CardContent>
<CardFooter className="flex flex-col gap-2 pt-2">
<Button
variant="secondary"
onClick={() => {
copyToClipboard(me.lightning_address);
}}
className="w-full"
>
<CopyIcon className="size-4" /> Copy Lightning Address
</Button>
<Separator className="my-4" />
<LinkButton to="invoice" variant="outline" className="w-full">
<ZapIcon className="w-4 h-4 mr-2" />
Create Invoice
</LinkButton>
{info.supportsBolt12 && (
<LinkButton
to="/wallet/receive/offer"
variant="outline"
className="w-full"
>
<ReceiptTextIcon className="h-4 w-4 mr-2" />
Lightning Offer
</LinkButton>
)}
<LinkButton to="onchain" variant="outline" className="w-full">
<LinkIcon className="w-4 h-4 mr-2" />
Receive from On-chain / Other Cryptocurrency
</LinkButton>
</CardFooter>
</Card>
</div>
);
}