diff --git a/src/App.jsx b/src/App.jsx index fd91dbec..d7598f82 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -8,7 +8,7 @@ import { useLocation, } from "react-router-dom"; import theme from "./theme"; -import PropTypes from 'prop-types'; +import PropTypes from "prop-types"; import Header from "./components/Header"; import Footer from "./components/Footer"; import Login from "./components/Auth/Login"; @@ -27,8 +27,10 @@ import TermActivity from "./components/term_activity/TermActivity"; import OrganizationsCurieEditor from "./components/CurieEditor/OrganizationCurieEditor"; import { handleOrcidLogin } from "./api/endpoints"; import { GlobalDataContext } from "./contexts/DataContext"; -import { useCookies } from 'react-cookie' import { API_CONFIG } from "./config"; +import { requestUserSettings } from "./components/Auth/utils"; +import { useCookies } from 'react-cookie'; + const PageContainer = ({ children }) => { return ( @@ -39,29 +41,37 @@ const PageContainer = ({ children }) => { }; function MainContent() { - const [cookies] = useCookies(['session']) - const cookiesInfo = JSON.parse(localStorage.getItem(API_CONFIG.SESSION_DATA.COOKIE)); - const { user, setUserData } = useContext(GlobalDataContext); - // check if cookie is expired - if (!user) { - const sessionCookie = cookies.session; - const expires = new Date(cookiesInfo?.expires); - const today = new Date(); - if (sessionCookie === cookiesInfo?.value && expires > today) { - const userData = JSON.parse(localStorage.getItem(API_CONFIG.SESSION_DATA.SETTINGS)); - setUserData({ - name: userData['groupname'], - id: userData['orcid'], - email: userData?.emails[0]?.email, - role: userData['own-role'], - groupname: userData['groupname'], - settings: userData - }); - } else { - setUserData({}); - } - } + const { setUserData } = useContext(GlobalDataContext); + // eslint-disable-next-line no-unused-vars + const [existingCookies, setCookie, removeCookie] = useCookies(['session']); + + useEffect(() => { + (async () => { + const userSettings = JSON.parse( + localStorage.getItem(API_CONFIG.SESSION_DATA.SETTINGS) + ); + if (userSettings) { + try { + const userData = await requestUserSettings(userSettings?.groupname); + setUserData({ + name: userData["groupname"], + id: userData["orcid"], + email: userData?.emails[0]?.email, + role: userData["own-role"], + groupname: userData["groupname"], + settings: userData, + }); + } catch (error) { + console.error("Error fetching user settings:", error); + localStorage.removeItem(API_CONFIG.SESSION_DATA.SETTINGS); + localStorage.removeItem(API_CONFIG.SESSION_DATA.COOKIE); + removeCookie("session", { path: "/" }); + } + } + })(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); return ( } /> } /> } /> - } /> - } /> + + + + } + /> + + + + } + /> @@ -149,13 +173,15 @@ const Layout = ({ children }) => { useEffect(() => { const params = new URLSearchParams(location.search); const code = params.get("code"); - if (code) {(async () => { - try { - const response = await handleOrcidLogin(code); - localStorage.setItem("token", response.token); - } catch (error) { - console.log("error: ", error) - }})(); + if (code) { + (async () => { + try { + const response = await handleOrcidLogin(code); + localStorage.setItem("token", response.token); + } catch (error) { + console.log("error: ", error); + } + })(); } }, [location]); @@ -177,7 +203,6 @@ const Layout = ({ children }) => { }; function App() { - return ( diff --git a/src/components/Header/index.jsx b/src/components/Header/index.jsx index d5a13c24..538daf69 100644 --- a/src/components/Header/index.jsx +++ b/src/components/Header/index.jsx @@ -322,7 +322,7 @@ const Header = () => { - + navigate("/")} style={{ cursor: 'pointer' }}> Interlex