diff --git a/web-marketplace/src/components/molecules/CreditsAmount/CreditsAmount.tsx b/web-marketplace/src/components/molecules/CreditsAmount/CreditsAmount.tsx index cb2675d47b..e0be667b23 100644 --- a/web-marketplace/src/components/molecules/CreditsAmount/CreditsAmount.tsx +++ b/web-marketplace/src/components/molecules/CreditsAmount/CreditsAmount.tsx @@ -20,7 +20,7 @@ import { import { CreditsAmountHeader } from './CreditsAmount.Header'; import { CreditsAmountProps } from './CreditsAmount.types'; import { - formatFullSellOrder, + formatSellOrder, getCreditsAmount, getCreditsAvailablePerCurrency, getCurrencyAmount, @@ -50,7 +50,10 @@ export const CreditsAmount = ({ useFormContext(); const setErrorBannerTextAtom = useSetAtom(errorBannerTextAtom); - const card = paymentOption === PAYMENT_OPTIONS.CARD; + const card = useMemo( + () => paymentOption === PAYMENT_OPTIONS.CARD, + [paymentOption], + ); const orderedSellOrders = useMemo( () => card @@ -126,7 +129,7 @@ export const CreditsAmount = ({ SELL_ORDERS, orderedSellOrders.map(order => { const price = getSellOrderPrice({ order, card }); - return formatFullSellOrder({ order, card, price }); + return formatSellOrder({ order, card, price }); }), ); const formattedCreditsAvailable = i18n.number(_creditsAvailable); @@ -179,7 +182,7 @@ export const CreditsAmount = ({ SELL_ORDERS, orderedSellOrders.map(order => { const price = getSellOrderPrice({ order, card }); - return formatFullSellOrder({ order, card, price }); + return formatSellOrder({ order, card, price }); }), ); setMaxCreditsSelected(false); diff --git a/web-marketplace/src/components/molecules/CreditsAmount/CreditsAmount.utils.tsx b/web-marketplace/src/components/molecules/CreditsAmount/CreditsAmount.utils.tsx index 9b0f39b267..8ee29e2135 100644 --- a/web-marketplace/src/components/molecules/CreditsAmount/CreditsAmount.utils.tsx +++ b/web-marketplace/src/components/molecules/CreditsAmount/CreditsAmount.utils.tsx @@ -57,9 +57,9 @@ export const getCreditsAmount = ({ let currentCreditsAmount = 0; let currencyAmountLeft = currentCurrencyAmount; const sellOrders = []; + const creditPrecision = creditTypePrecision || 6; - for (let i = 0; i < orderedSellOrders.length; i++) { - const order = orderedSellOrders[i]; + for (const order of orderedSellOrders) { const price = getSellOrderPrice({ order, card }); const quantity = Number(order.quantity); const orderTotalAmount = quantity * price; @@ -69,26 +69,24 @@ export const getCreditsAmount = ({ (currencyAmountLeft - orderTotalAmount).toFixed(6), ); currentCreditsAmount += quantity; - sellOrders.push(formatFullSellOrder({ order, card, price })); + sellOrders.push(formatSellOrder({ order, card, price })); if (currencyAmountLeft === 0) break; } else { currentCreditsAmount += currencyAmountLeft / price; - sellOrders.push({ - sellOrderId: order.id, - quantity: (currencyAmountLeft / price).toFixed( - creditTypePrecision || 6, - ), - bidPrice: !card - ? { amount: String(price), denom: order.askDenom } - : undefined, - price: card ? price * 100 : undefined, // stripe amounts should be in the smallest currency unit (e.g., 100 cents to charge $1.00) - }); + sellOrders.push( + formatSellOrder({ + order, + card, + price, + quantity: (currencyAmountLeft / price).toFixed(creditPrecision), + }), + ); break; } } return { currentCreditsAmount: parseFloat( - currentCreditsAmount.toFixed(creditTypePrecision || 6), + currentCreditsAmount.toFixed(creditPrecision), ), sellOrders, }; @@ -110,8 +108,7 @@ export const getCurrencyAmount = ({ let creditsAmountLeft = currentCreditsAmount; const sellOrders = []; - for (let i = 0; i < orderedSellOrders.length; i++) { - const order = orderedSellOrders[i]; + for (const order of orderedSellOrders) { const price = getSellOrderPrice({ order, card }); const quantity = Number(order.quantity); @@ -121,20 +118,20 @@ export const getCurrencyAmount = ({ (creditsAmountLeft - quantity).toFixed(creditTypePrecision || 6), ); currentCurrencyAmount += quantity * price; - sellOrders.push(formatFullSellOrder({ order, card, price })); + sellOrders.push(formatSellOrder({ order, card, price })); if (creditsAmountLeft === 0) break; } else { // Take only remaining credits currentCurrencyAmount += creditsAmountLeft * price; - sellOrders.push({ - sellOrderId: order.id, - quantity: String(creditsAmountLeft), - bidPrice: !card - ? { amount: String(price), denom: order.askDenom } - : undefined, - price: card ? price * 100 : undefined, // stripe amounts should be in the smallest currency unit (e.g., 100 cents to charge $1.00) - }); + sellOrders.push( + formatSellOrder({ + order, + card, + price, + quantity: String(creditsAmountLeft), + }), + ); break; } } @@ -154,15 +151,19 @@ type GetSellOrderPriceParams = { export const getSellOrderPrice = ({ order, card }: GetSellOrderPriceParams) => card ? (order as CardSellOrder).usdPrice : Number(order.askAmount); -type FormatFullSellOrderParams = { price: number } & GetSellOrderPriceParams; -export const formatFullSellOrder = ({ +type FormatSellOrderParams = { + price: number; + quantity?: string; +} & GetSellOrderPriceParams; +export const formatSellOrder = ({ order, card, price, -}: FormatFullSellOrderParams) => { + quantity, +}: FormatSellOrderParams) => { return { sellOrderId: order.id, - quantity: order.quantity, + quantity: quantity || order.quantity, bidPrice: !card ? { amount: String(price), denom: order.askDenom } : undefined, diff --git a/web-marketplace/src/components/templates/ProjectDetails/hooks/useGetProject.ts b/web-marketplace/src/components/templates/ProjectDetails/hooks/useGetProject.ts index a0573472fc..8feb800cea 100644 --- a/web-marketplace/src/components/templates/ProjectDetails/hooks/useGetProject.ts +++ b/web-marketplace/src/components/templates/ProjectDetails/hooks/useGetProject.ts @@ -119,7 +119,7 @@ export const useGetProject = () => { (projectsWithOrderData?.[0]?.sellOrders || []).filter( sellOrder => sellOrder.seller !== wallet?.address, ), - [projectsWithOrderData], + [projectsWithOrderData, wallet?.address], ); const cardSellOrders = useMemo(