From 378d00b220d20b586ca16ce0846b0dab57e667dd Mon Sep 17 00:00:00 2001 From: jwu-fisker Date: Tue, 5 Jan 2021 17:30:55 -0800 Subject: [PATCH] Add Contexts --- src/components/contexts/FileUploadContext.jsx | 30 ++--- src/components/contexts/UserContext.jsx | 111 ++++++++++++++---- 2 files changed, 103 insertions(+), 38 deletions(-) diff --git a/src/components/contexts/FileUploadContext.jsx b/src/components/contexts/FileUploadContext.jsx index 9339657..520f2e0 100644 --- a/src/components/contexts/FileUploadContext.jsx +++ b/src/components/contexts/FileUploadContext.jsx @@ -3,23 +3,23 @@ import React, { useContext, useEffect, useState } from 'react'; const FileUploadContext = React.createContext(); export const FileUploadProvider = ({ children }) => { - const [file, setFile] = useState(null); - const [uploading, setUploading] = useState(false); - const [progress, setProgress] = useState(0); - - const upload = (file) => { + const [file, setFile] = useState(null); + const [uploading, setUploading] = useState(false); + const [progress, setProgress] = useState(0); - }; + const upload = (file) => { - return ( - - {children} - - ); + }; + + return ( + + {children} + + ); }; export const useFileUploadContext = () => useContext(FileUploadContext); diff --git a/src/components/contexts/UserContext.jsx b/src/components/contexts/UserContext.jsx index 90148d9..f9b2292 100644 --- a/src/components/contexts/UserContext.jsx +++ b/src/components/contexts/UserContext.jsx @@ -1,35 +1,100 @@ import React, { useContext, useEffect, useState } from 'react'; +const AUTH_URL = 'https://dev-auth.fiskerdps.com'; const UserContext = React.createContext(); export const UserProvider = ({ children }) => { - const [signedIn, setSignedIn] = useState(false); - const [user, setUser] = useState(null); - const [token, setToken] = useState(null); - const [signInError, setSignInError] = useState(null); - const [signUpError, setSignUpError] = useState(null); + const [fetching, setFetching] = useState(false); + const [signedIn, setSignedIn] = useState(false); + const [user, setUser] = useState(null); + const [token, setToken] = useState(null); + const [error, setError] = useState(null); - const signIn = (email, password) => { + const signIn = (username, password) => { + if (!username) throw new Error('Email is required'); + if (!password) throw new Error('Password is required'); + setFetching(true); + setError(null); + return fetch(`${AUTH_URL}/auth/login`, { + method: "POST", + mode: "no-cors", + headers: { + "Content-Type":"text/plain" + }, + body: JSON.stringify({ + username, + password, + }) + }) + .then((response) => { + debugger; + return response.json(); + }) + .then((result) => { + debugger; + setFetching(false); + if (result.error) setError(result.error); + return result; + }) + .catch((error) => { + setError(error.message); + setFetching(false); + return null; + }); + }; - }; - - const signUp = (email, password, confirmPassword) => { + const signUp = (username, password, confirmPassword) => { + if (!username) throw new Error('Email is required'); + if (!password) throw new Error('Password is required'); + if (password !== confirmPassword) throw new Error('Passwords do not match'); + setFetching(true); + setError(null); + return fetch(`${AUTH_URL}/auth/register`, { + method: "POST", + mode: "cors", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + username, + password, + }) + }) + .then((response) => { + debugger; + return response.json(); + }) + .then((result) => { + if (result.error) setError(result.error); + setFetching(false); + return result; + }) + .catch((error) => { + setError(error.message); + setFetching(false); + return null; + }); + }; - }; + const signOut = async () => { + setUser(null); + }; - return ( - - {children} - - ); + return ( + + {children} + + ); }; export const useUserContext = () => useContext(UserContext);