PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.18.0
GiveWP – Donation Plugin and Fundraising Platform v4.18.0
4.18.0 4.17.0 4.16.9 4.16.8.1 4.16.8 4.16.7.2 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 All 257 releases
give / src / Promotions / InPluginUpsells / resources / js / components / FreeAddOnTab.js

FreeAddOnTab.js in GiveWP – Donation Plugin and Fundraising Platform 4.18.0, at src/Promotions/InPluginUpsells/resources/js/components/FreeAddOnTab.js

88 lines 4.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import {useRef} from 'react';
2 import cx from 'classnames';
3
4 import GreenButton from '@givewp/promotions/components/GreenButton';
5 import useFreeAddonSubscription from '@givewp/promotions/hooks/useFreeAddonSubscription';
6
7 import styles from './FreeAddOnTab.module.css';
8 import {Hero} from './Hero';
9 import {Card} from './Card';
10 import {transformStrong} from '../utils';
11
12 const {heading, description, reports, form} = window.GiveAddons.freeAddon;
13 const {siteUrl, siteName} = window.GiveAddons;
14
15 export const FreeAddOnTab = () => {
16 const {userSubscribed, hasSubscriptionError, subscribeUser} = useFreeAddonSubscription();
17 const firstNameInput = useRef();
18 const emailInput = useRef();
19
20 const handleSubscribe = async (event) => {
21 event.preventDefault();
22
23 await subscribeUser(firstNameInput.current.value, emailInput.current.value, siteUrl, siteName);
24 };
25
26 return (
27 <article className={styles.freeAddonSection}>
28 <Hero heading={heading} description={description} />
29 <Card as="article" className={cx(styles.card, styles.emailReports)}>
30 <div>
31 <div className={styles.nameAndFlag}>
32 <h3 className={styles.title}>
33 <img className={styles.icon} src={reports.icon} alt={reports.heading} />
34 {reports.heading}
35 </h3>
36 </div>
37 <div className={styles.description}>
38 {reports.description.map((text, index) => (
39 <p dangerouslySetInnerHTML={{__html: transformStrong(text)}} key={index}></p>
40 ))}
41 </div>
42 </div>
43 <aside className={styles.includes}>
44 <h4>{reports.highlights.heading}</h4>
45 {reports.highlights.items.map(({icon, text}, index) => (
46 <div className={styles.nameAndFlag} key={index}>
47 <img className={styles.icon} src={icon} alt="Icon" />
48 <strong>{text}</strong>
49 </div>
50 ))}
51 </aside>
52 </Card>
53 <Hero heading={form.heading} className={styles.informationHero} />
54 <Card className={cx(styles.card, styles.formCard)}>
55 {userSubscribed ? (
56 <span className={styles.formCard__thankYou}>{form.submissionConfirmation}</span>
57 ) : (
58 <>
59 {hasSubscriptionError && (
60 <div className={styles.submissionError}>
61 There was an issue submitting your information. Please try again. If the problem
62 persists, try refreshing the page. If it still doesn't work, please{' '}
63 <a href="https://givewp.com/support" target="_blank">
64 contact support.
65 </a>
66 </div>
67 )}
68 <form onSubmit={handleSubscribe}>
69 <div className={styles.formCard__inputs}>
70 <label>
71 <span>First Name</span>
72 <input type="text" name="firstName" required ref={firstNameInput} />
73 </label>
74 <label>
75 <span>Email Address</span>
76 <input type="email" name="email" required ref={emailInput} />
77 </label>
78 </div>
79 <GreenButton as="input" text={form.submitButton} shadow />
80 </form>
81 <em className={styles.disclosure}>{form.disclaimer}</em>
82 </>
83 )}
84 </Card>
85 </article>
86 );
87 };
88