Skip to content

Commit 709d5f4

Browse files
refactor: extract webhook submission logic into a useWebhookSubmit hook and integrate it into CommonForm and ContactForm components.
Signed-off-by: Manishnemade12 <mnemade140@gmail.com>
1 parent 16010bb commit 709d5f4

File tree

4 files changed

+67
-51
lines changed

4 files changed

+67
-51
lines changed

src/components/CommonForm/events.js

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import React, { useState, useEffect } from "react";
1+
import React, { useState } from "react";
22
import Button from "../../reusecore/Button";
3-
import axios from "axios";
3+
import { useWebhookSubmit } from "../../utils/hooks/useWebhookSubmit";
44
import { Field, Form, Formik } from "formik";
55
import CommonFormWrapper from "./commonForm.style";
66
import { Container } from "../../reusecore/Layout";
@@ -12,6 +12,7 @@ const EventForm = ({ form, title, submit_title, submit_body }) => {
1212
const [stepNumber, setStepNumber] = useState(0);
1313
const [memberFormOne, setMemberFormOne] = useState({});
1414
const [submit, setSubmit] = useState(false);
15+
const { submitForm } = useWebhookSubmit();
1516

1617
// Form values
1718
const [email, setEmail] = useState("");
@@ -21,14 +22,6 @@ const EventForm = ({ form, title, submit_title, submit_body }) => {
2122
const [occupation, setOccupation] = useState("");
2223

2324

24-
useEffect(() => {
25-
if (submit) {
26-
axios.post("https://hook.us1.make.com/nficb3d7swqkclkl467st4hp4cg65u8o", {
27-
memberFormOne,
28-
});
29-
}
30-
}, [submit]);
31-
3225
return (
3326
<CommonFormWrapper>
3427
{
@@ -44,16 +37,21 @@ const EventForm = ({ form, title, submit_title, submit_body }) => {
4437
org: org,
4538
form: form,
4639
}}
47-
onSubmit={values => {
48-
setMemberFormOne(values);
49-
setStepNumber(1);
50-
setSubmit(true);
51-
window.scrollTo(0,window.scrollY - 800);
52-
setFirstName(values.firstname);
53-
setEmail(values.email);
54-
setLastName(values.lastname);
55-
setOccupation(values.occupation);
56-
setOrg(values.org);
40+
onSubmit={async (values) => {
41+
const { success } = await submitForm({ memberFormOne: values });
42+
if (success) {
43+
setMemberFormOne(values);
44+
setStepNumber(1);
45+
setSubmit(true);
46+
window.scrollTo(0,window.scrollY - 800);
47+
setFirstName(values.firstname);
48+
setEmail(values.email);
49+
setLastName(values.lastname);
50+
setOccupation(values.occupation);
51+
setOrg(values.org);
52+
} else {
53+
alert("Submission failed. Please try again.");
54+
}
5755
}}
5856
>
5957
<Form className="form" method="post">

src/components/CommonForm/index.js

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { useState, useEffect, useRef, forwardRef } from "react";
22
import Button from "../../reusecore/Button";
3-
import axios from "axios";
3+
import { useWebhookSubmit } from "../../utils/hooks/useWebhookSubmit";
44
import { Field, Form, Formik } from "formik";
55
import CommonFormWrapper from "./commonForm.style";
66
import { Container } from "../../reusecore/Layout";
@@ -12,6 +12,7 @@ const CommonForm = ({ form, title, submit_title, submit_body, submit_button_titl
1212
const [stepNumber, setStepNumber] = useState(0);
1313
const [memberFormOne, setMemberFormOne] = useState({});
1414
const [submit, setSubmit] = useState(false);
15+
const { submitForm } = useWebhookSubmit();
1516

1617
// Form values
1718
// const [validateAccounts, setValidateAccounts] = useState(false);
@@ -71,14 +72,6 @@ const CommonForm = ({ form, title, submit_title, submit_body, submit_button_titl
7172
return true;
7273
}
7374
};
74-
useEffect(() => {
75-
if (submit) {
76-
axios.post("https://hook.us1.make.com/nficb3d7swqkclkl467st4hp4cg65u8o", {
77-
memberFormOne,
78-
});
79-
}
80-
}, [submit, errorEmail, validateEmail, validateRole]);
81-
8275
return (
8376
<CommonFormWrapper>
8477
{
@@ -103,14 +96,19 @@ const CommonForm = ({ form, title, submit_title, submit_body, submit_button_titl
10396
role: role,
10497
form: form,
10598
}}
106-
onSubmit={values => {
99+
onSubmit={async (values) => {
107100
if (isValidRole(values.role) && isValidEmail(values.email)) {
108-
setMemberFormOne(values);
109-
setStepNumber(1);
110-
setSubmit(true);
111-
// window.scrollTo(0,window.scrollY - 800);
112-
// confirmationMessageRef.current.scrollIntoView({ behavior: 'smooth' })
113-
scrollElementIntoView(confirmationMessageRef.current, navBarOffset);
101+
const { success } = await submitForm({ memberFormOne: values });
102+
if (success) {
103+
setMemberFormOne(values);
104+
setStepNumber(1);
105+
setSubmit(true);
106+
// window.scrollTo(0,window.scrollY - 800);
107+
// confirmationMessageRef.current.scrollIntoView({ behavior: 'smooth' })
108+
scrollElementIntoView(confirmationMessageRef.current, navBarOffset);
109+
} else {
110+
alert("Submission failed. Please try again.");
111+
}
114112
} else {
115113
// if (!(values.google || values.github || values.twitter || values.linkedin)) {
116114
// setValidateAccounts(true);

src/components/ContactForm/index.js

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,14 @@
1-
import React, { useState, useEffect } from "react";
1+
import React, { useState } from "react";
22
import Button from "../../reusecore/Button";
3-
import axios from "axios";
3+
import { useWebhookSubmit } from "../../utils/hooks/useWebhookSubmit";
44
import { Field, Form, Formik } from "formik";
55
import logo from "../../assets/images/app/layer5.svg";
66
import ContactFormWrapper from "./contact-form.style";
77

88
const ContactForm = () => {
99
const [memberFormOne, setmemberFormOne] = useState({});
1010
const [submit, setSubmit] = useState(false);
11-
12-
useEffect(() => {
13-
if (submit) {
14-
// Webhook to handle all event forms and all signup forms, except for the community member form.
15-
axios.post("https://hook.us1.make.com/nficb3d7swqkclkl467st4hp4cg65u8o", {
16-
memberFormOne,
17-
});
18-
window.scrollTo(0, 700);
19-
}
20-
}, [submit]);
11+
const { submitForm } = useWebhookSubmit();
2112

2213
if (submit) {
2314
document.querySelector(".showForm").style.height = "20rem";
@@ -45,9 +36,15 @@ const ContactForm = () => {
4536
scope: "",
4637
form: "contact",
4738
}}
48-
onSubmit={(values) => {
49-
setmemberFormOne(values);
50-
setSubmit(true);
39+
onSubmit={async (values) => {
40+
const { success } = await submitForm({ memberFormOne: values });
41+
if (success) {
42+
setmemberFormOne(values);
43+
setSubmit(true);
44+
window.scrollTo(0, 700);
45+
} else {
46+
alert("Submission failed. Please try again.");
47+
}
5148
}}
5249
>
5350
<Form className="form" method="post">
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { useState } from 'react';
2+
import axios from 'axios';
3+
4+
export const useWebhookSubmit = () => {
5+
const [isSubmitting, setIsSubmitting] = useState(false);
6+
const [error, setError] = useState(null);
7+
8+
const submitForm = async (payload) => {
9+
setIsSubmitting(true);
10+
setError(null);
11+
try {
12+
const response = await axios.post("https://hook.us1.make.com/nficb3d7swqkclkl467st4hp4cg65u8o", payload);
13+
return { success: true, data: response.data };
14+
} catch (err) {
15+
setError(err.message || 'An error occurred during submission.');
16+
return { success: false, error: err };
17+
} finally {
18+
setIsSubmitting(false);
19+
}
20+
};
21+
22+
return { submitForm, isSubmitting, error };
23+
};

0 commit comments

Comments
 (0)