diff --git a/src/hooks/useSearch/ComputeItem.ts b/src/hooks/useSearch/ComputeItem.ts new file mode 100644 index 0000000..b5d1944 --- /dev/null +++ b/src/hooks/useSearch/ComputeItem.ts @@ -0,0 +1,5 @@ +import { DDO, ComputeJob } from '@oceanprotocol/squid' +export interface ComputeItem { + job: ComputeJob + ddo: DDO +} diff --git a/src/hooks/useSearch/index.ts b/src/hooks/useSearch/index.ts index 25e9f76..2b5ea44 100644 --- a/src/hooks/useSearch/index.ts +++ b/src/hooks/useSearch/index.ts @@ -1 +1,2 @@ export * from './useSearch' +export * from './ComputeItem' diff --git a/src/hooks/useSearch/useSearch.ts b/src/hooks/useSearch/useSearch.ts index acc581b..6ff39f3 100644 --- a/src/hooks/useSearch/useSearch.ts +++ b/src/hooks/useSearch/useSearch.ts @@ -1,17 +1,19 @@ import { useState } from 'react' -import { Logger, DDO } from '@oceanprotocol/squid' +import { Logger, DDO, ComputeJob } from '@oceanprotocol/squid' import { useOcean } from '../../providers' import { SearchQuery, Aquarius, QueryResult } from '@oceanprotocol/squid/dist/node/aquarius/Aquarius' +import { ComputeItem } from './ComputeItem' // TODO searchText, interface UseSearch { searchWithQuery: (query: SearchQuery) => Promise getPublishedList: (page: number, offset: number) => Promise getConsumedList: () => Promise + getComputeItems: () => Promise searchError?: string } @@ -77,7 +79,37 @@ function useSearch(): UseSearch { return consumedItems } - return { searchWithQuery, getPublishedList, getConsumedList, searchError } + async function getComputeItems(): Promise { + const jobList = await ocean.compute.status(account) + return Promise.all( + jobList.map(async (job) => { + if (!job) return + const { did } = await ocean.keeper.agreementStoreManager.getAgreement( + job.agreementId + ) + + const ddo = await ocean.assets.resolve(did) + + if (ddo) { + // Since we are getting assets from chain there might be + // assets from other marketplaces. So return only those assets + // whose serviceEndpoint contains the configured Aquarius URI. + const { serviceEndpoint } = ddo.findServiceByType('metadata') + if (serviceEndpoint?.includes(config.aquariusUri)) { + return { job, ddo } + } + } + }) + ) + } + + return { + searchWithQuery, + getPublishedList, + getConsumedList, + getComputeItems, + searchError + } } export { useSearch, UseSearch }