From b38592ca4c47fd2da130461ccb4f6d9dcc62ed8c Mon Sep 17 00:00:00 2001 From: Artem Nechipurenko Date: Wed, 29 Oct 2025 16:00:28 +0300 Subject: [PATCH 1/2] refactor: remove SubscriptionSection component and related API for cleaner landing page --- .../components/subscription-section/api.ts | 15 ---- .../subscription-section.tsx | 69 ------------------- .../landing/src/widgets/landing/landing.tsx | 2 - 3 files changed, 86 deletions(-) delete mode 100644 packages/landing/src/widgets/landing/components/subscription-section/api.ts delete mode 100644 packages/landing/src/widgets/landing/components/subscription-section/subscription-section.tsx diff --git a/packages/landing/src/widgets/landing/components/subscription-section/api.ts b/packages/landing/src/widgets/landing/components/subscription-section/api.ts deleted file mode 100644 index 77cb67e6..00000000 --- a/packages/landing/src/widgets/landing/components/subscription-section/api.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { isProduction } from '@slender/shared/config'; -import { postRequest } from '@slender/shared/api'; - -const SEND_EMAIL_PROD_PATH = 'https://api.slender.fi/api/users'; -const SEND_EMAIL_DEV_PATH = 'https://api-stage.slender.fi/api/users'; - -const SEND_EMAIL_PATH = isProduction ? SEND_EMAIL_PROD_PATH : SEND_EMAIL_DEV_PATH; - -export function sendEmail(email: string) { - return postRequest(SEND_EMAIL_PATH, 'POST', { - email, - scope: 'Slender Landing', - skipMailchimpCreation: false, - }); -} diff --git a/packages/landing/src/widgets/landing/components/subscription-section/subscription-section.tsx b/packages/landing/src/widgets/landing/components/subscription-section/subscription-section.tsx deleted file mode 100644 index eebe0cf2..00000000 --- a/packages/landing/src/widgets/landing/components/subscription-section/subscription-section.tsx +++ /dev/null @@ -1,69 +0,0 @@ -'use client'; - -import React, { ChangeEvent, FormEvent, useState } from 'react'; -import cn from 'classnames'; -import Button from '@marginly/ui/components/button'; -import { sendEmail } from './api'; -import { Space } from '../space'; -import { ReactComponent as EmailIcon } from '../../images/email.svg'; -import { Container, Form, InputBox, InputLabel, Title } from '../styled'; - -export function SubscriptionSection() { - const [email, setEmail] = useState(''); - - const [emailIsFocused, setEmailIsFocused] = useState(false); - const [emailHasError, setEmailHasError] = useState(false); - const [emailIsSent, setEmailIsSent] = useState(false); - - const handleEmailChange = (e: ChangeEvent) => { - setEmail(e.target.value); - setEmailHasError(false); - }; - - const handleSubscribe = (event: FormEvent) => { - event.preventDefault(); - const emailIsValid = /^[\w-.]+@([\w-]+\.)+[\w-]{2,4}$/.test(email); - setEmailHasError(!emailIsValid); - if (emailIsValid) { - sendEmail(email).then(() => { - setEmailIsSent(true); - setEmail(''); - }); - } else { - setEmailHasError(true); - } - }; - - return ( - - - - - {emailIsSent ? <>You will receive our newsletter</> : <>Stay tuned for updates</>} - - - - {emailIsSent ? ( -
- - - ) : ( -
- setEmailIsFocused(true)} - onBlur={() => setEmailIsFocused(false)} - className={cn({ focused: email || emailIsFocused, error: emailHasError })} - > - Your email - - - - -
- )} - -
- ); -} diff --git a/packages/landing/src/widgets/landing/landing.tsx b/packages/landing/src/widgets/landing/landing.tsx index 59516632..5076cc0c 100644 --- a/packages/landing/src/widgets/landing/landing.tsx +++ b/packages/landing/src/widgets/landing/landing.tsx @@ -2,7 +2,6 @@ import React from 'react'; import Image from 'next/image'; -import { SubscriptionSection } from '@/widgets/landing/components/subscription-section/subscription-section'; import Typography from '@marginly/ui/components/typography'; import Button from '@marginly/ui/components/button'; import NextLink from 'next/link'; @@ -203,7 +202,6 @@ export function Landing({ posts }: Props) { }} /> - From e9a3057e7982c03fac80ef34a923d2fc5f6aefdf Mon Sep 17 00:00:00 2001 From: Artem Nechipurenko Date: Wed, 29 Oct 2025 16:45:26 +0300 Subject: [PATCH 2/2] fix: update BorrowIncreaseModal to use correct currency rates for minimum required calculations --- .../borrow-increase-modal/borrow-increase-modal.tsx | 7 ++++--- .../app/src/features/liquidity-flow/utils/get-max-debt.ts | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/app/src/features/liquidity-flow/components/borrow-increase-modal/borrow-increase-modal.tsx b/packages/app/src/features/liquidity-flow/components/borrow-increase-modal/borrow-increase-modal.tsx index da1dc211..06c170e6 100644 --- a/packages/app/src/features/liquidity-flow/components/borrow-increase-modal/borrow-increase-modal.tsx +++ b/packages/app/src/features/liquidity-flow/components/borrow-increase-modal/borrow-increase-modal.tsx @@ -104,10 +104,11 @@ export function BorrowIncreaseModal({ const minDebtUsd = useMinDebtUsd(); const currencyRates = useContextSelector(CurrencyRatesContext, (state) => state.currencyRates); - const currencyRate = Number(currencyRates?.[tokenName.toUpperCase() || '']); + const coreCurrencyRate = Number(currencyRates?.[coreDebtTokenName.toUpperCase() || '']); + const extraCurrencyRate = Number(currencyRates?.[extraDebtTokenName?.toUpperCase() || '']); - const minimumRequired = currencyRate * minDebtUsd; - const extraMinimumRequired = currencyRate * minDebtUsd; + const minimumRequired = coreCurrencyRate * minDebtUsd; + const extraMinimumRequired = extraCurrencyRate * minDebtUsd; const isDebtBiggerThanMinimum = Number(value) >= minimumRequired; diff --git a/packages/app/src/features/liquidity-flow/utils/get-max-debt.ts b/packages/app/src/features/liquidity-flow/utils/get-max-debt.ts index 46caf559..b66954fb 100644 --- a/packages/app/src/features/liquidity-flow/utils/get-max-debt.ts +++ b/packages/app/src/features/liquidity-flow/utils/get-max-debt.ts @@ -2,4 +2,4 @@ export const getMaxDebt = ( availableToBorrow: number, defaultBorrowCapacity: number, priceInUsd: number, -) => Math.min(availableToBorrow, Number((defaultBorrowCapacity / priceInUsd).toFixed(3))); +) => Math.min(availableToBorrow, Number((defaultBorrowCapacity * priceInUsd).toFixed(3)));