PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.6.1
GiveWP – Donation Plugin and Fundraising Platform v3.6.1
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 / Subscriptions / resources / components / SubscriptionsListTable.tsx
give / src / Subscriptions / resources / components Last commit date
SubscriptionsListTable.tsx 3 years ago SubscriptionsRowActions.tsx 3 years ago
SubscriptionsListTable.tsx
154 lines
1 import {__} from '@wordpress/i18n';
2 import {ListTablePage} from '@givewp/components';
3 import ListTableApi from '@givewp/components/ListTable/api';
4 import tableStyles from '@givewp/components/ListTable/ListTablePage/ListTablePage.module.scss';
5 import {BulkActionsConfig, FilterConfig} from '@givewp/components/ListTable/ListTablePage';
6 import {SubscriptionsRowActions} from './SubscriptionsRowActions';
7 import {IdBadge} from '@givewp/components/ListTable/TableCell';
8 import {Interweave} from 'interweave';
9 import BlankSlate from '@givewp/components/ListTable/BlankSlate';
10
11 declare global {
12 interface Window {
13 GiveSubscriptions: {
14 apiNonce: string;
15 apiRoot: string;
16 table: {columns: Array<object>};
17 forms: Array<{value: string; text: string}>;
18 paymentMode: boolean;
19 pluginUrl: string;
20 };
21 }
22 }
23
24 const API = new ListTableApi(window.GiveSubscriptions);
25
26 const filters: Array<FilterConfig> = [
27 {
28 name: 'search',
29 type: 'search',
30 inlineSize: '14rem',
31 text: __('Name, Email, or ID', 'give'),
32 ariaLabel: __('search donations', 'give'),
33 },
34 {
35 name: 'form',
36 type: 'formselect',
37 text: __('Select Form', 'give'),
38 ariaLabel: __('filter donation forms by status', 'give'),
39 options: window.GiveSubscriptions.forms,
40 },
41 {
42 name: 'toggle',
43 type: 'checkbox',
44 text: __('Test', 'give'),
45 ariaLabel: __('View Test Subscriptions', 'give'),
46 },
47 ];
48
49 const bulkActions: Array<BulkActionsConfig> = [
50 {
51 label: __('Delete', 'give'),
52 value: 'delete',
53 type: 'danger',
54 action: async (selected) => {
55 const response = await API.fetchWithArgs('/delete', {ids: selected.join(',')}, 'DELETE');
56 return response;
57 },
58 confirm: (selected, names) => (
59 <>
60 <p>{__('Really delete the following subscriptions?', 'give')}</p>
61 <ul role="document" tabIndex={0}>
62 {selected.map((donationId, index) => (
63 <li key={donationId}>
64 <IdBadge id={donationId} />{' '}
65 <span>
66 {__('from ', 'give')} <Interweave content={names[index]} />
67 </span>
68 </li>
69 ))}
70 </ul>
71 </>
72 ),
73 },
74 ...(() => {
75 const subscriptionStatuses = {
76 active: __('Set To Active', 'give'),
77 expired: __('Set To Expired', 'give'),
78 completed: __('Set To Completed', 'give'),
79 cancelled: __('Set To Cancelled', 'give'),
80 pending: __('Set To Pending', 'give'),
81 failing: __('Set To Failing', 'give'),
82 suspended: __('Set To Suspended', 'give'),
83 abandoned: __('Set To Abandoned', 'give'),
84 };
85
86 return Object.entries(subscriptionStatuses).map(([value, label]) => {
87 return {
88 label,
89 value,
90 action: async (selected) =>
91 await API.fetchWithArgs(
92 '/setStatus',
93 {
94 ids: selected.join(','),
95 status: value,
96 },
97 'POST'
98 ),
99 confirm: (selected, names) => (
100 <>
101 <p>{__('Set status for the following donations?', 'give')}</p>
102 <ul role="document" tabIndex={0}>
103 {selected.map((donationId, index) => (
104 <li key={donationId}>
105 <IdBadge id={donationId} /> <span>{__('from', 'give')}</span>
106 <Interweave content={names[index]} />
107 </li>
108 ))}
109 </ul>
110 </>
111 ),
112 };
113 });
114 })(),
115 ];
116
117 /**
118 * Displays a blank slate for the Subscriptions table.
119 * @since 2.27.0
120 */
121 const ListTableBlankSlate = (
122 <BlankSlate
123 imagePath={`${window.GiveSubscriptions.pluginUrl}/assets/dist/images/list-table/blank-slate-recurring-icon.svg`}
124 description={__('No subscriptions found', 'give')}
125 href={'https://docs.givewp.com/subscriptions'}
126 linkText={__('Recurring Donations.', 'give')}
127 />
128 );
129
130 export default function SubscriptionsListTable() {
131 return (
132 <ListTablePage
133 title={__('Subscriptions', 'give')}
134 singleName={__('subscription', 'give')}
135 pluralName={__('subscriptions', 'give')}
136 rowActions={SubscriptionsRowActions}
137 bulkActions={bulkActions}
138 apiSettings={window.GiveSubscriptions}
139 filterSettings={filters}
140 paymentMode={!!window.GiveSubscriptions.paymentMode}
141 listTableBlankSlate={ListTableBlankSlate}
142 >
143 <button className={tableStyles.addFormButton} onClick={showLegacyDonations}>
144 {__('Switch to Legacy View')}
145 </button>
146 </ListTablePage>
147 );
148 }
149
150 const showLegacyDonations = async (event) => {
151 await API.fetchWithArgs('/view', {isLegacy: 1});
152 window.location.reload();
153 };
154