diff --git a/src/components/ReceiveWarnings.tsx b/src/components/ReceiveWarnings.tsx index 13564623a..aa4d2dd1c 100644 --- a/src/components/ReceiveWarnings.tsx +++ b/src/components/ReceiveWarnings.tsx @@ -5,7 +5,10 @@ import { FeesModal } from "~/components/MoreInfoModal"; import { useI18n } from "~/i18n/context"; import { useMegaStore } from "~/state/megaStore"; -export function ReceiveWarnings(props: { amountSats: string | bigint }) { +export function ReceiveWarnings(props: { + amountSats: string | bigint; + from_fedi_to_ln: boolean; +}) { const i18n = useI18n(); const [state, _actions] = useMegaStore(); @@ -26,7 +29,7 @@ export function ReceiveWarnings(props: { amountSats: string | bigint }) { }); const warningText = () => { - if (state.federations?.length !== 0) { + if (state.federations?.length !== 0 && props.from_fedi_to_ln != true) { return undefined; } if ((state.balance?.lightning || 0n) === 0n) { diff --git a/src/i18n/en/translations.ts b/src/i18n/en/translations.ts index 806a0af3f..5f648ed6b 100644 --- a/src/i18n/en/translations.ts +++ b/src/i18n/en/translations.ts @@ -601,7 +601,8 @@ export default { initiated: "Swap Initiated", sats_added: "+{{amount}} sats will be added to your Lightning balance", sats_fee: "+{{amount}} sats fee", - confirm_swap: "Confirm Swap" + confirm_swap: "Confirm Swap", + preview_swap: "Preview Swap Fee" }, reload: { mutiny_update: "Mutiny Update", diff --git a/src/routes/Receive.tsx b/src/routes/Receive.tsx index 513606238..6a347fb3e 100644 --- a/src/routes/Receive.tsx +++ b/src/routes/Receive.tsx @@ -377,7 +377,10 @@ export function Receive() { setAmountSats={setAmount} onSubmit={getQr} /> - +
diff --git a/src/routes/SwapLightning.tsx b/src/routes/SwapLightning.tsx index 1c94b9d57..43c5a96a9 100644 --- a/src/routes/SwapLightning.tsx +++ b/src/routes/SwapLightning.tsx @@ -21,13 +21,14 @@ import { DefaultMain, Failure, Fee, - HackActivityType, + FeeDisplay, InfoBox, LargeHeader, MegaCheck, MegaEx, MutinyWalletGuard, NavBar, + ReceiveWarnings, showToast, SuccessModal, TextField, @@ -49,18 +50,20 @@ export function SwapLightning() { const i18n = useI18n(); const [amountSats, setAmountSats] = createSignal(0n); + const [feeSats, setFeeSats] = createSignal(0n); + const [maxFederationBalanceBeforeSwap, setMaxFederationBalanceBeforeSwap] = + createSignal(0n); + const [previewFee, setPreviewFee] = createSignal(false); const [loading, setLoading] = createSignal(false); - // Details Modal - const [detailsOpen, setDetailsOpen] = createSignal(false); - const [detailsKind, setDetailsKind] = createSignal(); - const [detailsId, setDetailsId] = createSignal(""); - const [sweepResult, setSweepResult] = createSignal(); function resetState() { setAmountSats(0n); + setFeeSats(0n); + setPreviewFee(false); + setMaxFederationBalanceBeforeSwap(0n); setLoading(false); setSweepResult(undefined); } @@ -110,7 +113,7 @@ export function SwapLightning() { } if (amountSats() > (state.balance?.federation || 0n)) { - return i18n.t("swap.insufficient_funds"); + return i18n.t("swap_lightning.insufficient_funds"); } return undefined; @@ -128,11 +131,47 @@ export function SwapLightning() { return amountSats() === calculateMaxFederation(); }); + const feeIsSet = createMemo(() => { + return feeSats() !== 0n; + }); + + const feeEstimate = async () => { + if (canSwap()) { + try { + setLoading(true); + if (isMax()) { + const fee = + await state.mutiny_wallet?.estimate_sweep_federation_fee( + undefined + ); + setFeeSats(fee); + setMaxFederationBalanceBeforeSwap(calculateMaxFederation()); + setPreviewFee(true); + } else { + const fee = + await state.mutiny_wallet?.estimate_sweep_federation_fee( + amountSats() + ); + setFeeSats(fee); + setMaxFederationBalanceBeforeSwap(calculateMaxFederation()); + setPreviewFee(true); + } + } catch (e) { + console.error(e); + return undefined; + } finally { + setLoading(false); + } + } + + return undefined; + }; + return ( - {i18n.t("swap.header")} + {i18n.t("swap_lightning.header")} - - -

- {i18n.t("swap.initiated")} + {i18n.t("swap_lightning.initiated")}

- {i18n.t("swap.sats_added", { + {i18n.t("swap_lightning.sats_added", { amount: Number( sweepResult()?.result?.amount ).toLocaleString() @@ -205,6 +236,17 @@ export function SwapLightning() { } ]} /> + + + + 0n}> {amountWarning()} @@ -214,10 +256,18 @@ export function SwapLightning() {