1
0
mirror of https://github.com/oceanprotocol/market.git synced 2024-12-02 05:57:29 +01:00

get datatoken balance for use in consume/compute

This commit is contained in:
Matthias Kretschmann 2020-10-19 11:33:06 +02:00
parent e3bf9a46ac
commit be9fde8827
Signed by: m
GPG Key ID: 606EEEF3C479A91F
3 changed files with 41 additions and 15 deletions

View File

@ -19,10 +19,12 @@ import { useSiteMetadata } from '../../../hooks/useSiteMetadata'
export default function Compute({ export default function Compute({
ddo, ddo,
isBalanceSufficient isBalanceSufficient,
dtBalance
}: { }: {
ddo: DDO ddo: DDO
isBalanceSufficient: boolean isBalanceSufficient: boolean
dtBalance: string
}): ReactElement { }): ReactElement {
const { ocean } = useOcean() const { ocean } = useOcean()
const { compute, isLoading, computeStepText, computeError } = useCompute() const { compute, isLoading, computeStepText, computeError } = useCompute()

View File

@ -1,4 +1,4 @@
import React, { ReactElement } from 'react' import React, { ReactElement, useEffect } from 'react'
import { toast } from 'react-toastify' import { toast } from 'react-toastify'
import { File as FileMetadata, DDO } from '@oceanprotocol/lib' import { File as FileMetadata, DDO } from '@oceanprotocol/lib'
import Button from '../../atoms/Button' import Button from '../../atoms/Button'
@ -13,11 +13,13 @@ import { useSiteMetadata } from '../../../hooks/useSiteMetadata'
export default function Consume({ export default function Consume({
ddo, ddo,
file, file,
isBalanceSufficient isBalanceSufficient,
dtBalance
}: { }: {
ddo: DDO ddo: DDO
file: FileMetadata file: FileMetadata
isBalanceSufficient: boolean isBalanceSufficient: boolean
dtBalance: string
}): ReactElement { }): ReactElement {
const { ocean } = useOcean() const { ocean } = useOcean()
const { marketFeeAddress } = useSiteMetadata() const { marketFeeAddress } = useSiteMetadata()
@ -25,22 +27,20 @@ export default function Consume({
const isDisabled = !ocean || !isBalanceSufficient const isDisabled = !ocean || !isBalanceSufficient
if (consumeError) { async function handleConsume() {
toast.error(consumeError) await consume(ddo.id, ddo.dataToken, 'access', marketFeeAddress)
} }
useEffect(() => {
consumeError && toast.error(consumeError)
}, [consumeError])
const PurchaseButton = () => ( const PurchaseButton = () => (
<div> <div>
{consumeStepText ? ( {consumeStepText ? (
<Loader message={consumeStepText} /> <Loader message={consumeStepText} />
) : ( ) : (
<Button <Button style="primary" onClick={handleConsume} disabled={isDisabled}>
style="primary"
onClick={() =>
consume(ddo.id, ddo.dataToken, 'access', marketFeeAddress)
}
disabled={isDisabled}
>
Buy Buy
</Button> </Button>
)} )}

View File

@ -2,7 +2,7 @@ import React, { ReactElement, useState, useEffect } from 'react'
import styles from './index.module.css' import styles from './index.module.css'
import Compute from './Compute' import Compute from './Compute'
import Consume from './Consume' import Consume from './Consume'
import { DDO } from '@oceanprotocol/lib' import { DDO, Logger } from '@oceanprotocol/lib'
import Tabs from '../../atoms/Tabs' import Tabs from '../../atoms/Tabs'
import { useOcean, useMetadata } from '@oceanprotocol/react' import { useOcean, useMetadata } from '@oceanprotocol/react'
import compareAsBN from '../../../utils/compareAsBN' import compareAsBN from '../../../utils/compareAsBN'
@ -10,13 +10,32 @@ import Pool from './Pool'
import { AdditionalInformationMarket } from '../../../@types/MetaData' import { AdditionalInformationMarket } from '../../../@types/MetaData'
export default function AssetActions({ ddo }: { ddo: DDO }): ReactElement { export default function AssetActions({ ddo }: { ddo: DDO }): ReactElement {
const { balance } = useOcean() const { ocean, balance, accountId } = useOcean()
const { price } = useMetadata(ddo) const { price } = useMetadata(ddo)
const [isBalanceSufficient, setIsBalanceSufficient] = useState<boolean>() const [isBalanceSufficient, setIsBalanceSufficient] = useState<boolean>()
const [dtBalance, setDtBalance] = useState<string>()
const isCompute = Boolean(ddo.findServiceByType('compute')) const isCompute = Boolean(ddo.findServiceByType('compute'))
const { attributes } = ddo.findServiceByType('metadata') 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 // Check user balance against price
useEffect(() => { useEffect(() => {
if (!price || !price.value || !balance || !balance.ocean) return if (!price || !price.value || !balance || !balance.ocean) return
@ -29,10 +48,15 @@ export default function AssetActions({ ddo }: { ddo: DDO }): ReactElement {
}, [balance, price]) }, [balance, price])
const UseContent = isCompute ? ( const UseContent = isCompute ? (
<Compute ddo={ddo} isBalanceSufficient={isBalanceSufficient} /> <Compute
ddo={ddo}
dtBalance={dtBalance}
isBalanceSufficient={isBalanceSufficient}
/>
) : ( ) : (
<Consume <Consume
ddo={ddo} ddo={ddo}
dtBalance={dtBalance}
isBalanceSufficient={isBalanceSufficient} isBalanceSufficient={isBalanceSufficient}
file={attributes.main.files[0]} file={attributes.main.files[0]}
/> />