PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.3
GiveWP – Donation Plugin and Fundraising Platform v4.16.3
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 / DonationForms / resources / app / DonationFormApp.tsx
give / src / DonationForms / resources / app Last commit date
errors 2 years ago fields 1 year ago form 5 months ago hooks 4 months ago store 2 years ago templates 2 years ago utilities 7 months ago DonationFormApp.tsx 1 year ago
DonationFormApp.tsx
160 lines
1 import {createRoot} 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 subscribeToGoalSource,
85 subscribeToColors,
86 subscribeToSettings,
87 subscribeToCss,
88 unsubscribeAll
89 } = useDonationFormPubSub();
90
91 const [formState, setFormState] = useState<DonationForm>(form);
92
93 useEffect(() => {
94 subscribeToSettings((settings) => {
95 setFormState((prevState) => {
96 return {
97 ...prevState,
98 settings: {
99 ...prevState.settings,
100 ...settings,
101 },
102 };
103 });
104 });
105
106 subscribeToGoal((goal) => {
107 setFormState((prevState) => {
108 return {
109 ...prevState,
110 goal: {
111 ...prevState.goal,
112 ...goal,
113 },
114 };
115 });
116 });
117
118 subscribeToGoalSource((goalSource) => {
119 setFormState((prevState) => {
120 return {
121 ...prevState,
122 goalSource,
123 };
124 });
125 });
126
127 subscribeToColors((data) => {
128 if (data['primaryColor']) {
129 root.style.setProperty('--givewp-primary-color', data['primaryColor']);
130 }
131
132 if (data['secondaryColor']) {
133 root.style.setProperty('--givewp-secondary-color', data['secondaryColor']);
134 }
135 });
136
137 subscribeToCss(({customCss}) => {
138 let cssRules = '';
139 const stylesheet = new CSSStyleSheet();
140
141 stylesheet.replaceSync(customCss);
142
143 for (let i = 0; i < stylesheet.cssRules.length; i++) {
144 cssRules += stylesheet.cssRules[i].cssText + '\n';
145 }
146
147 style.innerText = cssRules;
148 });
149
150 return () => unsubscribeAll();
151 }, []);
152
153 return <App form={formState} />;
154 }
155
156 const root = document.getElementById('root-givewp-donation-form');
157 const style = document.getElementById('root-givewp-donation-form-style');
158
159 createRoot(root).render(previewMode ? <AppPreview /> : <App form={form} />);
160