import React, { useMemo, useState } from 'react' import { XMarkIcon } from '@heroicons/react/24/solid' import { toast } from 'react-toastify' import * as Slider from '@radix-ui/react-slider' import Button from 'components/Button' import Container from 'components/Container' import { getTokenDecimals, getTokenSymbol } from 'utils/tokens' import useRepayFunds from 'hooks/useRepayFunds' import useTokenPrices from 'hooks/useTokenPrices' import { formatCurrency } from 'utils/formatters' import BigNumber from 'bignumber.js' import useAllBalances from 'hooks/useAllBalances' import ContainerSecondary from 'components/ContainerSecondary' import Spinner from 'components/Spinner' const RepayFunds = ({ tokenDenom, amount: repayAmount, onClose }: any) => { const [amount, setAmount] = useState(0) const tokenSymbol = getTokenSymbol(tokenDenom) const { mutate, isLoading } = useRepayFunds(amount, tokenDenom, { onSuccess: () => { onClose() toast.success(`${amount} ${tokenSymbol} successfully repaid`) }, }) const { data: tokenPrices } = useTokenPrices() const { data: balancesData } = useAllBalances() const handleSubmit = () => { mutate() } const walletAmount = useMemo(() => { return BigNumber(balancesData?.find((balance) => balance.denom === tokenDenom)?.amount ?? 0) .div(10 ** getTokenDecimals(tokenDenom)) .toNumber() }, [balancesData, tokenDenom]) const tokenPrice = tokenPrices?.[tokenDenom] ?? 0 const maxValue = walletAmount > repayAmount ? repayAmount : walletAmount const percentageValue = isNaN(amount) ? 0 : (amount * 100) / maxValue const isSubmitDisabled = !amount || amount < 0 const handleValueChange = (value: number) => { if (value > maxValue) { setAmount(maxValue) return } setAmount(value) } return ( {isLoading && (
)}

Repay {tokenSymbol}

In wallet:{' '} {walletAmount.toLocaleString()} {tokenSymbol}

Amount
handleValueChange(e.target.valueAsNumber)} />
1 {tokenSymbol} ={' '} {formatCurrency(tokenPrice)}
{formatCurrency(tokenPrice * amount)}
{ const decimal = value[0] / 100 const tokenDecimals = getTokenDecimals(tokenDenom) // limit decimal precision based on token contract decimals const newAmount = Number((decimal * maxValue).toFixed(tokenDecimals)) setAmount(newAmount) }} >
{percentageValue.toFixed(0)}%
) } export default RepayFunds