import React, { ReactElement, useEffect, useState } from 'react' import { useOcean, useMetadata } from '@oceanprotocol/react' import { DDO } from '@oceanprotocol/lib' import styles from './index.module.css' import Token from './Token' import PriceUnit from '../../../atoms/Price/PriceUnit' import Loader from '../../../atoms/Loader' import Button from '../../../atoms/Button' import Add from './Add' import Remove from './Remove' import Tooltip from '../../../atoms/Tooltip' interface Balance { ocean: string dt: string } export default function Pool({ ddo }: { ddo: DDO }): ReactElement { const { ocean, accountId } = useOcean() const { getBestPool } = useMetadata() const [poolAddress, setPoolAddress] = useState() const [totalBalance, setTotalBalance] = useState() const [dtPrice, setDtPrice] = useState() const [dtSymbol, setDtSymbol] = useState() const [userBalance, setUserBalance] = useState() const [showAdd, setShowAdd] = useState() const [showRemove, setShowRemove] = useState() const isLoading = !ocean || !totalBalance || !userBalance || !dtPrice const hasAddedLiquidity = userBalance && (Number(userBalance.ocean) > 0 || Number(userBalance.dt) > 0) useEffect(() => { async function init() { try { const { poolAddress, poolPrice } = await getBestPool(ddo.dataToken) setPoolAddress(poolAddress) setDtPrice(poolPrice) const dtSymbol = await ocean.datatokens.getSymbol( ddo.dataToken, accountId ) setDtSymbol(dtSymbol) const oceanReserve = await ocean.pool.getOceanReserve( accountId, poolAddress ) const dtReserve = await ocean.pool.getDTReserve(accountId, poolAddress) setTotalBalance({ ocean: oceanReserve, dt: dtReserve }) const sharesBalance = await ocean.pool.sharesBalance( accountId, poolAddress ) const userBalance = { ocean: `${ (Number(sharesBalance) / Number(dtReserve)) * Number(oceanReserve) }`, dt: sharesBalance } setUserBalance(userBalance) } catch (error) { console.error(error.message) } } init() }, [ocean, accountId]) const poolShare = totalBalance && userBalance && ((Number(totalBalance.dt) * Number(userBalance.dt)) / 100).toFixed(2) return ( <> {isLoading ? ( ) : showAdd ? ( ) : showRemove ? ( ) : ( <>
={' '}

Your Pool Share{' '}

Total Pooled Tokens

{hasAddedLiquidity && ( )}
)} ) }