PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.3.1
GiveWP – Donation Plugin and Fundraising Platform v3.3.1
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 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 2 years ago hooks 2 years ago store 2 years ago templates 2 years ago utilities 2 years ago DonationFormApp.tsx 2 years ago
DonationFormApp.tsx
156 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
50 if (form.goal.isAchieved) {
51 return (
52 <DonationFormErrorBoundary>
53 <GoalAchievedTemplate goalAchievedMessage={form.settings.goalAchievedMessage} />
54 </DonationFormErrorBoundary>
55 );
56 }
57
58 if (form.design?.isMultiStep) {
59 return (
60 <DonationFormSettingsProvider value={{...form.settings, ...donationFormNodeSettings}}>
61 <DonationFormStateProvider initialState={initialState}>
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
83 const {
84 subscribeToGoal,
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 subscribeToColors((data) => {
119 if (data['primaryColor']) {
120 root.style.setProperty('--givewp-primary-color', data['primaryColor']);
121 }
122
123 if (data['secondaryColor']) {
124 root.style.setProperty('--givewp-secondary-color', data['secondaryColor']);
125 }
126 })
127
128 subscribeToCss(({customCss}) => {
129 let cssRules = '';
130 const stylesheet = new CSSStyleSheet();
131
132 stylesheet.replaceSync(customCss);
133
134 for (let i = 0; i < stylesheet.cssRules.length; i++) {
135 cssRules += stylesheet.cssRules[i].cssText + "\n";
136 }
137
138 style.innerText = cssRules;
139 })
140
141 return () => unsubscribeAll();
142
143 }, []);
144
145 return <App form={formState} />
146 }
147
148 const root = document.getElementById('root-givewp-donation-form');
149 const style = document.getElementById('root-givewp-donation-form-style');
150
151 if (createRoot) {
152 createRoot(root).render(previewMode ? <AppPreview /> : <App form={form} />);
153 } else {
154 render(previewMode ? <AppPreview /> : <App form={form} />, root);
155 }
156