source: reactapp/src/App.js@ 6221ab6

main
Last change on this file since 6221ab6 was 6221ab6, checked in by unknown <mlviktor23@…>, 23 months ago

finished add post func. in react, fixed user dashboard details not loading upon login redirect

  • Property mode set to 100644
File size: 2.7 KB
RevLine 
[800779d]1import Professor from "./Pages/Professor";
2import SearchResults from "./Pages/SearchResults";
3import Login from "./Pages/Login";
[6eba109]4import { BrowserRouter, Routes, Route, Navigate } from "react-router-dom";
[800779d]5import Home from "./Pages/Home";
[702ca77]6import UserDashboard from "./Pages/UserDashboard";
[6eba109]7import { useEffect, useState, useMemo } from "react";
8import AuthApi from "./api/AuthApi";
9import Cookies from "js-cookie";
[6221ab6]10import axios from "./api/axios";
11import JSOG from "jsog";
[7cb8c3c]12
13export default function App() {
[6eba109]14 const [auth, setAuth] = useState(false);
[6221ab6]15 const [user, setUser] = useState(null);
16 const [userLoaded, setUserLoaded] = useState(false);
[6eba109]17 const variableAuth = useMemo(() => ({ auth, setAuth }), [auth]);
[702ca77]18 const [authLoaded, setAuthLoaded] = useState(false);
[6eba109]19
[6221ab6]20 const fetchUser = async () => {
21 try {
22 const response = await axios.get(
23 "http://192.168.0.19:8080/secure/currentUser",
24 { withCredentials: true }
25 );
26 var cyclicGraph = await response.data;
27 var jsogStructure = JSOG.encode(cyclicGraph);
28 cyclicGraph = JSOG.decode(jsogStructure);
29 setUser(cyclicGraph);
30 setUserLoaded(true);
31 } catch (error) {
32 console.log("Fetching error", error);
33 }
34 };
35
[702ca77]36 const readCookie = async () => {
[6eba109]37 const session = Cookies.get("JSESSIONID");
38 if (session) {
39 setAuth(true); // go stava true ako postoi takvo cookie (zasto auth=false na sekoe renderiranje)
[6221ab6]40 fetchUser();
[702ca77]41 } else {
42 setAuth(false);
[6eba109]43 }
[702ca77]44 setAuthLoaded(true);
[6eba109]45 };
46
47 useEffect(() => {
48 readCookie();
49 }, []);
50
51 const ProtectedRoute = ({ auth, children }) => {
[702ca77]52 if (authLoaded) {
53 if (!auth) {
54 return <Navigate to="/login" replace />;
55 }
56 return children;
57 } else {
58 return <div>се вчитува cookie...</div>;
[6eba109]59 }
60 };
61
[7cb8c3c]62 return (
[6eba109]63 <AuthApi.Provider value={variableAuth}>
64 <BrowserRouter>
65 <Routes>
[6221ab6]66 <Route
67 path="/"
68 element={<Home user={user} userLoaded={userLoaded} />}
69 >
[6eba109]70 <Route path="login" element={<Login />}></Route>
71 <Route path="professor">
[6221ab6]72 <Route
73 path=":professorId"
74 element={<Professor user={user} userLoaded={userLoaded} />}
75 />
[6eba109]76 </Route>
77 <Route path="search" element={<SearchResults />}></Route>
78 <Route
[702ca77]79 path="user_dashboard"
[6eba109]80 element={
81 <ProtectedRoute auth={auth}>
[6221ab6]82 {<UserDashboard user={user} userLoaded={userLoaded} />}
[6eba109]83 </ProtectedRoute>
84 }
85 ></Route>
[800779d]86 </Route>
[6eba109]87 </Routes>
88 </BrowserRouter>
89 </AuthApi.Provider>
[7cb8c3c]90 );
[2998dc4]91}
Note: See TracBrowser for help on using the repository browser.