import React, { ReactElement, 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 { gql, useQuery } from 'urql' import { PoolShares as PoolSharesList, 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 { useWeb3 } from '../../../providers/Web3' const poolSharesQuery = gql` query PoolShares($user: String) { poolShares(where: { userAddress: $user, balance_gt: 0.001 }, first: 1000) { id balance userAddress { id } poolId { id datatokenAddress valueLocked tokens { tokenId { symbol } } oceanReserve datatokenReserve totalShares consumePrice spotPrice } } } ` interface Asset { userLiquidity: number poolShare: PoolShare } function calculateUserLiquidity(poolShare: PoolShare) { const ocean = (poolShare.balance / poolShare.poolId.totalShares) * poolShare.poolId.oceanReserve const datatokens = (poolShare.balance / poolShare.poolId.totalShares) * poolShare.poolId.datatokenReserve const totalLiquidity = ocean + datatokens * poolShare.poolId.consumePrice return totalLiquidity } function findValidToken(tokens: PoolSharePoolIdTokens[]) { const symbol = tokens.find((token) => token.tokenId !== null) return symbol.tokenId.symbol } function Symbol({ tokens }: { tokens: PoolSharePoolIdTokens[] }) { return <>{findValidToken(tokens)}> } 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 = `${ Number(row.poolShare.poolId.oceanReserve) + Number(row.poolShare.poolId.datatokenReserve) * row.poolShare.poolId.consumePrice }` oceanTokenBalance = row.poolShare.poolId.oceanReserve.toString() dataTokenBalance = row.poolShare.poolId.datatokenReserve.toString() } return (