1
0
mirror of https://github.com/oceanprotocol/market.git synced 2024-12-02 05:57:29 +01:00
market/src/components/templates/AssetDetails.tsx
Matthias Kretschmann 225613745c
hit Aquarius only when config is present (#258)
* hit Aquarius only when config is present

* more checks
2020-11-17 14:21:29 +01:00

79 lines
2.3 KiB
TypeScript

import React, { useState, useEffect, ReactElement } from 'react'
import { Router } from '@reach/router'
import AssetContent from '../../components/organisms/AssetContent'
import Layout from '../../components/Layout'
import { MetadataMarket } from '../../@types/MetaData'
import { MetadataCache, Logger, DDO } from '@oceanprotocol/lib'
import Alert from '../../components/atoms/Alert'
import Loader from '../../components/atoms/Loader'
import { useOcean } from '@oceanprotocol/react'
export default function PageTemplateAssetDetails({
did,
uri
}: {
did: string
uri: string
}): ReactElement {
const { config } = useOcean()
const [metadata, setMetadata] = useState<MetadataMarket>()
const [title, setTitle] = useState<string>()
const [error, setError] = useState<string>()
const [ddo, setDdo] = useState<DDO>()
useEffect(() => {
if (!config?.metadataCacheUri) return
async function init() {
if (ddo) return
try {
const metadataCache = new MetadataCache(config.metadataCacheUri, Logger)
const ddo = await metadataCache.retrieveDDO(did)
if (!ddo) {
setTitle('Could not retrieve asset')
setError(
`The DDO for ${did} was not found in MetadataCache. If you just published a new data set, wait some seconds and refresh this page.`
)
return
}
setDdo(ddo)
const { attributes } = ddo.findServiceByType('metadata')
setTitle(attributes.main.name)
setMetadata((attributes as unknown) as MetadataMarket)
} catch (error) {
setTitle('Error retrieving asset')
setError(error.message)
}
}
init()
// Periodically try to get DDO when not present yet
const timer = !ddo && setInterval(() => init(), 5000)
return () => clearInterval(timer)
}, [ddo, did, config.metadataCacheUri])
return did && metadata ? (
<Layout title={title} uri={uri}>
<Router basepath="/asset">
<AssetContent
ddo={ddo}
metadata={metadata as MetadataMarket}
path=":did"
/>
</Router>
</Layout>
) : error ? (
<Layout title={title} noPageHeader uri={uri}>
<Alert title={title} text={error} state="error" />
</Layout>
) : (
<Layout title={undefined} uri={uri}>
<Loader />
</Layout>
)
}