import React, { useEffect } from "react"; import { Router, Switch, Route } from "react-router-dom"; import { inject, observer } from "mobx-react"; import NavMenu from "./components/NavMenu"; import Main from "./components/Main"; import PrivateRoute from "@appserver/common/components/PrivateRoute"; import PublicRoute from "@appserver/common/components/PublicRoute"; import ErrorBoundary from "@appserver/common/components/ErrorBoundary"; import Layout from "./components/Layout"; import ScrollToTop from "./components/Layout/ScrollToTop"; import history from "@appserver/common/history"; import toastr from "studio/toastr"; import { combineUrl, updateTempContent } from "@appserver/common/utils"; import { Provider as MobxProvider } from "mobx-react"; import ThemeProvider from "@appserver/components/theme-provider"; import { Base } from "@appserver/components/themes"; import store from "studio/store"; import config from "../package.json"; import "./custom.scss"; import { I18nextProvider } from "react-i18next"; import i18n from "./i18n"; import AppLoader from "@appserver/common/components/AppLoader"; import System from "./components/System"; import { AppServerConfig } from "@appserver/common/constants"; const { proxyURL } = AppServerConfig; const homepage = config.homepage; const PROXY_HOMEPAGE_URL = combineUrl(proxyURL, homepage); const HOME_URLS = [ combineUrl(PROXY_HOMEPAGE_URL), combineUrl(PROXY_HOMEPAGE_URL, "/"), combineUrl(PROXY_HOMEPAGE_URL, "/error=:error"), ]; const WIZARD_URL = combineUrl(PROXY_HOMEPAGE_URL, "/wizard"); const ABOUT_URL = combineUrl(PROXY_HOMEPAGE_URL, "/about"); const LOGIN_URLS = [ combineUrl(PROXY_HOMEPAGE_URL, "/login"), combineUrl(PROXY_HOMEPAGE_URL, "/login/error=:error"), combineUrl(PROXY_HOMEPAGE_URL, "/login/confirmed-email=:confirmedEmail"), ]; const CONFIRM_URL = combineUrl(PROXY_HOMEPAGE_URL, "/confirm"); const COMING_SOON_URLS = [ combineUrl(PROXY_HOMEPAGE_URL, "/coming-soon"), //combineUrl(PROXY_HOMEPAGE_URL, "/products/mail"), //combineUrl(PROXY_HOMEPAGE_URL, "/products/projects"), //combineUrl(PROXY_HOMEPAGE_URL, "/products/crm"), //combineUrl(PROXY_HOMEPAGE_URL, "/products/calendar"), //combineUrl(PROXY_HOMEPAGE_URL, "/products/talk/"), ]; const PAYMENTS_URL = combineUrl(PROXY_HOMEPAGE_URL, "/payments"); const SETTINGS_URL = combineUrl(PROXY_HOMEPAGE_URL, "/settings"); const ERROR_401_URL = combineUrl(PROXY_HOMEPAGE_URL, "/error401"); const Payments = React.lazy(() => import("./components/pages/Payments")); const Error404 = React.lazy(() => import("studio/Error404")); const Error401 = React.lazy(() => import("studio/Error401")); const Home = React.lazy(() => import("./components/pages/Home")); const Login = React.lazy(() => import("login/app")); const About = React.lazy(() => import("./components/pages/About")); const Wizard = React.lazy(() => import("./components/pages/Wizard")); const Settings = React.lazy(() => import("./components/pages/Settings")); const ComingSoon = React.lazy(() => import("./components/pages/ComingSoon")); const Confirm = React.lazy(() => import("./components/pages/Confirm")); const SettingsRoute = (props) => ( }> ); const PaymentsRoute = (props) => ( }> ); const Error404Route = (props) => ( }> ); const Error401Route = (props) => ( }> ); const HomeRoute = (props) => ( }> ); const ConfirmRoute = (props) => ( }> ); const LoginRoute = (props) => ( }> ); const AboutRoute = (props) => ( }> ); const WizardRoute = (props) => ( }> ); const ComingSoonRoute = (props) => ( }> ); const Shell = ({ items = [], page = "home", ...rest }) => { const { isLoaded, loadBaseInfo, modules, isDesktop } = rest; useEffect(() => { try { if (!window.AppServer) { window.AppServer = {}; } //TEMP object, will be removed!!! window.AppServer.studio = { HOME_URLS, WIZARD_URL, ABOUT_URL, LOGIN_URLS, CONFIRM_URL, COMING_SOON_URLS, PAYMENTS_URL, SETTINGS_URL, ERROR_401_URL, }; loadBaseInfo(); } catch (err) { toastr.error(err); } }, []); useEffect(() => { if (isLoaded) updateTempContent(); }, [isLoaded]); useEffect(() => { console.log("Current page ", page); }, [page]); const pathname = window.location.pathname.toLowerCase(); const isEditor = pathname.indexOf("doceditor") !== -1; if (!window.AppServer.studio) { window.AppServer.studio = {}; } window.AppServer.studio.modules = {}; const dynamicRoutes = modules.map((m) => { const appURL = m.link; const remoteEntryURL = combineUrl( window.location.origin, appURL, "remoteEntry.js" ); const system = { url: remoteEntryURL, scope: m.appName, module: "./app", }; window.AppServer.studio.modules[m.appName] = { appURL, remoteEntryURL, }; return ( ); }); //console.log("Shell ", history); return ( <> {isEditor ? <> : }
{dynamicRoutes}
); }; const ShellWrapper = inject(({ auth }) => { const { init, isLoaded } = auth; return { loadBaseInfo: () => { init(); auth.settingsStore.setModuleInfo(config.homepage, "home"); auth.setProductVersion(config.version); if (auth.settingsStore.isDesktopClient) { document.body.classList.add("desktop"); } }, isLoaded, modules: auth.moduleStore.modules, isDesktop: auth.settingsStore.isDesktopClient, }; })(observer(Shell)); export default () => ( );