From 37344e361569517f29312f7cd2da74ee89a0fff9 Mon Sep 17 00:00:00 2001 From: Jeff Date: Thu, 4 Apr 2024 21:29:02 -0400 Subject: feat: Create component for handling form building (sign in, sign up, reset password, etc) --- components/flexibleForm.js | 92 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 components/flexibleForm.js (limited to 'components/flexibleForm.js') diff --git a/components/flexibleForm.js b/components/flexibleForm.js new file mode 100644 index 0000000..f31dabe --- /dev/null +++ b/components/flexibleForm.js @@ -0,0 +1,92 @@ +import React from 'react'; +import Container from "./container"; +import Image from 'next/image'; +import { useRouter } from "next/router"; + +const FlexibleForm = ({ imgPos, data, route}) => { + const router = useRouter(); + + const handleSubmit = async (event) => { + event.preventDefault(); + + try { + await new Promise((resolve) => setTimeout(resolve, 1000)); + router.push(route); + } catch (error) { + console.error('Form submission error', error); + } + } + const renderImage = ( + + ); + + const renderForm = ( +
+
+
+

+ {data.title} +

+

+ {data.subtitle} +

+
+
+
+ {data.formFields.map((field, index) => ( +
+ +
+ +
+
+ ))} +
+ +
+
+ {data.underneathButton && ( +
+ {data.underneathButton.text} +
+ )} + {data.ctaLink && ( +

+ {data.ctaLink.text} {data.ctaLink.linkText} +

+ )} +
+
+
+ ); + + return ( + + {imgPos === "left" ? renderImage : renderForm} + {imgPos === "left" ? renderForm : renderImage} + + ); +}; + +export default FlexibleForm; -- cgit v1.2.3-70-g09d2 From 102324996e227e1e9bf70a1641afb7b438d56276 Mon Sep 17 00:00:00 2001 From: Jeff Date: Sun, 7 Apr 2024 00:59:23 -0400 Subject: feat: Implement form submit API request functionality --- components/flexibleForm.js | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'components/flexibleForm.js') diff --git a/components/flexibleForm.js b/components/flexibleForm.js index f31dabe..22a907f 100644 --- a/components/flexibleForm.js +++ b/components/flexibleForm.js @@ -8,14 +8,31 @@ const FlexibleForm = ({ imgPos, data, route}) => { const handleSubmit = async (event) => { event.preventDefault(); + const formData = new FormData(event.target); try { - await new Promise((resolve) => setTimeout(resolve, 1000)); - router.push(route); + const response = await fetch(data.formAction, { + method: data.formMethod, + body: JSON.stringify(Object.fromEntries(formData)), + headers: { + 'Content-Type': 'application/json' + }, + }); + + if (!response.ok) { + throw new Error(response.text()); + } + + console.log('Form submitted successfully'); + if (route) { + router.push(route); + } } catch (error) { - console.error('Form submission error', error); + console.error('Error submitting form:', error); } } + + const renderImage = (