diff --git a/pages/auth/signin2.js b/pages/auth/signin2.js new file mode 100644 index 00000000..86458778 --- /dev/null +++ b/pages/auth/signin2.js @@ -0,0 +1,235 @@ +import { getCsrfToken } from "next-auth/react"; +import useTranslation from "next-translate/useTranslation"; +import Head from "next/head"; +import Breadcrumbs from "../../components/breadcrumbs"; +import CookieBanner from "../../components/cookieBanner"; +import Footer from "../../components/footer"; +import Header from "../../components/header"; +import ServiceBanner from "../../components/servicebanner"; +import { useRouter } from "next/router"; +import { useState, useEffect } from "react"; + +const SignIn = (props) => { + let { t, lang } = useTranslation(); + + const router = useRouter(); + const { query } = router; + + const { footerLinks, pages, csrfToken, callbackUrl } = props; + + const [formData, setFormData] = useState({ + email: query.email || "", + callbackUrl: "", + csrfToken: "", + }); + + const [submitForm, setSubmitForm] = useState(false); + const [buttonDisabled, setButtonDisabled] = useState(false); + const [response, setResponse] = useState(null); + + const handleInputChange = (e) => { + const { name, value } = e.target; + setFormData((prevState) => ({ ...prevState, [name]: value })); + }; + + // useEffect(() => { + // // Populate form fields if query params exist + // if (query.email) + // setFormData((prev) => ({ ...prev, email: query.email })); + + // if (query.email) { + // handleSubmit(); // Trigger the form submission + // } + // }, [query]); + + // const handleSubmit = async () => { + // setButtonDisabled(true); // Disable the submit button to avoid multiple submissions + + // // Wait a short moment before programmatically submitting the form + // setTimeout(() => { + // const form = document.getElementById("signin-form"); // Get form by ID + // if (form) { + // form.submit(); // Submit the form + // } + // }, 500); // Short delay to ensure form is populated before submission + // }; + + const handleSubmit = async (event) => { + event.preventDefault(); + setButtonDisabled(true); // Disable the submit button to avoid multiple submissions + + try { + const res = await fetch("/api/auth/signin/emailAPI", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(formData), + }); + + const data = await res.json(); + setResponse(data); // Update response state + } catch (error) { + console.error("Error submitting the form:", error); + } + }; + + // Trigger form submission automatically when data is ready + useEffect(() => { + // Check if email exists and form data is populated + if (query.email && !response) { + setFormData((prevState) => ({ + ...prevState, + csrfToken: csrfToken, + callbackUrl: callbackUrl || prevState.callbackUrl, // Ensure callback URL is set + })); + } + }, [query.email, csrfToken, callbackUrl, response]); + + useEffect(() => { + // Automatically submit the form when data is ready + if (formData.email && formData.csrfToken && !response) { + handleSubmit(new Event("submit")); + } + }, [formData, response]); + + // Handle redirection after form submission based on response + useEffect(() => { + if (response && response.url) { + // Redirect to the URL in the response + router.push(response.url); + } + }, [response, router]); + + return ( +