PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
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 / Subscriptions / resources / admin / components / SubscriptionDetailsPage / Tabs / Donations / index.tsx
give / src / Subscriptions / resources / admin / components / SubscriptionDetailsPage / Tabs / Donations Last commit date
AddRenewalModal 8 months ago apiSettings.ts 10 months ago index.tsx 9 months ago styles.module.scss 9 months ago
index.tsx
116 lines
1 import { __ } from "@wordpress/i18n";
2 import { ListTablePage } from "@givewp/components";
3 import type { ListTablePageRef } from "@givewp/components";
4 import { getSubscriptionOptionsWindowData, useRefreshSubscriptionInBackground } from "@givewp/subscriptions/utils";
5 import styles from './styles.module.scss';
6 import cn from 'classnames';
7 import { DonationRowActions } from "@givewp/donations/components/DonationRowActions";
8 import BlankSlate from "@givewp/components/ListTable/BlankSlate";
9 import apiSettings from './apiSettings';
10 import AddRenewalDialog from "./AddRenewalModal";
11 import { useState, useRef } from "react";
12 import { useDispatch } from "@wordpress/data";
13 import { store as coreStore } from "@wordpress/core-data";
14
15 const { mode, adminUrl, pluginUrl } = getSubscriptionOptionsWindowData();
16
17 // This is necessary to reuse the DonationRowActions component
18 // that expects the window.GiveDonations object to be present
19 // while avoiding to expose the entire window.GiveDonations object.
20 if (!window?.GiveDonations) {
21 // @ts-ignore
22 window.GiveDonations = {
23 adminUrl,
24 };
25 }
26
27 /**
28 * @since 4.8.0
29 */
30 const ListTableBlankSlate = (
31 <BlankSlate
32 imagePath={`${pluginUrl}build/assets/dist/images/list-table/blank-slate-donations-icon.svg`}
33 description={__('No donations found', 'give')}
34 href={'https://docs.givewp.com/donations'}
35 linkText={__('GiveWP Donations.', 'give')}
36 />
37 );
38
39 /**
40 * @since 4.8.0
41 */
42 export default function SubscriptionDetailsPageDonationsTab() {
43 const [isAddRenewalDialogOpen, setIsAddRenewalDialogOpen] = useState(false);
44 const listTableRef = useRef<ListTablePageRef>(null);
45 const dispatch = useDispatch(`givewp/admin-details-page-notifications`);
46 const { saveEntityRecord } = useDispatch(coreStore);
47 const refreshSubscriptionInBackground = useRefreshSubscriptionInBackground();
48 const urlParams = new URLSearchParams(window.location.search);
49 const subscriptionId = Number(urlParams.get('id'));
50
51 const handleAddRenewal = async (data: any) => {
52 try {
53 const response = await saveEntityRecord('givewp', 'donation', {
54 subscriptionId,
55 type: 'renewal',
56 amount: data.amount,
57 createdAt: (new Date(data.date)).toISOString(),
58 updateRenewalDate: !!data.updateRenewalDate,
59 gatewayTransactionId: data.transactionId,
60 });
61
62 if (response?.id) {
63 await listTableRef.current?.refresh();
64
65 if (!!data.updateRenewalDate) {
66 await refreshSubscriptionInBackground(subscriptionId);
67 }
68
69 dispatch.addSnackbarNotice({
70 id: `add-renewal-success`,
71 content: __(`Renewal added successfully`, 'give'),
72 });
73 } else {
74 throw new Error(response);
75 }
76 } catch (error) {
77 console.error(error);
78 dispatch.addSnackbarNotice({
79 id: `add-renewal-error`,
80 type: 'error',
81 content: __(`Failed to add renewal`, 'give'),
82 });
83 }
84 };
85
86 return (
87 <div className={styles.container}>
88 <div className={styles.header}>
89 <h2 className={styles.title}>{__('Donations', 'give')}</h2>
90 <p className={styles.description}>{__('Show all recurring donations under this subscription.', 'give')}</p>
91 </div>
92 <button className={styles.button} onClick={() => setIsAddRenewalDialogOpen(true)}>{__('Add renewal', 'give')}</button>
93
94 <div className={styles.tableWrapper}>
95 <ListTablePage
96 ref={listTableRef}
97 title={__('Donations', 'give')}
98 apiSettings={apiSettings}
99 listTableBlankSlate={ListTableBlankSlate}
100 singleName={__('result', 'give')}
101 pluralName={__('results', 'give')}
102 paymentMode={mode === 'test'}
103 contentMode={true}
104 rowActions={DonationRowActions}
105 />
106 </div>
107
108 <AddRenewalDialog
109 isOpen={isAddRenewalDialogOpen}
110 handleClose={() => setIsAddRenewalDialogOpen(false)}
111 handleConfirm={handleAddRenewal}
112 />
113 </div>
114 );
115 }
116