1
- import React , { useState , useEffect } from 'react' ;
1
+ import React , { useState , useEffect , useCallback } from 'react' ;
2
2
import PropTypes from 'prop-types' ;
3
3
import Form from '@rjsf/core' ;
4
4
import validator from '@rjsf/validator-ajv8' ;
5
5
import { Map } from 'immutable' ;
6
6
import CustomFieldTemplate from 'components/request_custom_field_template' ;
7
7
import USWDSRadioWidget from 'components/uswds_radio_widget' ;
8
8
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
10
10
import { requestActions } from '../actions' ;
11
11
import { SubmissionResult } from '../models' ;
12
12
import CustomObjectFieldTemplate from './object_field_template' ;
@@ -23,17 +23,31 @@ function FoiaRequestForm({
23
23
const [ settingsdata , setSettingsdata ] = useState ( null ) ;
24
24
const [ token , setToken ] = useState ( '' ) ;
25
25
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 ] ) ;
26
43
27
44
useEffect ( ( ) => {
28
45
fetch ( '/files/settings.json' )
29
46
. then ( ( response ) => response . json ( ) )
30
47
. then ( ( result ) => setSettingsdata ( result ) )
31
48
. catch ( ( error ) => console . error ( 'Error fetching recaptcha site key:' , error ) ) ;
32
- } , [ ] ) ;
33
-
34
- const setTokenFunc = ( getToken ) => {
35
- setToken ( getToken ) ;
36
- } ;
49
+ handleReCaptchaVerify ( ) ;
50
+ } , [ handleReCaptchaVerify ] ) ;
37
51
38
52
// Helper function to jump to the first form error.
39
53
function focusOnFirstError ( ) {
@@ -80,6 +94,7 @@ function FoiaRequestForm({
80
94
81
95
function onFormSubmit ( { formData : data } ) {
82
96
// Now you can use the recaptcha token for your form submission
97
+ handleReCaptchaVerify ( ) ;
83
98
data . expedited_processing . captcha = token ;
84
99
85
100
// Merge the sections into a single payload
@@ -88,7 +103,13 @@ function FoiaRequestForm({
88
103
findFileFields ( requestForm )
89
104
. filter ( ( fileFieldName ) => fileFieldName in payload )
90
105
. 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 ) ;
92
113
} ) ;
93
114
// Submit the request
94
115
return requestActions
0 commit comments