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