PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.17.0
GiveWP – Donation Plugin and Fundraising Platform v4.17.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 2.3.2 All 256 releases
give / src / DonationForms / resources / app / utilities / handleFormSubmitRequest.ts

handleFormSubmitRequest.ts in GiveWP – Donation Plugin and Fundraising Platform 4.17.0, at src/DonationForms/resources/app/utilities/handleFormSubmitRequest.ts

91 lines 3.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import {
2 Gateway,
3 isFormResponseGatewayError,
4 isFormResponseRedirect,
5 isFormResponseValidationError,
6 isResponseRedirected,
7 } from '@givewp/forms/types';
8 import generateRequestErrors from '../utilities/generateRequestErrors';
9 import FormRequestError from '../errors/FormRequestError';
10
11 import {__} from '@wordpress/i18n';
12 import handleRedirect from '@givewp/forms/app/utilities/handleFormRedirect';
13 import getCurrentFormUrlData from '@givewp/forms/app/utilities/getCurrentFormUrlData';
14 import postFormData from '@givewp/forms/app/utilities/postFormData';
15 import convertValuesToFormData from '@givewp/forms/app/utilities/convertValuesToFormData';
16 import {getAuthToken} from '@givewp/forms/app/utilities/authToken';
17
18 /**
19 * @since 4.17.0 Send the auth token so embedded forms stay signed in without cookies
20 * @since 3.22.0 Add locale support
21 */
22 export default async function handleSubmitRequest(
23 values,
24 setError,
25 gateway: Gateway,
26 donateUrl: string,
27 inlineRedirectRoutes: string[]
28 ) {
29 if (values?.donationType === 'subscription' && !gateway.supportsSubscriptions) {
30 return setError('FORM_ERROR', {
31 message: __(
32 'This payment gateway does not support recurring payments, please try selecting another payment gateway.',
33 'give'
34 ),
35 });
36 }
37
38 try {
39 const {originUrl, isEmbed, embedId, locale} = getCurrentFormUrlData();
40
41 const formValues = {
42 ...values,
43 originUrl,
44 isEmbed,
45 embedId,
46 locale,
47 authToken: getAuthToken(),
48 };
49
50 const formData = convertValuesToFormData(formValues);
51
52 let beforeCreatePaymentGatewayResponse = {};
53
54 if (gateway.beforeCreatePayment) {
55 beforeCreatePaymentGatewayResponse = await gateway.beforeCreatePayment(values);
56
57 for (const gatewayDataKey in beforeCreatePaymentGatewayResponse) {
58 formData.append(`gatewayData[${gatewayDataKey}]`, beforeCreatePaymentGatewayResponse[gatewayDataKey]);
59 }
60 }
61
62 const {response} = await postFormData(donateUrl, formData);
63
64 if (isResponseRedirected(response)) {
65 await handleRedirect(response.url, inlineRedirectRoutes);
66 }
67
68 const formResponse = await response.json();
69
70 if (isFormResponseRedirect(formResponse)) {
71 await handleRedirect(formResponse.data.redirectUrl, inlineRedirectRoutes);
72 }
73
74 if (isFormResponseGatewayError(formResponse) || isFormResponseValidationError(formResponse)) {
75 throw new FormRequestError(formResponse.data.errors.errors);
76 }
77
78 if (gateway.afterCreatePayment) {
79 await gateway.afterCreatePayment(formResponse);
80 }
81 } catch (error) {
82 if (error instanceof FormRequestError) {
83 return generateRequestErrors(values, error.errors, setError);
84 }
85
86 return setError('FORM_ERROR', {
87 message: error?.message ?? __('Something went wrong, please try again or contact support.', 'give'),
88 });
89 }
90 }
91