PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.14.2
GiveWP – Donation Plugin and Fundraising Platform v4.14.2
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 / SubscriptionSyncList / Details.tsx
give / src / Subscriptions / resources / admin / components / SubscriptionSyncList Last commit date
Details.tsx 9 months ago icons.tsx 9 months ago index.tsx 9 months ago styles.module.scss 9 months ago
Details.tsx
157 lines
1 import { __ } from "@wordpress/i18n";
2 import { createInterpolateElement } from '@wordpress/element';
3 import classnames from 'classnames';
4 import { CheckCircleIcon, HandHeartIcon, XCircleIcon } from "./icons";
5 import styles from "./styles.module.scss";
6
7 /**
8 * Utility function to capitalize the first letter of a string
9 *
10 * @since 4.8.0
11 * @param str - The string to capitalize
12 * @returns The string with first letter capitalized
13 */
14 const capitalizeFirstLetter = (str: string): string => {
15 if (!str) return str;
16 return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
17 };
18
19 /**
20 * @since 4.8.0
21 */
22 type SyncDetailsProps = {
23 isAccurate: boolean;
24 platform: string;
25 gateway: string;
26 }
27
28 /**
29 * @since 4.8.0
30 */
31 export default function SyncDetails({ isAccurate, platform, gateway }: SyncDetailsProps) {
32 if(isAccurate) {
33 return (
34 <div
35 className={styles.accurateDetailWrapper}
36 role="region"
37 aria-label={__('Accurate synchronization details', 'give')}
38 >
39 <div className={styles.detailItem}>
40 <p className={styles.detailLabel}>{__('Platform', 'give')}</p>
41 <p className={styles.detailValue}>{platform ? capitalizeFirstLetter(platform) : __('Completed', 'give')}</p>
42 </div>
43 <CheckCircleIcon aria-label={__('Payment synchronization successful', 'give')}/>
44 <div className={styles.detailItem}>
45 <p className={styles.detailLabel}>{__('Gateway', 'give')}</p>
46 <p className={styles.detailValue}>{gateway ? capitalizeFirstLetter(gateway) : __('Completed', 'give')}</p>
47 </div>
48 </div>
49 )
50 }
51
52 return (
53 <div className={styles.syncDetails}>
54 <div className={styles.detail}>
55 <div className={styles.detailContainer}>
56 <p className={styles.detailTitle}>{__('OLD', 'give')}</p>
57 <div className={styles.detailWrapper}>
58 <div className={styles.detailItem}>
59 <p className={styles.detailLabel}>{__('Platform', 'give')}</p>
60 <p className={styles.detailValue}>{capitalizeFirstLetter(platform)}</p>
61 </div>
62 <XCircleIcon />
63 <div className={styles.detailItem}>
64 <p className={styles.detailLabel}>{__('Gateway', 'give')}</p>
65 <p className={styles.detailValue}>{capitalizeFirstLetter(gateway)}</p>
66 </div>
67 </div>
68 </div>
69 <div className={styles.detailContainer}>
70 <p className={styles.detailTitle}>{__('NEW', 'give')}</p>
71 <div className={styles.detailWrapper}>
72 <div className={styles.detailItem}>
73 <p className={styles.detailLabel}>{__('Platform', 'give')}</p>
74 <p className={styles.detailValue}>{capitalizeFirstLetter(gateway)}</p>
75 </div>
76 <CheckCircleIcon />
77 <div className={styles.detailItem}>
78 <p className={styles.detailLabel}>{__('Gateway', 'give')}</p>
79 <p className={styles.detailValue}>{capitalizeFirstLetter(gateway)}</p>
80 </div>
81 </div>
82 </div>
83 </div>
84 </div>
85 );
86 }
87
88 /**
89 * @since 4.8.0
90 */
91 type SyncPaymentDetailsProps = {
92
93 payment: {
94 gatewayTransactionId: string;
95 id: number;
96 amount: string;
97 createdAt: string;
98 status: string;
99 type: string;
100 } | null;
101 isAccurate?: boolean;
102 platform?: string;
103 gateway?: string;
104 }
105
106 /**
107 * @since 4.8.0
108 */
109 export function SyncPaymentDetails({ payment, platform, gateway, isAccurate }: SyncPaymentDetailsProps) {
110 if(isAccurate) {
111 return (
112 <div
113 className={styles.accurateDetailWrapper}
114 role="region"
115 aria-label={__('Accurate payment synchronization details', 'give')}
116 >
117 <div className={styles.detailItem}>
118 <p className={styles.detailLabel}>{__('Platform', 'give')}</p>
119 <p className={styles.detailValue}>{platform ? capitalizeFirstLetter(platform) : __('Completed', 'give')}</p>
120 </div>
121 <CheckCircleIcon aria-label={__('Payment synchronization successful', 'give')}/>
122 <div className={styles.detailItem}>
123 <p className={styles.detailLabel}>{__('Gateway', 'give')}</p>
124 <p className={styles.detailValue}>{gateway ? capitalizeFirstLetter(gateway) : __('Completed', 'give')}</p>
125 </div>
126 </div>
127 )
128 }
129
130 const PaymentAmount = () => (
131 <strong className={styles.paymentDescriptionAmount}>{payment?.amount}</strong>
132 );
133
134 const description = createInterpolateElement(
135 __('A donation of <PaymentAmount/> has been added.', 'give'),
136 { PaymentAmount: <PaymentAmount /> }
137 );
138
139 return (
140 <div
141 className={styles.paymentDetails}
142 role="region"
143 aria-label={__('Payment details', 'give')}
144 >
145 <div className={classnames(styles.paymentItem)}>
146 <div className={styles.paymentIcon}>
147 <HandHeartIcon aria-label={__('Donation icon', 'give')}/>
148 </div>
149 <div className={styles.paymentsContent}>
150 <p className={styles.paymentDescription}>{description}</p>
151 <p className={styles.paymentDate}>{payment?.createdAt}</p>
152 </div>
153 </div>
154 </div>
155 );
156 }
157