import React, { ReactElement, useState, useEffect } from 'react' import styles from './index.module.css' import Compute from './Compute' import Consume from './Consume' import { DDO, Logger } from '@oceanprotocol/lib' import Tabs from '../../atoms/Tabs' import { useOcean, useMetadata } from '@oceanprotocol/react' import compareAsBN from '../../../utils/compareAsBN' import Pool from './Pool' import { AdditionalInformationMarket } from '../../../@types/MetaData' export default function AssetActions({ ddo }: { ddo: DDO }): ReactElement { const { ocean, balance, accountId } = useOcean() const { price } = useMetadata(ddo) const [isBalanceSufficient, setIsBalanceSufficient] = useState() const [dtBalance, setDtBalance] = useState() const isCompute = Boolean(ddo.findServiceByType('compute')) const { attributes } = ddo.findServiceByType('metadata') // 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 || !price.value || !balance || !balance.ocean) return setIsBalanceSufficient(compareAsBN(balance.ocean, `${price.value}`)) return () => { setIsBalanceSufficient(false) } }, [balance, price]) const UseContent = isCompute ? ( ) : ( ) const tabs = [ { title: 'Use', content: UseContent } ] // Check from metadata, cause that is available earlier const hasPool = ((attributes.additionalInformation as unknown) as AdditionalInformationMarket) ?.priceType === 'dynamic' // price?.type === 'pool' hasPool && tabs.push({ title: 'Pool', content: }) return }