Route logged-out single-beneficiary donate button to per-beneficiary dialog

This commit is contained in:
Alex Gleason
2026-05-18 19:26:52 -05:00
parent 83b4290e62
commit 69929fc00d
+22 -1
View File
@@ -114,6 +114,7 @@ function CampaignDetailContent({ campaign }: { campaign: ParsedCampaign }) {
const queryClient = useQueryClient();
const [donateOpen, setDonateOpen] = useState(false);
const [beneficiaryDonateOpen, setBeneficiaryDonateOpen] = useState(false);
const [replyOpen, setReplyOpen] = useState(false);
const [moreMenuOpen, setMoreMenuOpen] = useState(false);
const [interactionsOpen, setInteractionsOpen] = useState(false);
@@ -451,7 +452,17 @@ function CampaignDetailContent({ campaign }: { campaign: ParsedCampaign }) {
<Button
size="lg"
className="w-full col-span-3"
onClick={() => setDonateOpen(true)}
onClick={() => {
// Logged-out donors on a single-beneficiary campaign get
// the simpler per-beneficiary BIP-21 dialog directly —
// there's no split to coordinate, so the multi-step
// PSBT/login flow would be pure friction.
if (!user && campaign.recipients.length === 1) {
setBeneficiaryDonateOpen(true);
} else {
setDonateOpen(true);
}
}}
disabled={deadline?.isPast || campaign.archived}
>
<HandHeart className="size-5 mr-2" />
@@ -607,6 +618,16 @@ function CampaignDetailContent({ campaign }: { campaign: ParsedCampaign }) {
btcPrice={btcPrice}
/>
{/* Single-beneficiary shortcut for logged-out donors. Mounted only when
there's exactly one recipient so the pubkey is unambiguous. */}
{campaign.recipients.length === 1 && (
<BeneficiaryDonateDialog
pubkey={campaign.recipients[0].pubkey}
open={beneficiaryDonateOpen}
onOpenChange={setBeneficiaryDonateOpen}
/>
)}
<ReplyComposeModal
event={campaign.event}
open={replyOpen}