Skip to content

Commit b0123fd

Browse files
authored
Merge pull request #2067 from rgristroph-usdoj/WS-503-recaptchv3
WS-503: More attempts at getting recaptcha v3 working.
2 parents a8c724d + 7866a04 commit b0123fd

File tree

1 file changed

+29
-8
lines changed

1 file changed

+29
-8
lines changed

js/components/foia_request_form.jsx

+29-8
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import React, { useState, useEffect } from 'react';
1+
import React, { useState, useEffect, useCallback } from 'react';
22
import PropTypes from 'prop-types';
33
import Form from '@rjsf/core';
44
import validator from '@rjsf/validator-ajv8';
55
import { Map } from 'immutable';
66
import CustomFieldTemplate from 'components/request_custom_field_template';
77
import USWDSRadioWidget from 'components/uswds_radio_widget';
88
import USWDSCheckboxWidget from 'components/uswds_checkbox_widget';
9-
import { GoogleReCaptchaProvider, GoogleReCaptcha } from 'react-google-recaptcha-v3'; // Import v3 hook
9+
import { GoogleReCaptchaProvider, GoogleReCaptcha, useGoogleReCaptcha } from 'react-google-recaptcha-v3'; // Import v3 hook
1010
import { requestActions } from '../actions';
1111
import { SubmissionResult } from '../models';
1212
import CustomObjectFieldTemplate from './object_field_template';
@@ -23,17 +23,31 @@ function FoiaRequestForm({
2323
const [settingsdata, setSettingsdata] = useState(null);
2424
const [token, setToken] = useState('');
2525
const [refreshReCaptcha, setRefreshReCaptcha] = useState(false);
26+
const { executeRecaptcha } = useGoogleReCaptcha();
27+
28+
const setTokenFunc = (getToken) => {
29+
setToken(getToken);
30+
};
31+
32+
const handleReCaptchaVerify = useCallback(async () => {
33+
if (!executeRecaptcha) {
34+
console.log('Execute recaptcha not yet available');
35+
return;
36+
}
37+
38+
const newtoken = await executeRecaptcha('submit');
39+
setTokenFunc(newtoken);
40+
console.log('newtoken:');
41+
console.log(newtoken);
42+
}, [executeRecaptcha]);
2643

2744
useEffect(() => {
2845
fetch('/files/settings.json')
2946
.then((response) => response.json())
3047
.then((result) => setSettingsdata(result))
3148
.catch((error) => console.error('Error fetching recaptcha site key:', error));
32-
}, []);
33-
34-
const setTokenFunc = (getToken) => {
35-
setToken(getToken);
36-
};
49+
handleReCaptchaVerify();
50+
}, [handleReCaptchaVerify]);
3751

3852
// Helper function to jump to the first form error.
3953
function focusOnFirstError() {
@@ -80,6 +94,7 @@ function FoiaRequestForm({
8094

8195
function onFormSubmit({ formData: data }) {
8296
// Now you can use the recaptcha token for your form submission
97+
handleReCaptchaVerify();
8398
data.expedited_processing.captcha = token;
8499

85100
// Merge the sections into a single payload
@@ -88,7 +103,13 @@ function FoiaRequestForm({
88103
findFileFields(requestForm)
89104
.filter((fileFieldName) => fileFieldName in payload)
90105
.forEach((fileFieldName) => {
91-
payload[fileFieldName] = dataUrlToAttachment(payload[fileFieldName]);
106+
payload[fileFieldName] = dataUrlToAttachment(payload[fileFieldName])
107+
.catch((error) => {
108+
console.error('Error:', error);
109+
});
110+
})
111+
.catch((error) => {
112+
console.error('Error2:', error);
92113
});
93114
// Submit the request
94115
return requestActions

0 commit comments

Comments
 (0)