import React, { useEffect } from "react"; import { Routes, Route, Navigate, useNavigate } from "react-router-dom"; import { Helmet, HelmetProvider, HtmlProps } from "react-helmet-async"; import { ToastContainer } from "react-toastify"; import { useTranslation } from "react-i18next"; import config from "./config.json"; import authentication from "./modules/frame/services/authenticationService"; import ForgotPassword from "./modules/frame/components/ForgotPassword"; import NotFound from "./modules/frame/components/NotFound"; import Logout from "./modules/frame/components/Logout"; import LoginForm from "./modules/frame/components/LoginForm"; import Redirect from "./components/common/Redirect"; import Mainframe from "./modules/frame/components/Mainframe"; import EmailUserAction from "./modules/frame/components/EmailUserAction"; import HomePage from "./modules/homepage/HomePage"; import Profile from "./modules/profile/Profile"; import EnvPage from "./modules/homepage/Env"; import Sequence from "./modules/manager/sequence/sequence"; import HOCSequenceDetails from "./modules/manager/sequence/SequenceDetails"; import CustomFields from "./modules/manager/customfields/customFields"; import HOCCustomFieldDetails from "./modules/manager/customfields/customFieldDetails"; import Forms from "./modules/manager/forms/Forms"; import HOCFormsDetails from "./modules/manager/forms/FormsDetails"; import HOCGlossaries from "./modules/manager/glossary/Glossary"; import HOCGlossariesDetails from "./modules/manager/glossary/GlossariesDetails"; import HOCAudit from "./modules/audit/audit"; import Domains from "./modules/manager/domains/Domains"; import DomainsDetails from "./modules/manager/domains/DomainsDetails"; import Users from "./modules/manager/users/users"; import UserDetails from "./modules/manager/users/UserDetails"; import RolesDetails from "./modules/manager/domains/components/RolesDetails"; import AddUserToRole from "./modules/manager/domains/components/AddUserToRole"; import LoginFrame from "./modules/frame/components/loginFrame"; import theme from "./utils/theme"; import Organisations from "./modules/manager/organisations/Organisations"; import HOCOrganisationsDetails from "./modules/manager/organisations/OrganisationsDetails"; import Sites from "./modules/manager/sites/Sites"; import SiteDetails from "./modules/manager/sites/SiteDetails"; import Specifications from "./modules/manager/specifications/Specifications"; import SpecificationsDetails from "./modules/manager/specifications/SpecificationsDetails"; import BlockedIPs from "./modules/blockedIPs/blockedIPs"; import ErrorLogs from "./modules/errorLogs/errorLogs"; import SsoManager from "./modules/manager/ssoManager/ssoManager"; import SsoProviderDetails from "./modules/manager/ssoManager/SsoProviderDetails"; import { Namespaces } from "./i18n/i18n"; function GetSecureRoutes() { const { t } = useTranslation(); const profileRoute = window.__RUNTIME_CONFIG__.EXTERNAL_LOGIN ? ( } /> ) : ( } /> ); return ( <> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {profileRoute} } /> } /> ); } function App() { let navigate = useNavigate(); useEffect(() => { const timer = setInterval(async () => { try { if (authentication.hasToken()) { await authentication.refreshToken(); if (authentication.tokenExpired()) { navigate("/login"); authentication.logout(); } } } catch (e: any) { console.log(e); } }, 10 * 1000); return () => clearInterval(timer); }); const isSignedIn = authentication.getCurrentUser() != null; const secureRoutes = isSignedIn ? ( GetSecureRoutes() ) : ( } /> ); var htmlAttributes: HtmlProps = { "data-bs-theme": theme.getPreferredTheme(), }; window .matchMedia("(prefers-color-scheme: dark)") .addEventListener("change", () => { window.location.reload(); }); const loginRoute = window.__RUNTIME_CONFIG__.EXTERNAL_LOGIN ? ( } /> ) : ( } /> ); return ( {config.applicationName}
} /> {loginRoute} } /> } /> } /> {secureRoutes} } />
); } export default App;