1
0
mirror of https://github.com/oceanprotocol/market.git synced 2024-06-15 17:03:30 +02:00
market/src/components/organisms/AssetActions/index.tsx

62 lines
1.7 KiB
TypeScript
Raw Normal View History

2020-08-11 08:20:40 +02:00
import React, { ReactElement, useState, useEffect } from 'react'
2020-07-08 17:57:53 +02:00
import styles from './index.module.css'
import Compute from './Compute'
import Consume from './Consume'
2020-07-21 14:04:32 +02:00
import { DDO } from '@oceanprotocol/lib'
2020-07-23 12:26:08 +02:00
import Tabs from '../../atoms/Tabs'
2020-08-20 14:22:32 +02:00
import { useOcean, useMetadata } from '@oceanprotocol/react'
2020-08-11 09:30:17 +02:00
import compareAsBN from '../../../utils/compareAsBN'
2020-08-18 17:14:54 +02:00
import Pool from './Pool'
import { AdditionalInformationMarket } from '../../../@types/MetaData'
2020-07-08 17:57:53 +02:00
2020-08-26 08:48:22 +02:00
export default function AssetActions({ ddo }: { ddo: DDO }): ReactElement {
2020-08-11 08:20:40 +02:00
const { balance } = useOcean()
2020-08-20 16:59:17 +02:00
const { price } = useMetadata(ddo)
2020-08-11 09:41:23 +02:00
const [isBalanceSufficient, setIsBalanceSufficient] = useState<boolean>()
2020-08-11 08:20:40 +02:00
2020-08-05 13:21:14 +02:00
const isCompute = Boolean(ddo.findServiceByType('compute'))
2020-08-26 08:48:22 +02:00
const { attributes } = ddo.findServiceByType('metadata')
2020-08-07 18:12:39 +02:00
2020-08-11 08:20:40 +02:00
// Check user balance against price
useEffect(() => {
if (!price || !price.value || !balance || !balance.ocean) return
2020-08-11 08:20:40 +02:00
2020-10-08 14:45:55 +02:00
setIsBalanceSufficient(compareAsBN(balance.ocean, `${price.value}`))
2020-08-11 08:20:40 +02:00
return () => {
setIsBalanceSufficient(false)
}
}, [balance, price])
2020-07-23 12:26:08 +02:00
const UseContent = isCompute ? (
2020-08-20 14:22:32 +02:00
<Compute ddo={ddo} isBalanceSufficient={isBalanceSufficient} />
2020-07-23 12:26:08 +02:00
) : (
2020-08-11 08:20:40 +02:00
<Consume
ddo={ddo}
isBalanceSufficient={isBalanceSufficient}
2020-08-26 08:48:22 +02:00
file={attributes.main.files[0]}
2020-08-11 08:20:40 +02:00
/>
2020-07-08 17:57:53 +02:00
)
2020-07-23 12:26:08 +02:00
const tabs = [
{
title: 'Use',
content: UseContent
}
]
2020-09-23 13:55:53 +02:00
// 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: <Pool ddo={ddo} />
})
2020-07-23 12:26:08 +02:00
return <Tabs items={tabs} className={styles.actions} />
2020-07-08 17:57:53 +02:00
}