PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.19.4
GiveWP – Donation Plugin and Fundraising Platform v3.19.4
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 3 years ago index.tsx 1 year ago
index.tsx
125 lines
1 import PropTypes from 'prop-types';
2 import {useState, useEffect} 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 const [pageInput, setPageInput] = useState(1);
9
10 useEffect(() => {
11 setPageInput(currentPage);
12 }, [currentPage]);
13
14 // @ts-ignore
15 const nextPage = parseInt(currentPage) + 1;
16 // @ts-ignore
17 const previousPage = parseInt(currentPage) - 1;
18
19 return (
20 <nav aria-label={sprintf(__('%s table', 'give'), pluralName)} className={styles.container}>
21 {totalItems >= 1 && (
22 <span>
23 {totalItems.toString() + ' '}
24 {totalItems == 1 ? singleName : pluralName}
25 </span>
26 )}
27 {1 < totalPages && (
28 <>
29 <button
30 className={cx(styles.navDirection, styles.navElement)}
31 aria-disabled={previousPage <= 1}
32 aria-label={__('first page')}
33 onClick={(e) => {
34 if (e.currentTarget.getAttribute('aria-disabled') === 'false') {
35 setPage(1);
36 }
37 }}
38 >
39 <span aria-hidden={true}>«</span>
40 </button>
41 <button
42 className={cx(styles.navDirection, styles.navElement)}
43 aria-disabled={previousPage <= 0}
44 aria-label={__('previous page')}
45 onClick={(e) => {
46 if (e.currentTarget.getAttribute('aria-disabled') === 'false') {
47 // @ts-ignore
48 setPage(parseInt(currentPage) - 1);
49 }
50 }}
51 >
52 <span aria-hidden={true}></span>
53 </button>
54 <span>
55 <label htmlFor={styles.currentPage} className={styles.visuallyHidden}>
56 {__('Current Page', 'give')}
57 </label>
58 <input
59 className={styles.navElement}
60 id={styles.currentPage}
61 name={'currentPageSelector'}
62 type="number"
63 min={1}
64 max={totalPages}
65 value={pageInput}
66 onChange={(e) => {
67 const cleanValue = parseInt(e.target.value.replace(/[^0-9]/, ''));
68 const page = Number(cleanValue);
69 setPageInput(cleanValue);
70 if (totalPages >= page && page > 0) {
71 setPage(page);
72 }
73 }}
74 />
75 <span>
76 {' '}
77 {__('of', 'give')} <span>{totalPages}</span>{' '}
78 </span>
79 </span>
80 <button
81 className={cx(styles.navDirection, styles.navElement)}
82 aria-disabled={nextPage > totalPages}
83 aria-label={__('next page')}
84 onClick={(e) => {
85 if (e.currentTarget.getAttribute('aria-disabled') === 'false') {
86 // @ts-ignore
87 setPage(parseInt(currentPage) + 1);
88 }
89 }}
90 >
91 <span aria-hidden={true}></span>
92 </button>
93 <button
94 className={cx(styles.navDirection, styles.navElement)}
95 aria-disabled={nextPage > totalPages - 1}
96 aria-label={__('final page')}
97 onClick={(e) => {
98 if (e.currentTarget.getAttribute('aria-disabled') === 'false') {
99 setPage(totalPages);
100 }
101 }}
102 >
103 <span aria-hidden={true}>»</span>
104 </button>
105 </>
106 )}
107 </nav>
108 );
109 };
110
111 Pagination.propTypes = {
112 // Current page
113 currentPage: PropTypes.number.isRequired,
114 // Total number of pages
115 totalPages: PropTypes.number.isRequired,
116 // Total number of items
117 totalItems: PropTypes.number,
118 // Function to set the next/previous page
119 setPage: PropTypes.func.isRequired,
120 // Is pagination disabled
121 disabled: PropTypes.bool.isRequired,
122 };
123
124 export default Pagination;
125