react/src/hooks/useMetadata/useMetadata.ts

67 lines
1.7 KiB
TypeScript
Raw Normal View History

2020-04-27 14:37:26 +02:00
import { useState, useEffect } from 'react'
import axios from 'axios'
2020-07-09 14:33:22 +02:00
import { DID, DDO, Metadata } from '@oceanprotocol/lib'
import { useOcean, } from '../../providers'
import ProviderStatus from '../../providers/OceanProvider/ProviderStatus'
2020-04-27 10:34:22 +02:00
interface UseMetadata {
2020-04-27 14:37:26 +02:00
ddo: DDO
2020-07-09 14:33:22 +02:00
metadata: Metadata
2020-04-27 14:37:26 +02:00
title: string
2020-04-27 10:34:22 +02:00
getDDO: (did: DID | string) => Promise<DDO>
2020-07-09 14:33:22 +02:00
getMetadata: (did: DID | string) => Promise<Metadata>
2020-04-27 10:34:22 +02:00
getTitle: (did: DID | string) => Promise<string>
}
2020-04-27 14:37:26 +02:00
function useMetadata(did?: DID | string): UseMetadata {
2020-07-09 14:33:22 +02:00
const { ocean, status } = useOcean()
2020-04-27 14:37:26 +02:00
const [ddo, setDDO] = useState<DDO | undefined>()
2020-07-09 14:33:22 +02:00
const [metadata, setMetadata] = useState<Metadata | undefined>()
2020-04-27 14:37:26 +02:00
const [title, setTitle] = useState<string | undefined>()
2020-04-27 10:34:22 +02:00
async function getDDO(did: DID | string): Promise<DDO> {
2020-07-09 14:33:22 +02:00
if (status !== ProviderStatus.CONNECTED) return
2020-05-11 17:43:02 +02:00
2020-07-09 14:33:22 +02:00
const ddo = await ocean.metadatastore.retrieveDDO(did)
2020-04-27 10:34:22 +02:00
return ddo
}
2020-07-09 14:33:22 +02:00
async function getMetadata(did: DID | string): Promise<Metadata> {
2020-04-27 10:34:22 +02:00
const ddo = await getDDO(did)
2020-05-11 17:43:02 +02:00
if (!ddo) return
2020-04-27 10:34:22 +02:00
const metadata = ddo.findServiceByType('metadata')
return metadata.attributes
}
2020-05-06 11:27:06 +02:00
2020-04-27 10:34:22 +02:00
async function getTitle(did: DID | string): Promise<string> {
const metadata = await getMetadata(did)
return metadata.main.name
}
2020-04-27 14:37:26 +02:00
useEffect(() => {
async function init(): Promise<void> {
2020-05-11 17:43:02 +02:00
if (!did) return
2020-04-27 14:58:37 +02:00
const ddo = await getDDO(did)
setDDO(ddo)
const metadata = await getMetadata(did)
setMetadata(metadata)
setTitle(metadata.main.name)
2020-04-27 14:37:26 +02:00
}
init()
}, [])
2020-05-06 11:27:06 +02:00
return {
ddo,
metadata,
title,
getDDO,
getMetadata,
getTitle,
}
2020-04-27 10:34:22 +02:00
}
export { useMetadata, UseMetadata }
2020-05-07 13:42:29 +02:00
export default useMetadata