Skip to content
Snippets Groups Projects
Commit 525e7511 authored by Matt Kirby's avatar Matt Kirby
Browse files

Added functionality to signin and register pages

parent 6fdc64b3
No related branches found
No related tags found
No related merge requests found
import BasicField from "@/components/form/basicField"; import BasicField from "@/components/form/basicField";
import { useState } from "react"; import { FormEvent, useState } from "react";
import Router from 'next/router'
const Register = () => { const Register = () => {
const [username, setUsername] = useState<string>(""); const [username, setUsername] = useState<string>("");
const [email, setEmail] = useState<string>(""); const [email, setEmail] = useState<string>("");
const [password, setPassword] = useState<string>(""); const [password, setPassword] = useState<string>("");
const [passwordConfirmation, setPasswordConfirmation] = useState<string>(""); const [passwordConfirmation, setPasswordConfirmation] = useState<string>("");
const [error, setError] = useState<string>("");
const handleSubmit = async (event) => { const handleSubmit = async (event: FormEvent) => {
event.preventDefault() event.preventDefault()
const JSONdata = JSON.stringify({ const JSONdata = JSON.stringify({
...@@ -16,7 +18,7 @@ const Register = () => { ...@@ -16,7 +18,7 @@ const Register = () => {
password: password, password: password,
profile: "" profile: ""
}) })
const endpoint = '/api/form' const endpoint = `${process.env.NEXT_PUBLIC_USER_SERVICE_URL}api/register`
const options = { const options = {
method: 'POST', method: 'POST',
headers: { headers: {
...@@ -26,7 +28,14 @@ const Register = () => { ...@@ -26,7 +28,14 @@ const Register = () => {
} }
const response = await fetch(endpoint, options) const response = await fetch(endpoint, options)
const result = await response.json() const result = await response.json()
alert(`Success: ${result.data}`)
console.log(result.error)
if(result.error !== undefined){
setError(result.error.error)
} else {
Router.push("/feed")
}
} }
return ( return (
...@@ -44,7 +53,7 @@ const Register = () => { ...@@ -44,7 +53,7 @@ const Register = () => {
</a> </a>
</p> </p>
<form className="mt-8 space-y-6" action="#" method="POST"> <form className="mt-8 space-y-6" onSubmit={(e) => handleSubmit(e)}>
<input type="hidden" name="remember" defaultValue="true" /> <input type="hidden" name="remember" defaultValue="true" />
<div className="rounded-md shadow-sm"> <div className="rounded-md shadow-sm">
<BasicField name="username" placeholder="Username" onChange={setUsername}/> <BasicField name="username" placeholder="Username" onChange={setUsername}/>
...@@ -53,9 +62,12 @@ const Register = () => { ...@@ -53,9 +62,12 @@ const Register = () => {
<BasicField name="password" placeholder="Confirm Password" onChange={setPasswordConfirmation} error={password === passwordConfirmation ? null : "Confirmation doesn't match"}/> <BasicField name="password" placeholder="Confirm Password" onChange={setPasswordConfirmation} error={password === passwordConfirmation ? null : "Confirmation doesn't match"}/>
</div> </div>
<div> <div>
<p className="text-xs text-c-pink m-2">
{error}
</p>
<button <button
type="submit" type="submit"
className="group relative flex w-full justify-center rounded-md bg-c-pink px-3 py-2 text-sm font-semibold text-white hover:bg-white hover:text-c-pink hover:border-c-pink focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-c-pink" className="group relative flex w-full justify-center rounded-md bg-c-pink px-3 py-2 text-sm font-semibold text-white hover:bg-c-pink hover:text-c-green hover:border-c-pink focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-c-pink"
> >
Sign in Sign in
</button> </button>
......
import Router from 'next/router'
import { FormEvent, useState } from 'react';
const SignIn = () => { const SignIn = () => {
const [error, setError] = useState<string>("");
const [username, setUsername] = useState<string>("");
const [password, setPassword] = useState<string>("");
const handleSubmit = async (event: FormEvent) => {
event.preventDefault()
const JSONdata = JSON.stringify({
username: username,
password: password
})
const endpoint = `${process.env.NEXT_PUBLIC_USER_SERVICE_URL}api/login`
const options = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSONdata,
}
const response = await fetch(endpoint, options)
const result = await response.json()
console.log(result.error)
if(result.error !== undefined){
setError(result.error)
} else {
Router.push("/feed")
}
}
return ( return (
<> <>
<div className="flex min-h-full items-center justify-center px-4 py-12 sm:px-6 lg:px-8"> <div className="flex min-h-full items-center justify-center px-4 py-12 sm:px-6 lg:px-8">
...@@ -14,21 +48,22 @@ const SignIn = () => { ...@@ -14,21 +48,22 @@ const SignIn = () => {
</a> </a>
</p> </p>
</div> </div>
<form className="mt-8 space-y-6" action="#" method="POST"> <form className="mt-8 space-y-6" onSubmit={(e) => handleSubmit(e)}>
<input type="hidden" name="remember" defaultValue="true" /> <input type="hidden" name="remember" defaultValue="true" />
<div className="-space-y-px rounded-md shadow-sm"> <div className="-space-y-px rounded-md shadow-sm">
<div> <div>
<label htmlFor="email-address" className="sr-only"> <label htmlFor="username" className="sr-only">
Email address Email address
</label> </label>
<input <input
id="email-address" id="username"
name="email" name="username"
type="email" type="text"
autoComplete="email" autoComplete="username"
required required
className="relative block w-full rounded-t-md border-0 py-1.5 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:z-10 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6" className="relative block w-full rounded-t-md border-0 py-1.5 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:z-10 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6"
placeholder="Email address" placeholder="Username"
onChange={(e) => setUsername(e.target.value)}
/> />
</div> </div>
<div> <div>
...@@ -43,6 +78,7 @@ const SignIn = () => { ...@@ -43,6 +78,7 @@ const SignIn = () => {
required required
className="relative block w-full rounded-b-md border-0 py-1.5 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:z-10 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6" className="relative block w-full rounded-b-md border-0 py-1.5 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:z-10 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6"
placeholder="Password" placeholder="Password"
onChange={(e) => setPassword(e.target.value)}
/> />
</div> </div>
</div> </div>
...@@ -68,6 +104,9 @@ const SignIn = () => { ...@@ -68,6 +104,9 @@ const SignIn = () => {
</div> </div>
<div> <div>
<p className='text-xs text-c-pink m-2'>
{error}
</p>
<button <button
type="submit" type="submit"
className="group relative flex w-full justify-center rounded-md bg-c-pink px-3 py-2 text-sm font-semibold text-white hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600" className="group relative flex w-full justify-center rounded-md bg-c-pink px-3 py-2 text-sm font-semibold text-white hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment