PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.22.0
GiveWP – Donation Plugin and Fundraising Platform v2.22.0
4.16.4 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 / DonationForms / resources / components / DonationFormsListTable.tsx
give / src / DonationForms / resources / components Last commit date
DonationFormsColumns.module.scss 4 years ago DonationFormsColumns.tsx 4 years ago DonationFormsListTable.tsx 4 years ago DonationFormsRowActions.tsx 4 years ago
DonationFormsListTable.tsx
171 lines
1 import {__} from "@wordpress/i18n";
2 import {ListTableApi, ListTablePage} from "@givewp/components";
3 import {donationFormsColumns} from "./DonationFormsColumns";
4 import {DonationFormsRowActions} from "./DonationFormsRowActions";
5 import styles from "@givewp/components/ListTable/ListTablePage.module.scss";
6 import {BulkActionsConfig, FilterConfig} from "@givewp/components/ListTable";
7 import Select from "@givewp/components/ListTable/Select";
8
9 declare global {
10 interface Window {
11 GiveDonationForms: {apiNonce: string; apiRoot: string; authors: Array<{id: string|number, name: string}>};
12 }
13 }
14
15 const API = new ListTableApi(window.GiveDonationForms);
16
17 const donationStatus = [
18 {
19 value: 'any',
20 text: __('All', 'give'),
21 },
22 {
23 value: 'publish',
24 text: __('Published', 'give'),
25 },
26 {
27 value: 'pending',
28 text: __('Pending', 'give'),
29 },
30 {
31 value: 'draft',
32 text: __('Draft', 'give'),
33 },
34 {
35 value: 'trash',
36 text: __('Trash', 'give'),
37 }
38 ]
39
40 const donationFormsFilters:Array<FilterConfig> = [
41 {
42 name: 'search',
43 type: 'search',
44 text: __('Search by name or ID', 'give'),
45 ariaLabel: __('Search donation forms', 'give')
46 },
47 {
48 name: 'status',
49 type: 'select',
50 text: __('status', 'give'),
51 ariaLabel: __('Filter donation forms by status', 'give'),
52 options: donationStatus
53 }
54 ]
55
56 const donationFormsBulkActions:Array<BulkActionsConfig> = [
57 {
58 label: __('Edit', 'give'),
59 value: 'edit',
60 action: async (selected) => {
61 const authorSelect = document.getElementById('giveDonationFormsTableSetAuthor') as HTMLSelectElement;
62 const author = authorSelect.value;
63 const statusSelect = document.getElementById('giveDonationFormsTableSetStatus') as HTMLSelectElement;
64 const status = statusSelect.value;
65 if(! (author || status)){
66 return {errors: [], successes: []};
67 }
68 const editParams = {
69 ids: selected.join(','),
70 author,
71 status
72 };
73 return await API.fetchWithArgs('/edit', editParams, 'UPDATE');
74 },
75 confirm: (selected, names) => (
76 <>
77 <p>Donation forms to be edited:</p>
78 <ul role='document' tabIndex={0}>
79 {selected.map((id, index) => (
80 <li key={id}>{names[index]}</li>
81 ))}
82 </ul>
83 <div className={styles.flexRow}>
84 <label htmlFor='giveDonationFormsTableSetAuthor'>{__('Set form author', 'give')}</label>
85 <Select id='giveDonationFormsTableSetAuthor' style={{paddingInlineEnd: '2rem'}}>
86 <option value=''>{__('Keep current author', 'give')}</option>
87 {window.GiveDonationForms.authors.map(author => (
88 <option key={author.id} value={author.id}>{author.name}</option>
89 ))}
90 </Select>
91 </div>
92 <div className={styles.flexRow}>
93 <label htmlFor='giveDonationFormsTableSetStatus'>{__('Set form status', 'give')}</label>
94 <Select id='giveDonationFormsTableSetStatus' style={{paddingInlineEnd: '2rem'}}>
95 <option value=''>{__('Keep current status', )}</option>
96 <option value='publish'>{__('Published', 'give')}</option>
97 <option value='private'>{__('Private', 'give')}</option>
98 <option value='pending'>{__('Pending Review', 'give')}</option>
99 <option value='draft'>{__('Draft', 'give')}</option>
100 </Select>
101 </div>
102 </>
103 )
104 },
105 {
106 label: __('Delete', 'give'),
107 value: 'delete',
108 type: 'danger',
109 isVisible: (data, parameters) => parameters.status === 'trash' || !data?.trash,
110 action: async (selected) => await API.fetchWithArgs('/delete', {ids: selected.join(',')}, 'DELETE'),
111 confirm: (selected, names) => (
112 <div>
113 <p>
114 {__('Really delete the following donation forms?', 'give')}
115 </p>
116 <ul role='document' tabIndex={0}>
117 {selected.map((id, index) => (
118 <li key={id}>{names[index]}</li>
119 ))}
120 </ul>
121 </div>
122 )
123 },
124 {
125 label: __('Move to Trash', 'give'),
126 value: 'trash',
127 type: 'danger',
128 isVisible: (data, parameters) => parameters.status !== 'trash' && data?.trash,
129 action: async (selected) => await API.fetchWithArgs('/trash', {ids: selected.join(',')}, 'DELETE'),
130 confirm: (selected, names) => (
131 <div>
132 <p>
133 {__('Really trash the following donation forms?', 'give')}
134 </p>
135 <ul role='document' tabIndex={0}>
136 {selected.map((id, index) => (
137 <li key={id}>{names[index]}</li>
138 ))}
139 </ul>
140 </div>
141 )
142 }
143 ];
144
145 export default function DonationFormsListTable(){
146 return (
147 <ListTablePage
148 title={__('Donation Forms', 'give')}
149 singleName={__('donation form', 'give')}
150 pluralName={__('donation forms', 'give')}
151 columns={donationFormsColumns}
152 rowActions={DonationFormsRowActions}
153 bulkActions={donationFormsBulkActions}
154 apiSettings={window.GiveDonationForms}
155 filterSettings={donationFormsFilters}
156 >
157 <a href={'post-new.php?post_type=give_forms'} className={styles.addFormButton}>
158 {__('Add Form', 'give')}
159 </a>
160 <button className={styles.addFormButton} onClick={showLegacyDonationForms}>
161 {__('Switch to Legacy View')}
162 </button>
163 </ListTablePage>
164 );
165 }
166
167 const showLegacyDonationForms = async (event) => {
168 await API.fetchWithArgs('/view', {isLegacy: 1});
169 window.location.href = '/wp-admin/edit.php?post_type=give_forms';
170 }
171