PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.3
GiveWP – Donation Plugin and Fundraising Platform v4.16.3
4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Views / Components / ListTable / Pagination / index.tsx
give / src / Views / Components / ListTable / Pagination Last commit date
Pagination.module.scss 9 months ago index.tsx 9 months ago
index.tsx
119 lines
1 import PropTypes from 'prop-types';
2 import React from 'react';
3 import styles from './Pagination.module.scss';
4 import cx from 'classnames';
5 import {__, sprintf} from '@wordpress/i18n';
6
7 const Pagination = ({currentPage = 1, totalPages = 0, totalItems = -1, disabled = false, setPage = (n) => {}, singleName, pluralName}) => {
8
9 // @ts-ignore
10 const nextPage = parseInt(currentPage) + 1;
11 // @ts-ignore
12 const previousPage = parseInt(currentPage) - 1;
13
14 return (
15 <nav aria-label={sprintf(__('%s table', 'give'), pluralName)} className={styles.container}>
16 {totalItems >= 1 && (
17 <span>
18 {totalItems.toString() + ' '}
19 {totalItems == 1 ? singleName : pluralName}
20 </span>
21 )}
22 {1 < totalPages && (
23 <>
24 <button
25 className={cx(styles.navDirection, styles.navElement)}
26 aria-disabled={previousPage <= 1}
27 aria-label={__('first page')}
28 onClick={(e) => {
29 if (e.currentTarget.getAttribute('aria-disabled') === 'false') {
30 setPage(1);
31 }
32 }}
33 >
34 <span aria-hidden={true}>«</span>
35 </button>
36 <button
37 className={cx(styles.navDirection, styles.navElement)}
38 aria-disabled={previousPage <= 0}
39 aria-label={__('previous page')}
40 onClick={(e) => {
41 if (e.currentTarget.getAttribute('aria-disabled') === 'false') {
42 // @ts-ignore
43 setPage(parseInt(currentPage) - 1);
44 }
45 }}
46 >
47 <span aria-hidden={true}></span>
48 </button>
49 <span>
50 <label htmlFor={styles.currentPage} className={styles.visuallyHidden}>
51 {__('Current Page', 'give')}
52 </label>
53 <select
54 className={styles.navElement}
55 id={styles.currentPage}
56 name={'currentPageSelector'}
57 value={currentPage}
58 onChange={(e) => {
59 const page = Number(e.target.value);
60 setPage(page);
61 }}
62 >
63 {Array.from({length: totalPages}, (_, i) => i + 1).map((pageNumber) => (
64 <option key={pageNumber} value={pageNumber}>
65 {pageNumber}
66 </option>
67 ))}
68 </select>
69 <span>
70 {' '}
71 {__('of', 'give')} <span>{totalPages}</span>{' '}
72 </span>
73 </span>
74 <button
75 className={cx(styles.navDirection, styles.navElement)}
76 aria-disabled={nextPage > totalPages}
77 aria-label={__('next page')}
78 onClick={(e) => {
79 if (e.currentTarget.getAttribute('aria-disabled') === 'false') {
80 // @ts-ignore
81 setPage(parseInt(currentPage) + 1);
82 }
83 }}
84 >
85 <span aria-hidden={true}></span>
86 </button>
87 <button
88 className={cx(styles.navDirection, styles.navElement)}
89 aria-disabled={nextPage > totalPages - 1}
90 aria-label={__('final page')}
91 onClick={(e) => {
92 if (e.currentTarget.getAttribute('aria-disabled') === 'false') {
93 setPage(totalPages);
94 }
95 }}
96 >
97 <span aria-hidden={true}>»</span>
98 </button>
99 </>
100 )}
101 </nav>
102 );
103 };
104
105 Pagination.propTypes = {
106 // Current page
107 currentPage: PropTypes.number.isRequired,
108 // Total number of pages
109 totalPages: PropTypes.number.isRequired,
110 // Total number of items
111 totalItems: PropTypes.number,
112 // Function to set the next/previous page
113 setPage: PropTypes.func.isRequired,
114 // Is pagination disabled
115 disabled: PropTypes.bool.isRequired,
116 };
117
118 export default Pagination;
119