feat: handle user cancellation in zap process

This commit is contained in:
codytseng
2025-03-08 11:35:23 +08:00
parent 5e3cd04280
commit 094ccd92da
3 changed files with 14 additions and 5 deletions

View File

@@ -48,14 +48,18 @@ export default function ZapButton({ event }: { event: Event }) {
throw new Error('You need to be logged in to zap')
}
setZapping(true)
const { invoice } = await lightning.zap(
const zapResult = await lightning.zap(
pubkey,
event.pubkey,
defaultZapSats,
defaultZapComment,
event.id
)
addZap(event.id, invoice, defaultZapSats, defaultZapComment)
// user canceled
if (!zapResult) {
return
}
addZap(event.id, zapResult.invoice, defaultZapSats, defaultZapComment)
} catch (error) {
toast({
title: t('Zap failed'),

View File

@@ -77,11 +77,15 @@ function ZapDialogContent({
throw new Error('You need to be logged in to zap')
}
setZapping(true)
const { invoice } = await lightning.zap(pubkey, recipient, sats, comment, eventId, () =>
const zapResult = await lightning.zap(pubkey, recipient, sats, comment, eventId, () =>
setOpen(false)
)
// user canceled
if (!zapResult) {
return
}
if (eventId) {
addZap(eventId, invoice, sats, comment)
addZap(eventId, zapResult.invoice, sats, comment)
}
} catch (error) {
toast({

View File

@@ -48,7 +48,7 @@ class LightningService {
comment: string,
eventId?: string,
closeOuterModel?: () => void
): Promise<{ preimage: string; invoice: string }> {
): Promise<{ preimage: string; invoice: string } | null> {
if (!client.signer) {
throw new Error('You need to be logged in to zap')
}
@@ -112,6 +112,7 @@ class LightningService {
onCancelled: () => {
clearInterval(checkPaymentInterval)
subCloser?.close()
resolve(null)
}
})