From e9d1901193c0d93c42330f3262da4d47a9cc091c Mon Sep 17 00:00:00 2001 From: Sean S Date: Fri, 13 Dec 2024 09:25:35 -0500 Subject: [PATCH] product page and start of a login page --- src/app/register/page.tsx | 118 +++++++++++++++++++++++ src/app/sign-up/page.tsx | 10 -- src/components/Navbar/index.tsx | 4 +- src/pages/{register.tsx => register.old} | 0 4 files changed, 120 insertions(+), 12 deletions(-) create mode 100644 src/app/register/page.tsx delete mode 100644 src/app/sign-up/page.tsx rename src/pages/{register.tsx => register.old} (100%) diff --git a/src/app/register/page.tsx b/src/app/register/page.tsx new file mode 100644 index 0000000..b7be357 --- /dev/null +++ b/src/app/register/page.tsx @@ -0,0 +1,118 @@ +'use client'; +import React, { useState } from 'react'; +import { useRouter } from 'next/navigation'; + +export default function SignupPage() { + const router = useRouter(); + const [formData, setFormData] = useState({ + name: '', + email: '', + password: '', + confirmPassword: '' + }); + const [error, setError] = useState(''); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + setError(''); + + if (formData.password !== formData.confirmPassword) { + setError('Passwords do not match'); + return; + } + + try { + const response = await fetch('/api/auth/signup', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + name: formData.name, + email: formData.email, + password: formData.password, + }), + }); + + if (response.ok) { + router.push('/login'); + } else { + const data = await response.json(); + setError(data.error || 'Something went wrong'); + } + } catch (err) { + setError('Failed to create account'); + } + }; + + return ( +
+
+
+ {error && ( +
{error}
+ )} + +
+
+

Sign Up

+

Create an account to get started building.

+
+ + setFormData({...formData, name: e.target.value})} + /> +
+ +
+ + setFormData({...formData, email: e.target.value})} + /> +
+ +
+ + setFormData({...formData, password: e.target.value})} + /> +
+ +
+ + setFormData({...formData, confirmPassword: e.target.value})} + /> +
+ + +
+
OR
+ +
+
+ ); +} \ No newline at end of file diff --git a/src/app/sign-up/page.tsx b/src/app/sign-up/page.tsx deleted file mode 100644 index 84c8607..0000000 --- a/src/app/sign-up/page.tsx +++ /dev/null @@ -1,10 +0,0 @@ - -import { ChakraProvider } from "@chakra-ui/react"; - -export default function SignUp() { - return ( -
- Sign Up info goes here -
- ); -} \ No newline at end of file diff --git a/src/components/Navbar/index.tsx b/src/components/Navbar/index.tsx index 835ede1..241a36b 100644 --- a/src/components/Navbar/index.tsx +++ b/src/components/Navbar/index.tsx @@ -43,8 +43,8 @@ export default function Navbar() { */}
-
-

Ballistics Builder

+
+

Ballistics Builder

{/*
diff --git a/src/pages/register.tsx b/src/pages/register.old similarity index 100% rename from src/pages/register.tsx rename to src/pages/register.old