import React, { useEffect, useMemo, useState } from 'react' import * as Slider from '@radix-ui/react-slider' import BigNumber from 'bignumber.js' import { Switch } from '@headlessui/react' import Button from '../Button' import useAllowedCoins from 'hooks/useAllowedCoins' import useDepositCreditAccount from 'hooks/useDepositCreditAccount' import useCreditManagerStore from 'stores/useCreditManagerStore' import useAllBalances from 'hooks/useAllBalances' import { getTokenDecimals, getTokenSymbol } from 'utils/tokens' import CreditManagerContainer from './CreditManagerContainer' const FundAccount = () => { const [amount, setAmount] = useState(0) const [selectedToken, setSelectedToken] = useState('') const [enabled, setEnabled] = useState(false) const selectedAccount = useCreditManagerStore((s) => s.selectedAccount) const { data: balancesData } = useAllBalances() const { data: allowedCoinsData, isLoading: isLoadingAllowedCoins } = useAllowedCoins() const { mutate } = useDepositCreditAccount( selectedAccount || '', selectedToken, BigNumber(amount) .times(10 ** getTokenDecimals(selectedToken)) .toNumber() ) useEffect(() => { if (allowedCoinsData && allowedCoinsData.length > 0) { // initialize selected token when allowedCoins fetch data is available setSelectedToken(allowedCoinsData[0]) } }, [allowedCoinsData]) const walletAmount = useMemo(() => { if (!selectedToken) return 0 return BigNumber(balancesData?.find((balance) => balance.denom === selectedToken)?.amount ?? 0) .div(10 ** getTokenDecimals(selectedToken)) .toNumber() }, [balancesData, selectedToken]) const handleValueChange = (value: number) => { if (value > walletAmount) { setAmount(walletAmount) return } setAmount(value) } const maxValue = walletAmount const percentageValue = isNaN(amount) ? 0 : (amount * 100) / maxValue return ( <>

Transfer assets from your injective wallet to your Mars credit account. If you don’t have any assets in your injective wallet use the injective bridge to transfer funds to your injective wallet.

{isLoadingAllowedCoins ? (

Loading...

) : ( <>
Asset:
Amount:
handleValueChange(e.target.valueAsNumber)} />

In wallet: {walletAmount.toLocaleString()}

{/* SLIDER - initial implementation to test functionality */} {/* TODO: will need to be revamped later on */}
{ const decimal = value[0] / 100 const tokenDecimals = getTokenDecimals(selectedToken) // limit decimal precision based on token contract decimals const newAmount = Number((decimal * maxValue).toFixed(tokenDecimals)) setAmount(newAmount) }} >
{percentageValue.toFixed(0)}%
)}

Lending Assets

Lend assets from account to earn yield.
) } export default FundAccount