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