import React, { ReactElement, useCallback, useEffect, useState } from 'react' import Table from '../../../atoms/Table' import Conversion from '../../../atoms/Price/Conversion' import styles from './PoolShares.module.css' import AssetTitle from '../../../molecules/AssetListTitle' import { PoolShares_poolShares as PoolShare, PoolShares_poolShares_poolId_tokens as PoolSharePoolIdTokens } from '../../../../@types/apollo/PoolShares' import web3 from 'web3' import Token from '../../../organisms/AssetActions/Pool/Token' import { calculateUserLiquidity } from '../../../../utils/subgraph' import NetworkName from '../../../atoms/NetworkName' import { CancelToken } from 'axios' import { retrieveDDO } from '../../../../utils/aquarius' import { isValidNumber } from '../../../../utils/numberValidations' import Decimal from 'decimal.js' import { useProfile } from '../../../../providers/Profile' import { DDO } from '@oceanprotocol/lib' import { useCancelToken } from '../../../../hooks/useCancelToken' Decimal.set({ toExpNeg: -18, precision: 18, rounding: 1 }) const REFETCH_INTERVAL = 20000 interface Asset { userLiquidity: number poolShare: PoolShare networkId: number createTime: number ddo: DDO } function findTokenByType(tokens: PoolSharePoolIdTokens[], type: string) { const { symbol } = tokens.find((token) => type === 'datatoken' ? token.isDatatoken === true : token.isDatatoken === false ) return symbol } function Symbol({ tokens }: { tokens: PoolSharePoolIdTokens[] }) { return <>{findTokenByType(tokens, 'datatoken')}> } function Liquidity({ row, type }: { row: Asset; type: string }) { let price = `` let oceanTokenBalance = '' let dataTokenBalance = '' if (type === 'user') { price = `${row.userLiquidity}` const userShare = row.poolShare.balance / row.poolShare.poolId.totalShares oceanTokenBalance = ( userShare * row.poolShare.poolId.oceanReserve ).toString() dataTokenBalance = ( userShare * row.poolShare.poolId.datatokenReserve ).toString() } if (type === 'pool') { price = isValidNumber(row.poolShare.poolId.oceanReserve) && isValidNumber(row.poolShare.poolId.datatokenReserve) && isValidNumber(row.poolShare.poolId.consumePrice) ? new Decimal(row.poolShare.poolId.datatokenReserve) .mul(new Decimal(row.poolShare.poolId.consumePrice)) .plus(row.poolShare.poolId.oceanReserve) .toString() : '0' oceanTokenBalance = row.poolShare.poolId.oceanReserve.toString() dataTokenBalance = row.poolShare.poolId.datatokenReserve.toString() } return (