source: reactapp/src/App.js@ 8d83180

main
Last change on this file since 8d83180 was 8d83180, checked in by unknown <mlviktor23@…>, 2 years ago

forums/page nav

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