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

IQSS / dataverse-frontend / 11858741038

15 Nov 2024 03:14PM UTC coverage: 97.637% (+0.08%) from 97.561%
11858741038

Pull #549

github

g-saracca
lint: ignore hooks deps, add todos to fix them later
Pull Request #549: Edit Collection page

1634 of 1704 branches covered (95.89%)

Branch coverage included in aggregate %.

225 of 227 new or added lines in 28 files covered. (99.12%)

2 existing lines in 1 file now uncovered.

3943 of 4008 relevant lines covered (98.38%)

21425.79 hits per line

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

69.01
/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
92✔
20
export function PaginationControls({
92✔
21
  onPaginationInfoChange,
22
  initialPaginationInfo,
23
  showPageSizeSelector = true,
4,164✔
24
  updateQueryParam = false
4,172✔
25
}: PaginationProps) {
4,172✔
26
  const [searchParams, setSearchParams] = useSearchParams()
4,172✔
27
  const [paginationInfo, setPaginationInfo] = useState<DatasetPaginationInfo | FilePaginationInfo>(
4,172✔
28
    initialPaginationInfo
29
  )
30
  const goToPage = (newPage: number) => {
4,172✔
31
    setPaginationInfo(paginationInfo.goToPage(newPage))
230✔
32
  }
33
  const goToPreviousPage = () => {
4,172✔
34
    setPaginationInfo(paginationInfo.goToPreviousPage())
48✔
35
  }
36
  const goToNextPage = () => {
4,172✔
37
    setPaginationInfo(paginationInfo.goToNextPage())
68✔
38
  }
39
  const setPageSize = (newPageSize: number) => {
4,172✔
40
    setPaginationInfo(paginationInfo.withPageSize(newPageSize))
230✔
41
  }
42

43
  useEffect(() => {
4,172✔
44
    onPaginationInfoChange(paginationInfo)
1,034✔
45
    // 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
46
    // eslint-disable-next-line react-hooks/exhaustive-deps
47
  }, [paginationInfo.pageSize])
2,081✔
48

617✔
49
  useEffect(() => {
2,708!
50
    onPaginationInfoChange(paginationInfo)
617!
51
    if (updateQueryParam) {
617!
52
      if (searchParams.get('page') !== paginationInfo.page.toString()) {
×
53
        searchParams.set('page', paginationInfo.page.toString())
×
54
        setSearchParams(searchParams)
×
55
      }
56
    }
57
    // 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
2,081✔
58
    // eslint-disable-next-line react-hooks/exhaustive-deps
750✔
59
  }, [paginationInfo.page])
60

61
  useEffect(() => {
4,172✔
62
    setPaginationInfo(paginationInfo.withTotal(initialPaginationInfo.totalItems))
1,152!
NEW
63
    // 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
×
NEW
64
    // eslint-disable-next-line react-hooks/exhaustive-deps
×
UNCOV
65
  }, [initialPaginationInfo.totalItems])
×
UNCOV
66

×
67
  useEffect(() => {
2,091✔
68
    if (updateQueryParam) {
402!
69
      if (searchParams.get('page') !== paginationInfo.page.toString()) {
×
70
        const page = searchParams.get('page') ? parseInt(searchParams.get('page') as string) : 1
×
71
        searchParams.set('page', page.toString())
×
72
        setSearchParams(searchParams, { replace: true })
2,081✔
73
        goToPage(page)
1,082✔
74
      }
75
    }
999✔
76
    // 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
77
    // eslint-disable-next-line react-hooks/exhaustive-deps
78
  }, [searchParams])
79

80
  if (paginationInfo.totalPages < MINIMUM_NUMBER_OF_PAGES_TO_DISPLAY_PAGINATION) {
2,091✔
81
    return <></>
1,100✔
82
  }
83
  return (
999✔
84
    <Row className={styles.row}>
85
      <Col md="auto">
24✔
86
        <div className={styles.container}>
87
          <Pagination>
88
            <Pagination.First
89
              onClick={() => goToPage(1)}
8✔
90
              disabled={!paginationInfo.hasPreviousPage}
91
            />
92
            <Pagination.Prev
93
              onClick={() => goToPreviousPage()}
24✔
94
              disabled={!paginationInfo.hasPreviousPage}
34✔
95
            />
96
            <PageNumbersButtonsWithEllipsis
97
              selectedPageIndex={paginationInfo.page - 1}
98
              pageCount={paginationInfo.totalPages}
17✔
99
              goToPage={goToPage}
100
            />
101
            <Pagination.Next
102
              onClick={() => goToNextPage()}
34✔
103
              disabled={!paginationInfo.hasNextPage}
104
            />
105
            <Pagination.Last
106
              onClick={() => goToPage(paginationInfo.totalPages)}
17✔
107
              disabled={!paginationInfo.hasNextPage}
108
            />
109
          </Pagination>
110
          {showPageSizeSelector && (
1,998✔
111
            <PageSizeSelector
112
              itemName={paginationInfo.itemName}
113
              pageSize={paginationInfo.pageSize}
46✔
114
              setPageSize={setPageSize}
115
            />
116
          )}
117
        </div>
118
      </Col>
119
    </Row>
120
  )
121
}
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