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

IQSS / dataverse-frontend / 20150732855

11 Dec 2025 11:24PM UTC coverage: 98.063% (+0.3%) from 97.795%
20150732855

Pull #825

github

ekraffmiller
Add text to handle pagination
Pull Request #825: 775 account page notifications

1578 of 1634 branches covered (96.57%)

Branch coverage included in aggregate %.

12 of 12 new or added lines in 6 files covered. (100.0%)

27 existing lines in 12 files now uncovered.

3789 of 3839 relevant lines covered (98.7%)

10902.77 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 { NotificationsPaginationInfo } from '@/notifications/domain/models/NotificationsPaginationInfo'
10

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

2,081✔
44
  useEffect(() => {
517✔
45
    onPaginationInfoChange(paginationInfo)
46
    // TODO: Not a priority as not used for inifinite scroll is used but the eslint disable should be removed and the dependency should be added
47
    // eslint-disable-next-line react-hooks/exhaustive-deps
2,081✔
48
  }, [paginationInfo.pageSize])
617✔
49

617!
UNCOV
50
  useEffect(() => {
×
UNCOV
51
    onPaginationInfoChange(paginationInfo)
×
UNCOV
52
    // TODO: Not a priority as not used for inifinite scroll is used but the eslint disable should be removed and the dependency should be added
×
53
    // eslint-disable-next-line react-hooks/exhaustive-deps
54
  }, [paginationInfo.page])
55

56
  useEffect(() => {
57
    setPaginationInfo(paginationInfo.withTotal(initialPaginationInfo.totalItems))
2,081✔
58
    // TODO: Not a priority as not used for inifinite scroll is used but the eslint disable should be removed and the dependency should be added
750✔
59
    // eslint-disable-next-line react-hooks/exhaustive-deps
60
  }, [initialPaginationInfo.totalItems])
61

2,081✔
62
  if (paginationInfo.totalPages < MINIMUM_NUMBER_OF_PAGES_TO_DISPLAY_PAGINATION) {
402!
UNCOV
63
    return <></>
×
UNCOV
64
  }
×
UNCOV
65
  return (
×
UNCOV
66
    <Row className={styles.row}>
×
UNCOV
67
      <Col md="auto">
×
68
        <div className={styles.container}>
69
          <Pagination>
70
            <Pagination.First
71
              onClick={() => goToPage(1)}
72
              disabled={!paginationInfo.hasPreviousPage}
2,081✔
73
            />
1,082✔
74
            <Pagination.Prev
75
              onClick={() => goToPreviousPage()}
999✔
76
              disabled={!paginationInfo.hasPreviousPage}
77
            />
78
            <PageNumbersButtonsWithEllipsis
79
              selectedPageIndex={paginationInfo.page - 1}
80
              pageCount={paginationInfo.totalPages}
81
              goToPage={goToPage}
8✔
82
            />
83
            <Pagination.Next
84
              onClick={() => goToNextPage()}
85
              disabled={!paginationInfo.hasNextPage}
24✔
86
            />
87
            <Pagination.Last
88
              onClick={() => goToPage(paginationInfo.totalPages)}
89
              disabled={!paginationInfo.hasNextPage}
90
            />
91
          </Pagination>
92
          {showPageSizeSelector && (
93
            <PageSizeSelector
94
              itemName={paginationInfo.itemName}
34✔
95
              pageSize={paginationInfo.pageSize}
96
              setPageSize={setPageSize}
97
            />
98
          )}
17✔
99
        </div>
100
      </Col>
101
    </Row>
102
  )
1,998✔
103
}
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

© 2026 Coveralls, Inc