From 8d0b32f8dfe45291426e58f6bf20cffac8dab6e7 Mon Sep 17 00:00:00 2001 From: Joseph Ditton Date: Tue, 23 Nov 2021 14:04:12 -0700 Subject: adds api, guard, tailwind --- client/components/common/button.jsx | 7 ++++ client/components/common/input.jsx | 3 ++ client/components/common/paper.jsx | 3 ++ client/components/home/_home.jsx | 31 +++++++++++----- client/components/router.jsx | 8 ++--- client/components/sign_in/_sign_in.jsx | 48 ++++++++++++------------- client/components/sign_up/_sign_up.jsx | 66 ++++++++++++++++------------------ 7 files changed, 92 insertions(+), 74 deletions(-) create mode 100644 client/components/common/button.jsx create mode 100644 client/components/common/input.jsx create mode 100644 client/components/common/paper.jsx (limited to 'client/components') diff --git a/client/components/common/button.jsx b/client/components/common/button.jsx new file mode 100644 index 0000000..1e8719a --- /dev/null +++ b/client/components/common/button.jsx @@ -0,0 +1,7 @@ +export const Button = ({ children, ...other }) => { + return ( + + ); +}; diff --git a/client/components/common/input.jsx b/client/components/common/input.jsx new file mode 100644 index 0000000..aa38216 --- /dev/null +++ b/client/components/common/input.jsx @@ -0,0 +1,3 @@ +export const Input = (props) => { + return ; +}; diff --git a/client/components/common/paper.jsx b/client/components/common/paper.jsx new file mode 100644 index 0000000..9e64c8b --- /dev/null +++ b/client/components/common/paper.jsx @@ -0,0 +1,3 @@ +export const Paper = ({ children }) => { + return
{children}
; +}; diff --git a/client/components/home/_home.jsx b/client/components/home/_home.jsx index 02ebe38..00a7ab3 100644 --- a/client/components/home/_home.jsx +++ b/client/components/home/_home.jsx @@ -1,20 +1,33 @@ -import { useContext } from 'react'; -import { SettingsContext } from '../../utils/settings_context'; +import { useContext, useEffect, useState } from 'react'; +import { ApiContext } from '../../utils/api_context'; +import { AuthContext } from '../../utils/auth_context'; export const Home = () => { - const [, dispatch] = useContext(SettingsContext); + const [, setAuthToken] = useContext(AuthContext); + const api = useContext(ApiContext); + + const [loading, setLoading] = useState(true); + const [user, setUser] = useState(null); + useEffect(async () => { + const res = await api.get('/users/me'); + setUser(res.user); + setLoading(false); + }, []); + const logout = async () => { - const res = await fetch('/sessions', { - method: 'DELETE', - }); - if (res.status === 200) { - dispatch({ type: 'update', payload: { jwt: undefined } }); + const res = await api.del('/sessions'); + if (res.success) { + setAuthToken(null); } }; + if (loading) { + return
Loading...
; + } + return (
-

Welcome

+

Welcome {user.name}

diff --git a/client/components/router.jsx b/client/components/router.jsx index 59ea7c3..fa552fc 100644 --- a/client/components/router.jsx +++ b/client/components/router.jsx @@ -1,18 +1,18 @@ import { useContext } from 'react'; import { Routes, Route, Navigate } from 'react-router-dom'; import { Home } from './home/_home'; -import { SettingsContext } from '../utils/settings_context'; +import { AuthContext } from '../utils/auth_context'; import { SignIn } from './sign_in/_sign_in'; import { SignUp } from './sign_up/_sign_up'; export const Router = () => { - const [settings] = useContext(SettingsContext); - const { jwt } = settings; + const [authToken] = useContext(AuthContext); + return ( : } // no jwt means not logged in + element={authToken ? : } // no jwt means not logged in /> } /> } /> diff --git a/client/components/sign_in/_sign_in.jsx b/client/components/sign_in/_sign_in.jsx index a6e802c..295a7c9 100644 --- a/client/components/sign_in/_sign_in.jsx +++ b/client/components/sign_in/_sign_in.jsx @@ -1,9 +1,12 @@ import { useContext, useState } from 'react'; import { useNavigate } from 'react-router'; -import { SettingsContext } from '../../utils/settings_context'; +import { AuthContext } from '../../utils/auth_context'; +import { Paper } from '../common/paper'; +import { Input } from '../common/input'; +import { Button } from '../common/button'; export const SignIn = () => { - const [, dispatch] = useContext(SettingsContext); + const [, setAuthToken] = useContext(AuthContext); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const navigate = useNavigate(); @@ -25,7 +28,7 @@ export const SignIn = () => { }); if (res.status === 201) { const result = await res.json(); - dispatch({ type: 'update', payload: { jwt: result.token } }); + setAuthToken(result.token); navigate('/'); } else { console.error('An issue occurred when logging in.'); @@ -33,28 +36,23 @@ export const SignIn = () => { }; return ( -
-
Email
- setEmail(e.target.value)} - /> -
Password
- setPassword(e.target.value)} - /> -
- -
-
- +
+
+ +
Email
+ setEmail(e.target.value)} /> +
Password
+ setPassword(e.target.value)} /> +
+ +
+ +
+
); diff --git a/client/components/sign_up/_sign_up.jsx b/client/components/sign_up/_sign_up.jsx index 13ac6c7..c5d0dcd 100644 --- a/client/components/sign_up/_sign_up.jsx +++ b/client/components/sign_up/_sign_up.jsx @@ -1,9 +1,12 @@ import { useContext, useState } from 'react'; import { useNavigate } from 'react-router'; -import { SettingsContext } from '../../utils/settings_context'; +import { AuthContext } from '../../utils/auth_context'; +import { Paper } from '../common/paper'; +import { Input } from '../common/input'; +import { Button } from '../common/button'; export const SignUp = () => { - const [, dispatch] = useContext(SettingsContext); + const [, setAuthToken] = useContext(AuthContext); const navigate = useNavigate(); const [name, setName] = useState(''); const [email, setEmail] = useState(''); @@ -46,45 +49,36 @@ export const SignUp = () => { }); if (res.status === 201) { const result = await res.json(); - dispatch({ type: 'update', payload: { jwt: result.token } }); + setAuthToken(result.token); navigate('/'); } }; return ( -
-
Name
- setName(e.target.value)} - /> -
Email
- setEmail(e.target.value)} - /> -
Confirm Email
- setEmailConfirmation(e.target.value)} - /> -
Password
- setPassword(e.target.value)} - /> -
Confirm Password
- setPasswordConfirmation(e.target.value)} - /> -
- +
+
+ +
Name
+ setName(e.target.value)} /> +
Email
+ setEmail(e.target.value)} /> +
Confirm Email
+ setEmailConfirmation(e.target.value)} /> +
Password
+ setPassword(e.target.value)} /> +
Confirm Password
+ setPasswordConfirmation(e.target.value)} + /> +
+ +
+
{errorMessage}
+
); -- cgit v1.2.3-70-g09d2