Skip to content

Commit 2409fe1

Browse files
committed
add logic to auto-reset recaptcha on expire
1 parent c72a083 commit 2409fe1

File tree

1 file changed

+34
-6
lines changed

1 file changed

+34
-6
lines changed

src/FormikForm.js

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,26 +11,40 @@ export default () => {
1111
const [token, setToken] = useState(false);
1212
const [executing, setExecuting] = useState(false);
1313
const [verified, setVerified] = useState(false);
14+
const [rcError, setRcError] = useState(false);
1415

1516
const rcRef = useRef(null);
1617

1718
useEffect(() => {
18-
if (loaded) {
19+
console.log(`Effect: loaded has changed to ${loaded}`);
20+
if (loaded && !verified) {
21+
console.log(
22+
`Effect: loaded = ${loaded} and verified = ${verified}: executing...`
23+
);
1924
rcRef.current.execute();
2025
setExecuting(true);
2126
}
22-
}, [loaded]);
27+
}, [loaded, verified]);
28+
29+
const onError = () => {
30+
console.log("error...");
31+
setRcError(true);
32+
};
2333

24-
const onExpire = () => {
34+
const onExpire = async () => {
35+
console.log("expired...");
36+
console.log("resetting...");
37+
await rcRef.current.reset();
2538
setVerified(false);
26-
rcRef.current.reset();
27-
rcRef.current.execute();
2839
};
40+
2941
const onLoad = () => {
42+
console.log("loaded...");
3043
setLoaded(true);
3144
};
3245

3346
const onVerify = token => {
47+
console.log("verified...");
3448
setToken(token);
3549
setVerified(true);
3650
setExecuting(false);
@@ -74,6 +88,10 @@ export default () => {
7488
if (!verified) {
7589
onExpire();
7690
}
91+
if (rcError) {
92+
onExpire();
93+
setRcError(false);
94+
}
7795
if (resetForm) {
7896
setMsgSent(false);
7997
setErrMsg(false);
@@ -178,13 +196,15 @@ export default () => {
178196
ref={rcRef}
179197
sitekey="6Le_laEUAAAAACRNoby3_NLejhu0lCqb4_WeSotQ"
180198
data-netlify-recaptcha="true"
199+
onError={onError}
181200
onExpire={onExpire}
182201
onVerify={onVerify}
183202
onLoad={onLoad}
184203
size="invisible"
185204
/>
186205
<div className="m-2 col-form-label col-form-label-lg">
187206
<span className="mr-1">ReCaptcha status:</span>
207+
<br className="d-block d-sm-none mt-1" />
188208
<span
189209
className={`badge badge-${
190210
loaded ? "success" : "primary"
@@ -199,7 +219,15 @@ export default () => {
199219
>
200220
verified
201221
</span>
202-
{!verified && (
222+
{executing && (
223+
<span className={`badge badge-primary mx-2 p-2`}>
224+
executing
225+
</span>
226+
)}
227+
{rcError && (
228+
<span className={`badge badge-primary mx-2 p-2`}>error</span>
229+
)}
230+
{(rcError || !verified) && (
203231
<button
204232
className="btn btn-link text-dark"
205233
onClick={() => resetEverything()}

0 commit comments

Comments
 (0)