import { useEffect } from 'react' import { useAppSelector } from './hooks' import { Navigate, Route, Routes } from 'react-router-dom' import { AuthController } from './controllers' import { MainLayout } from './layouts/Main' import { appPrivateRoutes, appPublicRoutes } from './routes' import './App.scss' import { privateRoutes, publicRoutes, recursiveRouteRenderer } from './routes/util' const App = () => { const authState = useAppSelector((state) => state.auth) useEffect(() => { if (window.location.hostname === '0.0.0.0') { // A change of the host is needed to make library available in windows object // the app can't encrypt files without the crypto library // which is only available on https or localhost window.location.hostname = 'localhost' } const authController = new AuthController() authController.checkSession() }, []) const handleRootRedirect = () => { if (authState.loggedIn) return appPrivateRoutes.homePage const callbackPathEncoded = btoa( window.location.href.split(`${window.location.origin}/#`)[1] ) return `${appPublicRoutes.login}?callbackPath=${callbackPathEncoded}` } // Hide route only if loggedIn and r.hiddenWhenLoggedIn are both true const publicRoutesList = recursiveRouteRenderer(publicRoutes, (r) => { return !authState.loggedIn || !r.hiddenWhenLoggedIn }) const privateRouteList = recursiveRouteRenderer(privateRoutes) return ( }> {authState?.loggedIn && privateRouteList} {publicRoutesList} } /> ) } export default App