PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.14.2
GiveWP – Donation Plugin and Fundraising Platform v3.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 / DonationForms / resources / app / DonationFormApp.tsx
give / src / DonationForms / resources / app Last commit date
errors 2 years ago fields 2 years ago form 1 year ago hooks 2 years ago store 2 years ago templates 2 years ago utilities 2 years ago DonationFormApp.tsx 2 years ago
DonationFormApp.tsx
154 lines
1 import {createRoot, render} from '@wordpress/element';
2 import getDefaultValuesFromSections from './utilities/getDefaultValuesFromSections';
3 import Form from './form/Form';
4 import {DonationFormStateProvider} from './store';
5 import getWindowData from './utilities/getWindowData';
6 import prepareFormData from './utilities/PrepareFormData';
7 import getJoiRulesForForm from './utilities/ConvertFieldAPIRulesToJoi';
8 import Header from './form/Header';
9 import mountWindowData from '@givewp/forms/app/utilities/mountWindowData';
10 import {withTemplateWrapper} from '@givewp/forms/app/templates';
11 import DonationFormErrorBoundary from '@givewp/forms/app/errors/boundaries/DonationFormErrorBoundary';
12 import MultiStepForm from '@givewp/forms/app/form/MultiStepForm';
13 import getDonationFormNodeSettings from '@givewp/forms/app/utilities/getDonationFormNodeSettings';
14 import {DonationFormSettingsProvider} from '@givewp/forms/app/store/form-settings';
15 import useDonationFormPubSub from '@givewp/forms/app/utilities/useDonationFormPubSub';
16 import {useEffect, useState} from 'react';
17 import type {Form as DonationForm} from '@givewp/forms/types';
18
19 const formTemplates = window.givewp.form.templates;
20 const GoalAchievedTemplate = withTemplateWrapper(formTemplates.layouts.goalAchieved);
21
22 /**
23 * Get data from the server
24 */
25 const {form, previewMode} = getWindowData();
26 const donationFormNodeSettings = getDonationFormNodeSettings(form);
27
28 prepareFormData(form);
29
30 mountWindowData();
31
32 /**
33 * Prepare default values for form
34 */
35 const defaultValues = getDefaultValuesFromSections(form.nodes);
36
37 const schema = getJoiRulesForForm(form);
38
39 const initialState = {
40 defaultValues,
41 gateways: window.givewp.gateways.getAll(),
42 validationSchema: schema,
43 };
44
45 /**
46 * @since 3.0.0
47 */
48 function App({form}: { form: DonationForm }) {
49 if (form.goal.isAchieved) {
50 return (
51 <DonationFormErrorBoundary>
52 <GoalAchievedTemplate goalAchievedMessage={form.settings.goalAchievedMessage} />
53 </DonationFormErrorBoundary>
54 );
55 }
56
57 if (form.design?.isMultiStep) {
58 return (
59 <DonationFormSettingsProvider value={{...form.settings, ...donationFormNodeSettings}}>
60 <DonationFormStateProvider initialState={initialState}>
61 {!form.design?.includeHeaderInMultiStep && form.settings.showHeader && <Header form={form} />}
62 <MultiStepForm form={form} />
63 </DonationFormStateProvider>
64 </DonationFormSettingsProvider>
65 );
66 }
67
68 return (
69 <DonationFormSettingsProvider value={{...form.settings, ...donationFormNodeSettings}}>
70 <DonationFormStateProvider initialState={initialState}>
71 {form.settings?.showHeader && <Header form={form} />}
72 <Form defaultValues={defaultValues} sections={form.nodes} validationSchema={schema} />
73 </DonationFormStateProvider>
74 </DonationFormSettingsProvider>
75 );
76 }
77
78 /**
79 * @since 3.1.0
80 */
81 function AppPreview() {
82 const {
83 subscribeToGoal,
84 subscribeToColors,
85 subscribeToSettings,
86 subscribeToCss,
87 unsubscribeAll
88 } = useDonationFormPubSub();
89
90 const [formState, setFormState] = useState<DonationForm>(form);
91
92 useEffect(() => {
93 subscribeToSettings((settings) => {
94 setFormState((prevState) => {
95 return {
96 ...prevState,
97 settings: {
98 ...prevState.settings,
99 ...settings,
100 },
101 };
102 });
103 });
104
105 subscribeToGoal((goal) => {
106 setFormState((prevState) => {
107 return {
108 ...prevState,
109 goal: {
110 ...prevState.goal,
111 ...goal,
112 },
113 };
114 });
115 });
116
117 subscribeToColors((data) => {
118 if (data['primaryColor']) {
119 root.style.setProperty('--givewp-primary-color', data['primaryColor']);
120 }
121
122 if (data['secondaryColor']) {
123 root.style.setProperty('--givewp-secondary-color', data['secondaryColor']);
124 }
125 });
126
127 subscribeToCss(({customCss}) => {
128 let cssRules = '';
129 const stylesheet = new CSSStyleSheet();
130
131 stylesheet.replaceSync(customCss);
132
133 for (let i = 0; i < stylesheet.cssRules.length; i++) {
134 cssRules += stylesheet.cssRules[i].cssText + '\n';
135 }
136
137 style.innerText = cssRules;
138 });
139
140 return () => unsubscribeAll();
141 }, []);
142
143 return <App form={formState} />;
144 }
145
146 const root = document.getElementById('root-givewp-donation-form');
147 const style = document.getElementById('root-givewp-donation-form-style');
148
149 if (createRoot) {
150 createRoot(root).render(previewMode ? <AppPreview /> : <App form={form} />);
151 } else {
152 render(previewMode ? <AppPreview /> : <App form={form} />, root);
153 }
154