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 / form / Form.tsx
give / src / DonationForms / resources / app / form Last commit date
MultiStepForm 1 year ago Form.tsx 2 years ago Header.tsx 2 years ago Section.tsx 2 years ago
Form.tsx
88 lines
1 import {FormProvider, useForm, useFormState} from 'react-hook-form';
2 import {joiResolver} from '@hookform/resolvers/joi';
3
4 import getWindowData from '../utilities/getWindowData';
5 import {useDonationFormState} from '../store';
6 import {Section} from '@givewp/forms/types';
7 import {withTemplateWrapper} from '../templates';
8 import {useCallback} from 'react';
9 import FormSection from './Section';
10
11 import {ObjectSchema} from 'joi';
12 import DonationFormErrorBoundary from '@givewp/forms/app/errors/boundaries/DonationFormErrorBoundary';
13 import handleSubmitRequest from '@givewp/forms/app/utilities/handleFormSubmitRequest';
14 import {DonationSummaryProvider} from '@givewp/forms/app/store/donation-summary';
15
16 const {donateUrl, inlineRedirectRoutes} = getWindowData();
17 const formTemplates = window.givewp.form.templates;
18
19 const FormTemplate = withTemplateWrapper(formTemplates.layouts.form);
20
21 export default function Form({defaultValues, sections, validationSchema}: PropTypes) {
22 const {gateways} = useDonationFormState();
23
24 const getGateway = useCallback((gatewayId) => gateways.find(({id}) => id === gatewayId), []);
25
26 const methods = useForm<FormInputs>({
27 defaultValues,
28 resolver: joiResolver(validationSchema),
29 reValidateMode: 'onBlur',
30 });
31
32 const {handleSubmit, setError, control} = methods;
33
34 const {errors, isSubmitting, isSubmitSuccessful} = useFormState({control});
35
36 const formError = errors.hasOwnProperty('FORM_ERROR') ? errors.FORM_ERROR.message : null;
37
38 return (
39 <FormProvider {...methods}>
40 <DonationFormErrorBoundary>
41 <DonationSummaryProvider>
42 <FormTemplate
43 formProps={{
44 id: 'give-next-gen',
45 onSubmit: handleSubmit((values: any) =>
46 handleSubmitRequest(
47 values,
48 setError,
49 getGateway(values.gatewayId),
50 donateUrl,
51 inlineRedirectRoutes
52 )
53 ),
54 }}
55 isSubmitting={isSubmitting || isSubmitSuccessful}
56 formError={formError}
57 >
58 <>
59 {sections.map((section) => {
60 return (
61 <DonationFormErrorBoundary key={section.name}>
62 <FormSection key={section.name} section={section} />
63 </DonationFormErrorBoundary>
64 );
65 })}
66 </>
67 </FormTemplate>
68 </DonationSummaryProvider>
69 </DonationFormErrorBoundary>
70 </FormProvider>
71 );
72 }
73
74 type PropTypes = {
75 sections: Section[];
76 defaultValues: object;
77 validationSchema: ObjectSchema;
78 };
79
80 type FormInputs = {
81 FORM_ERROR: string;
82 amount: number;
83 firstName: string;
84 lastName: string;
85 email: string;
86 gatewayId: string;
87 };
88