aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/app.js10
-rw-r--r--src/features/ark.js8
2 files changed, 17 insertions, 1 deletions
diff --git a/src/app.js b/src/app.js
index a8cde9e..77f0c01 100644
--- a/src/app.js
+++ b/src/app.js
@@ -3857,7 +3857,15 @@ function recipientRow(s, r, i) {
},
}),
h('button', { type: 'button', title: t('switchUnit'), onClick: toggleUnit }, unitLabel()),
- single && !featureHook('hideSendControls', r.address) && h('button', { type: 'button', class: s.max ? 'btn-primary' : '', onClick: () => { s.max = !s.max; render(); } }, t('max'))
+ single && !featureHook('hideSendControls', r.address) && h('button', { type: 'button', class: s.max ? 'btn-primary' : '', onClick: () => { s.max = !s.max; render(); } }, t('max')),
+ // features that hide the fee controls (ark) can still offer their own
+ // Max — it fills the amount with that rail's spendable balance
+ single && featureHook('hideSendControls', r.address)
+ ? (() => {
+ const v = featureHook('sendMaxFill', r.address);
+ return v != null ? h('button', { type: 'button', onClick: () => { r.amount = v; s.max = false; render(); } }, t('max')) : null;
+ })()
+ : null
) : null
);
syncCheck();
diff --git a/src/features/ark.js b/src/features/ark.js
index 59c293f..3e614c4 100644
--- a/src/features/ark.js
+++ b/src/features/ark.js
@@ -2338,6 +2338,14 @@ export function arkFeature(ctx) {
},
isSendDest(a) { return isArkAddress(a) && arkAvailable(); },
hideSendControls(a) { return isArkAddress(a); },
+ // Max for an ark recipient: arkoor sends are free, so the whole
+ // spendable Spending balance is the honest maximum.
+ sendMaxFill(a) {
+ if (!isArkAddress(a)) return null;
+ const sat = arkBalance()?.spendableSat || 0;
+ if (!sat) return null;
+ return ctx.getUnit() === 'sats' ? String(sat) : (sat / 1e8).toFixed(8);
+ },
sendFormNote(a) {
if (!isArkAddress(a)) return null;
maybeReconcile();