-
Notifications
You must be signed in to change notification settings - Fork 4.3k
/
view.js
56 lines (52 loc) · 1.62 KB
/
view.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
let formSettings;
try {
formSettings = JSON.parse(
document.getElementById(
'wp-script-module-data-@wordpress/block-library/form/view'
)?.textContent
);
} catch {}
// eslint-disable-next-line eslint-comments/disable-enable-pair
/* eslint-disable no-undef */
document.querySelectorAll( 'form.wp-block-form' ).forEach( function ( form ) {
// Bail If the form settings not provided or the form is not using the mailto: action.
if (
! formSettings ||
! form.action ||
! form.action.startsWith( 'mailto:' )
) {
return;
}
const redirectNotification = ( status ) => {
const urlParams = new URLSearchParams( window.location.search );
urlParams.append( 'wp-form-result', status );
window.location.search = urlParams.toString();
};
// Add an event listener for the form submission.
form.addEventListener( 'submit', async function ( event ) {
event.preventDefault();
// Get the form data and merge it with the form action and nonce.
const formData = Object.fromEntries( new FormData( form ).entries() );
formData.formAction = form.action;
formData._ajax_nonce = formSettings.nonce;
formData.action = formSettings.action;
formData._wp_http_referer = window.location.href;
formData.formAction = form.action;
try {
const response = await fetch( formSettings.ajaxUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: new URLSearchParams( formData ).toString(),
} );
if ( response.ok ) {
redirectNotification( 'success' );
} else {
redirectNotification( 'error' );
}
} catch ( error ) {
redirectNotification( 'error' );
}
} );
} );