diff --git a/packages/payment-widget/src/lib/components/payment-confirmation.svelte b/packages/payment-widget/src/lib/components/payment-confirmation.svelte index c718e63c..2ec6cd8a 100644 --- a/packages/payment-widget/src/lib/components/payment-confirmation.svelte +++ b/packages/payment-widget/src/lib/components/payment-confirmation.svelte @@ -20,6 +20,7 @@ } from "../utils/request"; import Spinner from "./spinner.svelte"; import WalletInfo from "./wallet-info.svelte"; + import { ethers } from "ethers"; export let selectedCurrency: Currency; export let amountInUSD: number; @@ -36,6 +37,8 @@ export let onPaymentSuccess: (request: any) => void; export let onPaymentError: (error: string) => void; export let invoiceNumber: string | undefined; + export let feeAddress: string; + export let feeAmountInUSD: number; const COUNTDOWN_INTERVAL = 30; @@ -44,9 +47,11 @@ let intervalId: NodeJS.Timeout; let exchangeRate: number = 0; let error: string = ""; + let feeAmountInCrypto: number = 0; $: isLoadingPrice = true; $: isPaying = false; + $: totalPayment = amountInCrypto + feeAmountInCrypto; const currencySymbol = selectedCurrency.symbol.includes( selectedCurrency.network @@ -72,6 +77,7 @@ const rate = data.data.rates[lookupSymbol]; exchangeRate = parseFloat(rate); amountInCrypto = amountInUSD * exchangeRate; + feeAmountInCrypto = feeAmountInUSD * exchangeRate; } catch (error) { alert("Unable to fetch exchange rate. Please try again later"); } finally { @@ -145,29 +151,58 @@ > -
+

Payment to

- - {sellerAddress} - - +
+ + {sellerAddress} + + +
+ {#if feeAddress !== ethers.constants.AddressZero && feeAmountInUSD > 0} +
+

Fee to

+
+ + {feeAddress} + + +
+
+
+

Fee Amount

+ + ${feeAmountInUSD} USD / {trimTrailingDecimalZeros(feeAmountInCrypto)} + {currencySymbol} + +
+ {/if}

Payment network

{NETWORK_LABEL[selectedCurrency.network]}

Total

- {trimTrailingDecimalZeros(amountInCrypto)} {currencySymbol} + {trimTrailingDecimalZeros(totalPayment)} {currencySymbol}
{#if !isPaying} @@ -216,11 +251,15 @@ try { const requestParameters = prepareRequestParameters({ currency: selectedCurrency, + feeAddress, + feeAmountInUSD, + feeAmountInCrypto, productInfo, sellerInfo, buyerInfo, payerAddress, amountInCrypto, + totalAmountInCrypto: totalPayment, exchangeRate, amountInUSD, builderId, @@ -286,23 +325,6 @@ width: 100%; gap: 16px; - .payment-confirmation-seller-address { - display: flex; - align-items: center; - gap: 2px; - font-size: 12px; - - button { - background: none; - border: none; - padding: 0; - margin: 0; - cursor: pointer; - display: inline-flex; - align-items: center; - justify-content: center; - } - } &-amount-info { display: flex; align-items: center; @@ -351,6 +373,49 @@ font-weight: 500; font-size: 14px; } + + &.payment-confirmation-address { + flex-direction: column; + align-items: flex-start; + gap: 8px; + + h4 { + margin: 0; + } + + .address-container { + display: flex; + align-items: center; + gap: 8px; + width: 100%; + + a { + flex-grow: 1; + text-decoration: none; + color: inherit; + font-size: 14px; + + span { + display: inline-block; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + } + + button { + background: none; + border: none; + padding: 0; + margin: 0; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + } + } + } } &-warning { diff --git a/packages/payment-widget/src/lib/payment-widget.svelte b/packages/payment-widget/src/lib/payment-widget.svelte index 6c0e298d..c0b502ea 100644 --- a/packages/payment-widget/src/lib/payment-widget.svelte +++ b/packages/payment-widget/src/lib/payment-widget.svelte @@ -1,15 +1,16 @@