1
0
mirror of https://github.com/oceanprotocol/market.git synced 2024-12-02 05:57:29 +01:00

Fix pagination breaks on to many results (#831)

* handle to many results

* update search test

* get transaction history based on ddo chainId

* revert last commit

* changed title and description

* reduce paragraphs

* added constant for maximum number of pages
This commit is contained in:
Norbi 2021-09-15 13:50:41 +03:00 committed by GitHub
parent 969ac96417
commit 0eb6c15cda
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 37 additions and 4 deletions

View File

@ -1,6 +1,7 @@
import React, { ReactElement } from 'react'
import classNames from 'classnames/bind'
import styles from './PageHeader.module.css'
import Markdown from '../atoms/Markdown'
const cx = classNames.bind(styles)
@ -21,7 +22,9 @@ export default function PageHeader({
return (
<header className={styleClasses}>
<h1 className={styles.title}>{title}</h1>
{description && <p className={styles.description}>{description}</p>}
{description && (
<Markdown text={description} className={styles.description} />
)}
</header>
)
}

View File

@ -1,6 +1,7 @@
import React, { useState, useEffect, ReactElement } from 'react'
import ReactPaginate from 'react-paginate'
import styles from './Pagination.module.css'
import { MAXIMUM_NUMBER_OF_PAGES_WITH_RESULTS } from '../../utils/aquarius'
import { ReactComponent as Arrow } from '../../images/arrow.svg'
interface PaginationProps {
@ -56,7 +57,11 @@ export default function Pagination({
return totalPageNumbers && totalPageNumbers > 1 ? (
<ReactPaginate
pageCount={totalPageNumbers}
pageCount={
totalPageNumbers > MAXIMUM_NUMBER_OF_PAGES_WITH_RESULTS
? MAXIMUM_NUMBER_OF_PAGES_WITH_RESULTS
: totalPageNumbers
}
// react-pagination starts counting at 0, we start at 1
initialPage={currentPage ? currentPage - 1 : 0}
// adapt based on media query match

View File

@ -14,10 +14,12 @@ import { useUserPreferences } from '../../../providers/UserPreferences'
export default function SearchPage({
location,
setTotalResults
setTotalResults,
setTotalPagesNumber
}: {
location: Location
setTotalResults: (totalResults: number) => void
setTotalPagesNumber: (totalPagesNumber: number) => void
}): ReactElement {
const { appConfig } = useSiteMetadata()
const parsed = queryString.parse(location.search)
@ -45,6 +47,7 @@ export default function SearchPage({
)
setQueryResult(queryResult)
setTotalResults(queryResult.totalResults)
setTotalPagesNumber(queryResult.totalPages)
setLoading(false)
}
initSearch()

View File

@ -5,11 +5,13 @@ import Page from '../components/templates/Page'
import queryString from 'query-string'
import { accountTruncate } from '../utils/web3'
import ethereumAddress from 'ethereum-address'
import { MAXIMUM_NUMBER_OF_PAGES_WITH_RESULTS } from '../utils/aquarius'
export default function PageGatsbySearch(props: PageProps): ReactElement {
const parsed = queryString.parse(props.location.search)
const { text, owner, tags, categories } = parsed
const [totalResults, setTotalResults] = useState<number>()
const [totalPagesNumber, setTotalPagesNumber] = useState<number>()
const isETHAddress = ethereumAddress.isAddress(text as string)
const searchValue =
@ -32,10 +34,23 @@ export default function PageGatsbySearch(props: PageProps): ReactElement {
}`
return (
<Page title={title} uri={props.uri}>
<Page
title={
totalPagesNumber > MAXIMUM_NUMBER_OF_PAGES_WITH_RESULTS
? `>10000 results for ${searchValue}`
: title
}
description={
totalPagesNumber &&
totalPagesNumber > MAXIMUM_NUMBER_OF_PAGES_WITH_RESULTS &&
'**Results displayed are limited to the first 10k, please refine your search.**'
}
uri={props.uri}
>
<PageSearch
location={props.location}
setTotalResults={(totalResults) => setTotalResults(totalResults)}
setTotalPagesNumber={(totalPages) => setTotalPagesNumber(totalPages)}
/>
</Page>
)

View File

@ -14,6 +14,8 @@ import { PriceList, getAssetsPriceList } from './subgraph'
import axios, { CancelToken, AxiosResponse } from 'axios'
import { metadataCacheUri } from '../../app.config'
export const MAXIMUM_NUMBER_OF_PAGES_WITH_RESULTS = 476
function getQueryForAlgorithmDatasets(algorithmDid: string, chainId?: number) {
return {
query: {

View File

@ -14,10 +14,15 @@ describe('Search', () => {
const results = totalResults
}
const setTotalPagesNumber = (totalPages: number) => {
const pages = totalPages
}
const { container } = render(
<LocationProvider history={history}>
<Search
location={{ search: '?text=water' } as any}
setTotalPagesNumber={(totalPages) => setTotalPagesNumber(totalPages)}
setTotalResults={(totalResults) => setTotalResults(totalResults)}
/>
</LocationProvider>