import { useState, useEffect } from 'react' import axios from 'axios' import { DID, DDO, Metadata } from '@oceanprotocol/lib' import { useOcean, } from '../../providers' import ProviderStatus from '../../providers/OceanProvider/ProviderStatus' interface UseMetadata { ddo: DDO metadata: Metadata title: string getDDO: (did: DID | string) => Promise getMetadata: (did: DID | string) => Promise getTitle: (did: DID | string) => Promise } function useMetadata(did?: DID | string): UseMetadata { const { ocean, status } = useOcean() const [ddo, setDDO] = useState() const [metadata, setMetadata] = useState() const [title, setTitle] = useState() async function getDDO(did: DID | string): Promise { if (status !== ProviderStatus.CONNECTED) return const ddo = await ocean.metadatastore.retrieveDDO(did) return ddo } async function getMetadata(did: DID | string): Promise { const ddo = await getDDO(did) if (!ddo) return const metadata = ddo.findServiceByType('metadata') return metadata.attributes } async function getTitle(did: DID | string): Promise { const metadata = await getMetadata(did) return metadata.main.name } useEffect(() => { async function init(): Promise { if (!did) return const ddo = await getDDO(did) setDDO(ddo) const metadata = await getMetadata(did) setMetadata(metadata) setTitle(metadata.main.name) } init() }, []) return { ddo, metadata, title, getDDO, getMetadata, getTitle, } } export { useMetadata, UseMetadata } export default useMetadata