import React, { PureComponent, ChangeEvent } from 'react' import { Link } from 'react-router-dom' import Moment from 'react-moment' import { DDO, MetaData, File, Logger } from '@oceanprotocol/squid' import Input from '../../components/atoms/Form/Input' import Markdown from '../../components/atoms/Markdown' import styles from './AssetDetails.module.scss' import AssetFilesDetails from './AssetFilesDetails' import Button from '../../components/atoms/Button' import Spinner from '../../components/atoms/Spinner' import { serviceHost, servicePort, serviceScheme } from '../../config' const { steps } = require('../../data/form-publish.json') // eslint-disable-line interface AssetDetailsProps { metadata: MetaData ddo: DDO } interface AssetDetailsState { isEditMode?: boolean isLoading?: boolean feedback?: string dateCreated?: string description?: string copyrightHolder?: string categories?: string } export default class AssetDetails extends PureComponent< AssetDetailsProps, AssetDetailsState > { public state = { isEditMode: false, isLoading: false, feedback: '', dateCreated: this.props.metadata.base.dateCreated, description: this.props.metadata.base.description, copyrightHolder: this.props.metadata.base.copyrightHolder, categories: this.props.metadata.base.categories } private inputChange = ( event: ChangeEvent | ChangeEvent ) => { this.setState({ [event.currentTarget.name]: event.currentTarget.value }) } private toggleEditMode = () => { this.setState({ isEditMode: !this.state.isEditMode }) } private cancelEditMode = () => { // reset everything this.setState({ isEditMode: false, feedback: '', dateCreated: this.props.metadata.base.dateCreated, description: this.props.metadata.base.description, copyrightHolder: this.props.metadata.base.copyrightHolder, categories: this.props.metadata.base.categories }) } private fetch = async (method: string, body: any) => { try { const response = await fetch( `${serviceScheme}://${serviceHost}:${servicePort}/api/v1/ddo/${ this.props.ddo }`, { method, body: JSON.stringify({ body }), headers: { 'Content-Type': 'application/json' } } ) const json = await response.json() return json } catch (error) { Logger.error(error) return error } } private updateAsset = async () => { this.setState({ isLoading: true, feedback: 'Updating asset...' }) const { dateCreated, description, copyrightHolder, categories } = this.state const body = { metadata: { base: { dateCreated, description, copyrightHolder, categories } }, // TODO: generate signature signature: '' } const response = await this.fetch('PUT', body) if (response.status !== 'success') { this.setState({ feedback: response.message, isLoading: false }) } else { this.setState({ isEditMode: false, isLoading: false }) } } private retireAsset = async () => { this.setState({ isLoading: true, feedback: 'Retiring asset...' }) const body = { // TODO: generate signature signature: '' } const response = await this.fetch('DELETE', body) if (response.status !== 'success') { this.setState({ feedback: response.message }) } this.setState({ isLoading: false }) } private renderDatafilesLine = (files: any) => files.length === 1 ? ( {files.length} data file ) : ( {files.length} data files ) private Date = ({ value }: { value: string }) => this.state.isEditMode ? ( ) : ( ) private Category = ({ value }: { value: string }) => this.state.isEditMode ? ( ) : ( // TODO: Make this link to search for respective category {value} ) private Description = ({ value }: { value: string }) => this.state.isEditMode ? ( ) : ( ) private MetadataActions = () => { // TODO: check for asset owner and return if no match // const isOwner = IS OWNER // if (!isOwner) { return } return (
{this.state.isEditMode ? (
{this.state.isLoading ? ( ) : ( <> {this.state.feedback !== '' && (
{this.state.feedback}
)} )}
) : ( <>
You are the owner of this asset
{/* TODO: Retire action needs loading/feedback */}
)}
) } export default class AssetDetails extends PureComponent { public render() { const { metadata, ddo } = this.props const { base } = metadata return ( <>
  • Author {base.author}
  • License {base.license}
  • DID {ddo.id}
) } }