aboutsummaryrefslogtreecommitdiffstats
path: root/src/features/zaps.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/features/zaps.js')
-rw-r--r--src/features/zaps.js15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/features/zaps.js b/src/features/zaps.js
index 2b93a30..3298eaf 100644
--- a/src/features/zaps.js
+++ b/src/features/zaps.js
@@ -90,15 +90,19 @@ export function zapsFeature(ctx) {
const z = ui.zap;
if (!z) return null;
const back = () => { ui.zap = null; ui.sendError = ''; ui.send = blankSend(); render(); };
- if (z.status === 'resolving' || z.status === 'invoicing') {
+ // Resolution is a background step, not a screen: the send form stays put
+ // and shows one inline line (resolvingNote below) until we can render
+ // something the user can act on.
+ if (z.status === 'resolving') return null;
+ if (z.status === 'invoicing') {
return h('div', { class: 'card col', style: 'align-items:center;gap:14px;padding:32px 14px' },
h('span', { class: 'spinner' }),
- h('p', { class: 'muted', style: 'margin:0' }, z.status === 'invoicing' ? t('lnZapRequesting') : t('lnZapResolving')));
+ h('p', { class: 'muted', style: 'margin:0' }, t('lnZapRequesting')));
}
if (z.status === 'error') {
return h('div', { class: 'card col', style: 'gap:12px' },
h('h3', {}, '⚡ ' + t('lnZapTitle')),
- (z.target && z.target.pk && hook('profileChip', z.target.pk)) || h('div', { class: 'small muted', style: 'word-break:break-all' }, z.name || ''),
+ (z.target && z.target.pk && hook('profileChip', z.target.pk, 'lg')) || h('div', { class: 'small muted', style: 'word-break:break-all' }, z.name || ''),
h('div', { class: 'notice err' }, z.error || t('lnZapFailed')),
h('button', { class: 'btn-ghost btn-block', onClick: back }, t('back')));
}
@@ -115,13 +119,13 @@ export function zapsFeature(ctx) {
if (broke) {
return h('div', { class: 'card col', style: 'gap:12px' },
h('h3', {}, '⚡ ' + t('lnZapTitle')),
- (z.target && z.target.pk && hook('profileChip', z.target.pk)) || h('div', { class: 'small muted', style: 'word-break:break-all' }, z.name || z.address || ''),
+ (z.target && z.target.pk && hook('profileChip', z.target.pk, 'lg')) || h('div', { class: 'small muted', style: 'word-break:break-all' }, z.name || z.address || ''),
h('div', { class: 'notice info' }, t('zapNoBalance')),
h('button', { class: 'btn-ghost btn-block', onClick: back }, t('back')));
}
return h('div', { class: 'card col', style: 'gap:12px' },
h('h3', {}, '⚡ ' + t('lnZapTitle')),
- (z.target && z.target.pk && hook('profileChip', z.target.pk)) || h('div', { class: 'small muted', style: 'word-break:break-all' }, z.name || z.address || ''),
+ (z.target && z.target.pk && hook('profileChip', z.target.pk, 'lg')) || h('div', { class: 'small muted', style: 'word-break:break-all' }, z.name || z.address || ''),
h('div', { class: 'col gap6' },
h('div', { class: 'input-group' },
h('input', { type: 'number', min: '0', inputmode: 'decimal', placeholder: t('lnPayAmount'), value: z.amount,
@@ -182,6 +186,7 @@ export function zapsFeature(ctx) {
// True when an npub can be zapped over Lightning from this build/wallet —
// ark's "no Ark address" screen checks this before offering the fallback.
canLnZap() { return canPay() && !!wallet.nostrProfile; },
+ resolvingNote() { return ui.zap && ui.zap.status === 'resolving' ? t('lnZapResolving') : null; },
// Ark's "no Ark address published" screen offers a Lightning fallback,
// which lands here with the recipient's pubkey.
lnZapNpub(pk, npub) {