From 9c3dc9fefe4bf2b668f8623a147d4bff585117bc Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Wed, 26 Oct 2022 17:43:28 +0300 Subject: [PATCH] Updating query to include both related tag assets anbd related owner assests when <3. SHowing results as a list of links --- .../Asset/RelatedAssets/index.module.css | 8 ++ src/components/Asset/RelatedAssets/index.tsx | 88 ++++++++++++------- 2 files changed, 63 insertions(+), 33 deletions(-) create mode 100644 src/components/Asset/RelatedAssets/index.module.css diff --git a/src/components/Asset/RelatedAssets/index.module.css b/src/components/Asset/RelatedAssets/index.module.css new file mode 100644 index 000000000..ab0ee0621 --- /dev/null +++ b/src/components/Asset/RelatedAssets/index.module.css @@ -0,0 +1,8 @@ +.section { + margin-top: calc(var(--spacer) * 2); +} + +.section h3 { + font-size: var(--font-size-large); + color: var(--color-secondary); +} diff --git a/src/components/Asset/RelatedAssets/index.tsx b/src/components/Asset/RelatedAssets/index.tsx index e651b05e5..360333fbf 100644 --- a/src/components/Asset/RelatedAssets/index.tsx +++ b/src/components/Asset/RelatedAssets/index.tsx @@ -1,8 +1,11 @@ import React, { ReactElement, useEffect, useState } from 'react' -import { generateBaseQuery } from '@utils/aquarius' +import { Asset } from '@oceanprotocol/lib' +import { generateBaseQuery, queryMetadata } from '@utils/aquarius' import { useUserPreferences } from '@context/UserPreferences' import { SortTermOptions } from '../../../@types/aquarius/SearchQuery' -import SectionQueryResult from '../../Home/SectionQueryResult' +import styles from './index.module.css' +import { useCancelToken } from '@hooks/useCancelToken' +import Link from 'next/link' export default function RelatedAssets({ tags, @@ -14,42 +17,30 @@ export default function RelatedAssets({ owner: string }): ReactElement { const { chainIds } = useUserPreferences() - const [queryRelatedAssets, setQueryRelatedAssets] = useState() - console.log('nftAddress', nftAddress) - useEffect(() => { - const baseParamsSales = { + const newCancelToken = useCancelToken() + const [relatedAssets, setRelatedAssets] = useState() + + function generateQuery( + size: number, + tagFilter: boolean, + ownerFilter: boolean + ) { + return { chainIds, esPaginationOptions: { - size: 3 + size }, nestedQuery: { must_not: { - term: { - 'nftAddress.keyword': nftAddress - } + term: { 'nftAddress.keyword': nftAddress } } }, filters: [ - { - terms: { - chainId: [1, 137, 56, 246, 1285] - } - }, - { - terms: { - 'metadata.tags.keyword': tags - } - }, - { - term: { - _index: 'aquarius' - } - }, - { - term: { - 'purgatory.state': false - } - } + { terms: { chainId: chainIds } }, + tagFilter && { terms: { 'metadata.tags.keyword': tags } }, + ownerFilter && { term: { 'nft.owner.keyword': owner } }, + { term: { _index: 'aquarius' } }, + { term: { 'purgatory.state': false } } ], sort: { 'stats.orders': 'desc' @@ -58,10 +49,41 @@ export default function RelatedAssets({ sortBy: SortTermOptions.Orders } as SortOptions } as BaseQueryParams - setQueryRelatedAssets(generateBaseQuery(baseParamsSales)) - }, [chainIds, nftAddress]) + } + + useEffect(() => { + async function getAssets() { + const tagQuery = generateBaseQuery(generateQuery(3, true, false)) + const tagResults = (await queryMetadata(tagQuery, newCancelToken())) + .results + console.log(tagResults, tagResults.length) + if (tagResults.length === 3) { + setRelatedAssets(tagResults) + } else { + const ownerQuery = generateBaseQuery( + generateQuery(3 - tagResults.length, false, true) + ) + const ownerResults = (await queryMetadata(ownerQuery, newCancelToken())) + .results + const bothResults = tagResults.concat(ownerResults) + setRelatedAssets(bothResults) + console.log(tagResults, tagResults.length) + } + } + getAssets() + }, [chainIds, tags, nftAddress]) return ( - +
+

Related Assets

+
    + {relatedAssets && + relatedAssets.map((asset) => ( +
  • + {asset.metadata.name} +
  • + ))} +
+
) }