• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

IQSS / dataverse-frontend / 11559616749

28 Oct 2024 05:43PM CUT coverage: 97.394% (-1.0%) from 98.403%
11559616749

push

github

ChengShi-1
fix: add some missing code in account page

1451 of 1518 branches covered (95.59%)

Branch coverage included in aggregate %.

3818 of 3892 relevant lines covered (98.1%)

9054.4 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

71.43
/src/sections/shared/pagination/PaginationControls.tsx
1
import { Col, Pagination, Row } from '@iqss/dataverse-design-system'
2
import { PageNumbersButtonsWithEllipsis } from './PageNumbersButtonsWithEllipsis'
3
import { PageSizeSelector } from './PageSizeSelector'
4
import styles from './Pagination.module.scss'
5
import { PaginationInfo } from '../../../shared/pagination/domain/models/PaginationInfo'
6
import { useEffect, useState } from 'react'
7
import { FilePaginationInfo } from '../../../files/domain/models/FilePaginationInfo'
8
import { DatasetPaginationInfo } from '../../../dataset/domain/models/DatasetPaginationInfo'
9
import { useSearchParams } from 'react-router-dom'
10

11
interface PaginationProps {
12
  onPaginationInfoChange: (
13
    paginationInfo: PaginationInfo<DatasetPaginationInfo | FilePaginationInfo>
14
  ) => void
15
  initialPaginationInfo: PaginationInfo<DatasetPaginationInfo | FilePaginationInfo>
16
  showPageSizeSelector?: boolean
17
  updateQueryParam?: boolean
18
}
19
const MINIMUM_NUMBER_OF_PAGES_TO_DISPLAY_PAGINATION = 2
46✔
20
export function PaginationControls({
46✔
21
  onPaginationInfoChange,
22
  initialPaginationInfo,
23
  showPageSizeSelector = true,
2,087✔
24
  updateQueryParam = false
2,091✔
25
}: PaginationProps) {
2,091✔
26
  const [searchParams, setSearchParams] = useSearchParams()
2,091✔
27
  const [paginationInfo, setPaginationInfo] = useState<DatasetPaginationInfo | FilePaginationInfo>(
2,091✔
28
    initialPaginationInfo
29
  )
30
  const goToPage = (newPage: number) => {
2,091✔
31
    setPaginationInfo(paginationInfo.goToPage(newPage))
115✔
32
  }
33
  const goToPreviousPage = () => {
2,091✔
34
    setPaginationInfo(paginationInfo.goToPreviousPage())
24✔
35
  }
36
  const goToNextPage = () => {
2,091✔
37
    setPaginationInfo(paginationInfo.goToNextPage())
34✔
38
  }
39
  const setPageSize = (newPageSize: number) => {
2,091✔
40
    setPaginationInfo(paginationInfo.withPageSize(newPageSize))
115✔
41
  }
42

43
  useEffect(() => {
2,091✔
44
    onPaginationInfoChange(paginationInfo)
517✔
45
  }, [paginationInfo.pageSize])
46

47
  useEffect(() => {
2,091✔
48
    onPaginationInfoChange(paginationInfo)
617✔
49
    if (updateQueryParam) {
617!
50
      if (searchParams.get('page') !== paginationInfo.page.toString()) {
×
51
        searchParams.set('page', paginationInfo.page.toString())
×
52
        setSearchParams(searchParams)
×
53
      }
54
    }
55
  }, [paginationInfo.page])
56

57
  useEffect(() => {
2,091✔
58
    setPaginationInfo(paginationInfo.withTotal(initialPaginationInfo.totalItems))
750✔
59
  }, [initialPaginationInfo.totalItems])
60

61
  useEffect(() => {
2,091✔
62
    if (updateQueryParam) {
402!
63
      if (searchParams.get('page') !== paginationInfo.page.toString()) {
×
64
        const page = searchParams.get('page') ? parseInt(searchParams.get('page') as string) : 1
×
65
        searchParams.set('page', page.toString())
×
66
        setSearchParams(searchParams, { replace: true })
×
67
        goToPage(page)
×
68
      }
69
    }
70
  }, [searchParams])
71

72
  if (paginationInfo.totalPages < MINIMUM_NUMBER_OF_PAGES_TO_DISPLAY_PAGINATION) {
2,091✔
73
    return <></>
1,092✔
74
  }
75
  return (
999✔
76
    <Row className={styles.row}>
77
      <Col md="auto">
78
        <div className={styles.container}>
79
          <Pagination>
80
            <Pagination.First
81
              onClick={() => goToPage(1)}
8✔
82
              disabled={!paginationInfo.hasPreviousPage}
83
            />
84
            <Pagination.Prev
85
              onClick={() => goToPreviousPage()}
24✔
86
              disabled={!paginationInfo.hasPreviousPage}
87
            />
88
            <PageNumbersButtonsWithEllipsis
89
              selectedPageIndex={paginationInfo.page - 1}
90
              pageCount={paginationInfo.totalPages}
91
              goToPage={goToPage}
92
            />
93
            <Pagination.Next
94
              onClick={() => goToNextPage()}
34✔
95
              disabled={!paginationInfo.hasNextPage}
96
            />
97
            <Pagination.Last
98
              onClick={() => goToPage(paginationInfo.totalPages)}
17✔
99
              disabled={!paginationInfo.hasNextPage}
100
            />
101
          </Pagination>
102
          {showPageSizeSelector && (
1,998✔
103
            <PageSizeSelector
104
              itemName={paginationInfo.itemName}
105
              pageSize={paginationInfo.pageSize}
106
              setPageSize={setPageSize}
107
            />
108
          )}
109
        </div>
110
      </Col>
111
    </Row>
112
  )
113
}
46✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc