1
0
mirror of https://github.com/oceanprotocol/market.git synced 2024-06-29 00:57:50 +02:00
market/src/components/templates/Search/utils.ts

78 lines
1.9 KiB
TypeScript
Raw Normal View History

2020-06-30 15:24:30 +02:00
import {
2020-07-01 18:13:32 +02:00
SearchQuery,
QueryResult
} from '@oceanprotocol/lib/dist/node/metadatacache/MetadataCache'
import { MetadataCache, Logger } from '@oceanprotocol/lib'
2020-05-07 08:03:30 +02:00
2020-06-30 15:24:30 +02:00
export function getSearchQuery(
text?: string,
owner?: string,
tags?: string,
categories?: string,
page?: string,
offset?: string
2020-06-30 15:24:30 +02:00
): SearchQuery {
const searchTerm = owner
? `(publicKey.owner:${owner})`
: tags
? // eslint-disable-next-line no-useless-escape
`(service.attributes.additionalInformation.tags:\"${tags}\")`
: categories
? // eslint-disable-next-line no-useless-escape
`(service.attributes.additionalInformation.categories:\"${categories}\")`
: text || ''
2020-06-30 15:24:30 +02:00
return {
page: Number(page) || 1,
offset: Number(offset) || 21,
2020-06-30 15:24:30 +02:00
query: {
nativeSearch: 1,
query_string: {
query: `${searchTerm} -isInPurgatory:true`
}
// ...(owner && { 'publicKey.owner': [owner] }),
// ...(tags && { tags: [tags] }),
// ...(categories && { categories: [categories] })
2020-06-30 15:24:30 +02:00
},
sort: {
created: -1
}
2020-10-24 17:39:51 +02:00
// Something in ocean.js is weird when using 'tags: [tag]'
2020-06-30 15:24:30 +02:00
// which is the only way the query actually returns desired results.
// But it doesn't follow 'SearchQuery' interface so we have to assign
// it here.
// } as SearchQuery
// And the next hack,
// nativeSearch is not implmeneted on ocean.js typings
} as any
2020-06-30 15:24:30 +02:00
}
export async function getResults(
2020-10-24 17:39:51 +02:00
params: {
text?: string
owner?: string
2020-10-24 17:39:51 +02:00
tags?: string
categories?: string
page?: string
offset?: string
},
metadataCacheUri: string
): Promise<QueryResult> {
const { text, owner, tags, page, offset, categories } = params
2020-06-30 15:24:30 +02:00
const metadataCache = new MetadataCache(metadataCacheUri, Logger)
const searchQuery = getSearchQuery(
text,
owner,
tags,
categories,
page,
offset
2020-05-07 08:03:30 +02:00
)
const queryResult = await metadataCache.queryMetadata(searchQuery)
2020-06-30 15:24:30 +02:00
return queryResult
2020-05-07 08:03:30 +02:00
}