mirror of
https://github.com/oceanprotocol/market.git
synced 2024-12-02 05:57:29 +01:00
Merge branch 'main' into feature/enforce-docker-containers
This commit is contained in:
commit
c030f8ec7e
@ -6,7 +6,7 @@ export enum SortDirectionOptions {
|
|||||||
export enum SortTermOptions {
|
export enum SortTermOptions {
|
||||||
Created = 'nft.created',
|
Created = 'nft.created',
|
||||||
Relevance = '_score',
|
Relevance = '_score',
|
||||||
Stats = 'stats.orders',
|
Orders = 'stats.orders',
|
||||||
Allocated = 'stats.allocated'
|
Allocated = 'stats.allocated'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -305,7 +305,7 @@ export async function getPublishedAssets(
|
|||||||
aggs: {
|
aggs: {
|
||||||
totalOrders: {
|
totalOrders: {
|
||||||
sum: {
|
sum: {
|
||||||
field: SortTermOptions.Stats
|
field: SortTermOptions.Orders
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -359,7 +359,7 @@ export async function getTopPublishers(
|
|||||||
aggs: {
|
aggs: {
|
||||||
totalSales: {
|
totalSales: {
|
||||||
sum: {
|
sum: {
|
||||||
field: SortTermOptions.Stats
|
field: SortTermOptions.Orders
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
45
src/components/Home/TopTags/_utils.ts
Normal file
45
src/components/Home/TopTags/_utils.ts
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
import { LoggerInstance } from '@oceanprotocol/lib'
|
||||||
|
import { generateBaseQuery, queryMetadata } from '@utils/aquarius'
|
||||||
|
import axios, { CancelToken } from 'axios'
|
||||||
|
import { SortTermOptions } from 'src/@types/aquarius/SearchQuery'
|
||||||
|
|
||||||
|
export async function getTopTags(
|
||||||
|
chainIds: number[],
|
||||||
|
cancelToken: CancelToken
|
||||||
|
): Promise<string[]> {
|
||||||
|
const baseQueryParams = {
|
||||||
|
chainIds,
|
||||||
|
aggs: {
|
||||||
|
topTags: {
|
||||||
|
terms: {
|
||||||
|
field: 'metadata.tags.keyword',
|
||||||
|
size: 20,
|
||||||
|
order: { totalSales: 'desc' }
|
||||||
|
},
|
||||||
|
aggs: {
|
||||||
|
totalSales: {
|
||||||
|
sum: {
|
||||||
|
field: SortTermOptions.Orders
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
esPaginationOptions: { from: 0, size: 0 }
|
||||||
|
} as BaseQueryParams
|
||||||
|
|
||||||
|
const query = generateBaseQuery(baseQueryParams)
|
||||||
|
try {
|
||||||
|
const result = await queryMetadata(query, cancelToken)
|
||||||
|
const tagsList = result?.aggregations?.topTags?.buckets.map(
|
||||||
|
(x: { key: any }) => x.key
|
||||||
|
)
|
||||||
|
return tagsList
|
||||||
|
} catch (error) {
|
||||||
|
if (axios.isCancel(error)) {
|
||||||
|
LoggerInstance.log(error.message)
|
||||||
|
} else {
|
||||||
|
LoggerInstance.error(error.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
3
src/components/Home/TopTags/index.module.css
Normal file
3
src/components/Home/TopTags/index.module.css
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.section {
|
||||||
|
composes: section from '../index.module.css';
|
||||||
|
}
|
51
src/components/Home/TopTags/index.tsx
Normal file
51
src/components/Home/TopTags/index.tsx
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
import { useUserPreferences } from '@context/UserPreferences'
|
||||||
|
import React, { ReactElement, useEffect, useState } from 'react'
|
||||||
|
import styles from './index.module.css'
|
||||||
|
import Tags from '@shared/atoms/Tags'
|
||||||
|
import { getTopTags } from './_utils'
|
||||||
|
import { useCancelToken } from '@hooks/useCancelToken'
|
||||||
|
import { LoggerInstance } from '@oceanprotocol/lib'
|
||||||
|
import Loader from '@shared/atoms/Loader'
|
||||||
|
|
||||||
|
export default function TopTags({
|
||||||
|
title,
|
||||||
|
action
|
||||||
|
}: {
|
||||||
|
title: ReactElement | string
|
||||||
|
action?: ReactElement
|
||||||
|
}): ReactElement {
|
||||||
|
const { chainIds } = useUserPreferences()
|
||||||
|
const [result, setResult] = useState<string[]>([])
|
||||||
|
const [loading, setLoading] = useState<boolean>()
|
||||||
|
const newCancelToken = useCancelToken()
|
||||||
|
useEffect(() => {
|
||||||
|
async function init() {
|
||||||
|
setLoading(true)
|
||||||
|
if (chainIds.length === 0) {
|
||||||
|
const result: string[] = []
|
||||||
|
setResult(result)
|
||||||
|
setLoading(false)
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
const tags = await getTopTags(chainIds, newCancelToken())
|
||||||
|
setResult(tags)
|
||||||
|
setLoading(false)
|
||||||
|
} catch (error) {
|
||||||
|
LoggerInstance.error(error.message)
|
||||||
|
setLoading(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
init()
|
||||||
|
}, [chainIds])
|
||||||
|
|
||||||
|
return (
|
||||||
|
<section className={styles.section}>
|
||||||
|
<h3>{title}</h3>
|
||||||
|
{loading ? <Loader /> : <Tags items={result} />}
|
||||||
|
|
||||||
|
{action && action}
|
||||||
|
</section>
|
||||||
|
)
|
||||||
|
}
|
@ -5,8 +5,9 @@ import { generateBaseQuery } from '@utils/aquarius'
|
|||||||
import { useUserPreferences } from '@context/UserPreferences'
|
import { useUserPreferences } from '@context/UserPreferences'
|
||||||
import { SortTermOptions } from '../../@types/aquarius/SearchQuery'
|
import { SortTermOptions } from '../../@types/aquarius/SearchQuery'
|
||||||
import TopSales from './TopSales'
|
import TopSales from './TopSales'
|
||||||
import styles from './index.module.css'
|
import TopTags from './TopTags'
|
||||||
import SectionQueryResult from './SectionQueryResult'
|
import SectionQueryResult from './SectionQueryResult'
|
||||||
|
import styles from './index.module.css'
|
||||||
|
|
||||||
export default function HomePage(): ReactElement {
|
export default function HomePage(): ReactElement {
|
||||||
const [queryLatest, setQueryLatest] = useState<SearchQuery>()
|
const [queryLatest, setQueryLatest] = useState<SearchQuery>()
|
||||||
@ -32,7 +33,7 @@ export default function HomePage(): ReactElement {
|
|||||||
size: 6
|
size: 6
|
||||||
},
|
},
|
||||||
sortOptions: {
|
sortOptions: {
|
||||||
sortBy: SortTermOptions.Stats
|
sortBy: SortTermOptions.Orders
|
||||||
} as SortOptions
|
} as SortOptions
|
||||||
} as BaseQueryParams
|
} as BaseQueryParams
|
||||||
setQueryMostSales(generateBaseQuery(baseParamsSales))
|
setQueryMostSales(generateBaseQuery(baseParamsSales))
|
||||||
@ -63,6 +64,7 @@ export default function HomePage(): ReactElement {
|
|||||||
<SectionQueryResult title="Most Sales" query={queryMostSales} />
|
<SectionQueryResult title="Most Sales" query={queryMostSales} />
|
||||||
|
|
||||||
<TopSales title="Publishers With Most Sales" />
|
<TopSales title="Publishers With Most Sales" />
|
||||||
|
<TopTags title="Top Tags By Sales" />
|
||||||
|
|
||||||
<SectionQueryResult
|
<SectionQueryResult
|
||||||
title="Recently Published"
|
title="Recently Published"
|
||||||
|
Loading…
Reference in New Issue
Block a user