From 33d1d72d5e7f2e8e7f846bbf8651d7f128765c64 Mon Sep 17 00:00:00 2001 From: Paweł Bernaciak Date: Fri, 27 Oct 2023 16:09:31 +0200 Subject: New frontend project --- frontend/src/App.tsx | 130 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 83 insertions(+), 47 deletions(-) (limited to 'frontend/src/App.tsx') diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 996a794..7aae66c 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,58 +1,94 @@ -import React from 'react'; import { CredentialResponse, GoogleLogin } from '@react-oauth/google'; +import { FC, useEffect, useState } from 'react'; +import { LoginRequest, LoginResponse, User } from './types'; +import ElementList from './components/ElementList'; -interface LoginResponse { - id: number -} +const App: FC = () => { + const [user, setUser] = useState(undefined); -interface User { - id: Number, - elements: Element[], -} + useEffect(() => { + const userString = localStorage.getItem('user'); + if (userString == null) { + return; + } -interface Element { - id: Number, - userId: Number, - name: string, - state: ElementState, -} + setUser(JSON.parse(userString)); + }, []); -enum ElementState { - HasColor, - HasIcon, -} + const login = async (credentials: CredentialResponse) => { + if (credentials.credential == null) { + console.log('Error getting credentials from google'); + return; + } -function App() { - const responseMessage = async (googleResponse: CredentialResponse) => { - console.log(googleResponse); - const url: string = "/auth/login"; - const body = { - "googleToken": googleResponse.credential - }; - - const response = await fetch(url, { - method: "POST", - credentials: "include", - mode: "cors", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify(body), - }); - if (!response.ok) { - console.log("Backend conection problem"); - return; - } - - const user = await response.json() as LoginResponse; - console.log(user); + // Authenticate with API and get user ID + const loginRequest: LoginRequest = { + googleToken: credentials.credential, }; + const loginResponse = await fetch('/api/auth/login', { + method: 'POST', + credentials: 'include', + mode: 'cors', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(loginRequest), + }); + if (!loginResponse.ok) { + console.log('Error connecting to API. Code: ', loginResponse.status); + return; + } + const userLoginResponse: LoginResponse = await loginResponse.json(); + + //Get info about user using ID + const userInfoResponse = await fetch(`/api/user/${userLoginResponse.id}`, { + credentials: 'include', + }); + if (!userInfoResponse.ok) { + console.log('Error connecting to API. Code: ', userInfoResponse.status); + return; + } + const userResponse: User = await userInfoResponse.json(); + + localStorage.setItem('user', JSON.stringify(userResponse)); + setUser(userResponse); + }; + + const logout = async (e: React.MouseEvent) => { + e.preventDefault(); + + const response = await fetch('api/auth/logout', { + method: 'POST', + credentials: 'include', + }); + if (response.status != 200) { + console.log('Error logging out. Code: ', response.status); + return; + } + + localStorage.removeItem('user'); + setUser(undefined); + }; - return ( -
- -
- ); + return ( +
+
+ {user ? ( + <> +

Hello {user.name}

+ + Logout + + + ) : ( + + )} +
+ +
+ ); } export default App; -- cgit v1.2.3