PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.3.1
GiveWP – Donation Plugin and Fundraising Platform v3.3.1
4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 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 / Donors / resources / components / DonorsListTable.tsx
give / src / Donors / resources / components Last commit date
DonorsListTable.tsx 2 years ago DonorsRowActions.module.scss 3 years ago DonorsRowActions.tsx 2 years ago style.scss 3 years ago
DonorsListTable.tsx
132 lines
1 import {__} from '@wordpress/i18n';
2 import {ListTableApi, ListTablePage} from '@givewp/components';
3 import {DonorsRowActions} from './DonorsRowActions';
4 import {BulkActionsConfig, FilterConfig} from '@givewp/components/ListTable/ListTablePage';
5 import styles from '@givewp/components/ListTable/ListTablePage/ListTablePage.module.scss';
6 import {Interweave} from 'interweave';
7 import './style.scss';
8 import BlankSlate from '@givewp/components/ListTable/BlankSlate';
9 import ProductRecommendations from '@givewp/components/ListTable/ProductRecommendations';
10
11 declare global {
12 interface Window {
13 GiveDonors: {
14 apiNonce: string;
15 apiRoot: string;
16 forms: Array<{value: string; text: string}>;
17 table: {columns: Array<object>};
18 adminUrl: string;
19 pluginUrl: string;
20 dissedRecommendations: Array<string>;
21 };
22 }
23 }
24
25 const API = new ListTableApi(window.GiveDonors);
26
27 const donorsFilters: Array<FilterConfig> = [
28 {
29 name: 'search',
30 type: 'search',
31 inlineSize: '14rem',
32 text: __('Name, Email, or Donor ID', 'give'),
33 ariaLabel: __('Search donors', 'give'),
34 },
35 {
36 name: 'form',
37 type: 'formselect',
38 text: __('All Donation Forms', 'give'),
39 ariaLabel: __('Filter donation forms by status', 'give'),
40 options: window.GiveDonors.forms,
41 },
42 ];
43
44 const donorsBulkActions: Array<BulkActionsConfig> = [
45 {
46 label: __('Delete', 'give'),
47 value: 'delete',
48 type: 'danger',
49 action: async (selected) => {
50 const deleteDonations = document.querySelector('#giveDonorsTableDeleteDonations') as HTMLInputElement;
51 const args = {ids: selected.join(','), deleteDonationsAndRecords: deleteDonations.checked};
52 const response = await API.fetchWithArgs('/delete', args, 'DELETE');
53 return response;
54 },
55 confirm: (selected, names) => (
56 <>
57 <p>{__('Really delete the following donors?', 'give')}</p>
58 <ul role="document" tabIndex={0}>
59 {selected.map((id, index) => (
60 <li key={id}>
61 <Interweave attributes={{className: 'donorBulkModalContent'}} content={names[index]} />
62 </li>
63 ))}
64 </ul>
65 <div>
66 <input id="giveDonorsTableDeleteDonations" type="checkbox" defaultChecked={true} />
67 <label htmlFor="giveDonorsTableDeleteDonations">
68 {__('Delete all associated donations and records', 'give')}
69 </label>
70 </div>
71 </>
72 ),
73 },
74 ];
75
76 /**
77 * Displays a blank slate for the Donors table.
78 * @since 2.27.0
79 */
80 const ListTableBlankSlate = (
81 <BlankSlate
82 imagePath={`${window.GiveDonors.pluginUrl}assets/dist/images/list-table/blank-slate-donor-icon.svg`}
83 description={__('No donors found', 'give')}
84 href={'https://docs.givewp.com/donors'}
85 linkText={__('GiveWP Donors.', 'give')}
86 />
87 );
88
89 /**
90 * @since 2.27.1
91 */
92 const RecommendationConfig: any = {
93 feeRecovery: {
94 enum: 'givewp_donors_fee_recovery_recommendation_dismissed',
95 documentationPage: 'https://docs.givewp.com/feerecovery-donors-list',
96 message: __(
97 ' 90% of donors opt to give more to help cover transaction fees when given the opportunity. Give donors that opportunity.',
98 'give'
99 ),
100 innerHtml: __('Get the Fee Recovery add-on today', 'give'),
101 },
102 };
103
104 const recommendation = (
105 <ProductRecommendations options={[RecommendationConfig.feeRecovery]} apiSettings={window.GiveDonors} />
106 );
107
108 export default function DonorsListTable() {
109 return (
110 <ListTablePage
111 title={__('Donors', 'give')}
112 singleName={__('donors', 'give')}
113 pluralName={__('donors', 'give')}
114 rowActions={DonorsRowActions}
115 bulkActions={donorsBulkActions}
116 apiSettings={window.GiveDonors}
117 filterSettings={donorsFilters}
118 listTableBlankSlate={ListTableBlankSlate}
119 productRecommendation={recommendation}
120 >
121 <button className={styles.addFormButton} onClick={showLegacyDonors}>
122 {__('Switch to Legacy View', 'give')}
123 </button>
124 </ListTablePage>
125 );
126 }
127
128 const showLegacyDonors = async (event) => {
129 await API.fetchWithArgs('/view', {isLegacy: 1});
130 window.location.reload();
131 };
132