import React, { ReactElement, useState, useEffect } from 'react' import styles from './index.module.css' import Compute from './Compute' import Consume from './Consume' import { Logger } from '@oceanprotocol/lib' import Tabs from '../../atoms/Tabs' import compareAsBN from '../../../utils/compareAsBN' import Pool from './Pool' import Trade from './Trade' import { useAsset } from '../../../providers/Asset' import { useOcean } from '../../../providers/Ocean' import { useWeb3 } from '../../../providers/Web3' import Web3Feedback from '../../molecules/Web3Feedback' export default function AssetActions(): ReactElement { const { accountId } = useWeb3() const { ocean, balance, account } = useOcean() const { price, ddo, metadata, type, isAssetNetwork } = useAsset() const [isBalanceSufficient, setIsBalanceSufficient] = useState() const [dtBalance, setDtBalance] = useState() const isCompute = Boolean(ddo?.findServiceByType('compute')) // Get and set user DT balance useEffect(() => { if (!ocean || !accountId) return async function init() { try { const dtBalance = await ocean.datatokens.balance( ddo.dataToken, accountId ) setDtBalance(dtBalance) } catch (e) { Logger.error(e.message) } } init() }, [ocean, accountId, ddo.dataToken]) // Check user balance against price useEffect(() => { if (!price?.value || !account || !balance?.ocean || !dtBalance) return setIsBalanceSufficient( compareAsBN(balance.ocean, `${price.value}`) || Number(dtBalance) >= 1 ) return () => { setIsBalanceSufficient(false) } }, [balance, account, price, dtBalance]) const UseContent = isCompute ? ( ) : ( ) const tabs = [ { title: 'Use', content: UseContent } ] price?.type === 'pool' && tabs.push( { title: 'Pool', content: }, { title: 'Trade', content: } ) return ( <> {type !== 'algorithm' && ( )} ) }