1
0
mirror of https://github.com/oceanprotocol/commons.git synced 2023-03-15 18:03:00 +01:00
2020-03-30 19:22:48 +03:00

109 lines
2.9 KiB
TypeScript

import React, { Component } from 'react'
import { DDO, MetaData, Logger } from '@oceanprotocol/squid'
import Route from '../Route'
import Spinner from '../../atoms/Spinner'
import { User } from '../../../context'
import AssetDetails from './AssetDetails'
import stylesApp from '../../../App.module.scss'
import Content from '../../atoms/Content'
import CategoryImage from '../../atoms/CategoryImage'
import styles from './index.module.scss'
import withTracker from '../../../hoc/withTracker'
import Web3message from '../../organisms/Web3message'
interface AssetProps {
match: {
params: {
did: string
}
}
}
interface AssetState {
ocean: any
ddo: DDO
metadata: MetaData
error: string
isLoading: boolean
}
class Asset extends Component<AssetProps, AssetState> {
public static contextType = User
public state = {
ocean: undefined,
ddo: ({} as any) as DDO,
metadata: ({ main: { name: '' } } as any) as MetaData,
computeMetadata: undefined,
error: '',
isLoading: true
}
public async componentDidMount() {
this.getData()
}
private async getData() {
try {
const { ocean } = this.context
const ddo = await ocean.assets.resolve(this.props.match.params.did)
const { attributes } = ddo.findServiceByType('metadata')
this.setState({
ocean,
ddo,
metadata: attributes,
isLoading: false
})
} catch (error) {
Logger.error(error.message)
this.setState({
error: `We encountered an error: ${error.message}.`
})
}
}
public render() {
const {
metadata,
ddo,
error,
isLoading,
ocean
} = this.state
const { main, additionalInformation } = metadata
const hasError = error !== ''
return isLoading && !hasError ? (
<div className={stylesApp.loader}>
<Spinner message="Loading asset..." />
</div>
) : hasError ? (
<Content>
<div className={styles.error}>{error}</div>
<Web3message />
</Content>
) : (
<Route
title={main.name}
image={
additionalInformation &&
additionalInformation.categories && (
<CategoryImage
header
dimmed
category={additionalInformation.categories[0]}
/>
)
}
>
<Content>
<AssetDetails metadata={metadata} ddo={ddo} ocean={ocean} />
</Content>
</Route>
)
}
}
export default withTracker(Asset)