import React, { Suspense, useEffect } from "react"; import history from "utils/history"; import AppHeader from "pages/common/AppHeader"; import { Redirect, Route, Router, Switch } from "react-router-dom"; import { ADMIN_SETTINGS_CATEGORY_DEFAULT_PATH, ADMIN_SETTINGS_CATEGORY_PATH, ADMIN_SETTINGS_PATH, APPLICATIONS_URL, AUTH_LOGIN_URL, BASE_LOGIN_URL, BASE_SIGNUP_URL, BASE_URL, BUILDER_CUSTOM_PATH, BUILDER_PATCH_PATH, BUILDER_PATH, BUILDER_PATH_DEPRECATED, PROFILE, SETUP, SIGNUP_SUCCESS_URL, SIGN_UP_URL, TEMPLATES_PATH, USERS_URL, USER_AUTH_URL, VIEWER_CUSTOM_PATH, VIEWER_PATCH_PATH, VIEWER_PATH, VIEWER_PATH_DEPRECATED, WORKSPACE_URL, } from "constants/routes"; import WorkspaceLoader from "pages/workspace/loader"; import ApplicationListLoader from "pages/Applications/loader"; import EditorLoader from "pages/Editor/loader"; import AppViewerLoader from "pages/AppViewer/loader"; import LandingScreen from "./LandingScreen"; import UserAuth from "pages/UserAuth"; import Users from "pages/users"; import ErrorPage from "pages/common/ErrorPage"; import PageNotFound from "pages/common/PageNotFound"; import PageLoadingBar from "pages/common/PageLoadingBar"; import ErrorPageHeader from "pages/common/ErrorPageHeader"; import { getCurrentThemeDetails, ThemeMode } from "selectors/themeSelectors"; import { AppState } from "@appsmith/reducers"; import { setThemeMode } from "actions/themeActions"; import { connect } from "react-redux"; import * as Sentry from "@sentry/react"; import AnalyticsUtil from "utils/AnalyticsUtil"; import { trimTrailingSlash } from "utils/helpers"; import { getSafeCrash, getSafeCrashCode } from "selectors/errorSelectors"; import UserProfile from "pages/UserProfile"; import { getCurrentUser } from "actions/authActions"; import { selectFeatureFlags } from "selectors/usersSelectors"; import Setup from "pages/setup"; import Settings from "@appsmith/pages/AdminSettings"; import SignupSuccess from "pages/setup/SignupSuccess"; import { Theme } from "constants/DefaultTheme"; import { ERROR_CODES } from "@appsmith/constants/ApiConstants"; import TemplatesListLoader from "pages/Templates/loader"; import { fetchFeatureFlagsInit } from "actions/userActions"; import FeatureFlags from "entities/FeatureFlags"; import WDSPage from "components/wds/Showcase"; import { getCurrentTenant } from "@appsmith/actions/tenantActions"; const SentryRoute = Sentry.withSentryRouting(Route); const loadingIndicator = ; function changeAppBackground(currentTheme: any) { if ( trimTrailingSlash(window.location.pathname) === "/applications" || window.location.pathname.indexOf("/settings/") !== -1 || trimTrailingSlash(window.location.pathname) === "/profile" || trimTrailingSlash(window.location.pathname) === "/signup-success" ) { document.body.style.backgroundColor = currentTheme.colors.homepageBackground; } else { document.body.style.backgroundColor = currentTheme.colors.appBackground; } } function AppRouter(props: { safeCrash: boolean; getCurrentUser: () => void; getFeatureFlags: () => void; getCurrentTenant: () => void; currentTheme: Theme; safeCrashCode?: ERROR_CODES; featureFlags: FeatureFlags; setTheme: (theme: ThemeMode) => void; }) { const { getCurrentTenant, getCurrentUser, getFeatureFlags } = props; useEffect(() => { AnalyticsUtil.logEvent("ROUTE_CHANGE", { path: window.location.pathname }); const stopListener = history.listen((location: any) => { AnalyticsUtil.logEvent("ROUTE_CHANGE", { path: location.pathname }); changeAppBackground(props.currentTheme); }); getCurrentUser(); getFeatureFlags(); getCurrentTenant(); return stopListener; }, []); useEffect(() => { changeAppBackground(props.currentTheme); }, [props.currentTheme]); return ( {props.safeCrash && props.safeCrashCode ? ( <> ) : ( <> )} ); } const mapStateToProps = (state: AppState) => ({ currentTheme: getCurrentThemeDetails(state), safeCrash: getSafeCrash(state), safeCrashCode: getSafeCrashCode(state), featureFlags: selectFeatureFlags(state), }); const mapDispatchToProps = (dispatch: any) => ({ setTheme: (mode: ThemeMode) => { dispatch(setThemeMode(mode)); }, getCurrentUser: () => dispatch(getCurrentUser()), getFeatureFlags: () => dispatch(fetchFeatureFlagsInit()), getCurrentTenant: () => dispatch(getCurrentTenant()), }); export default connect(mapStateToProps, mapDispatchToProps)(AppRouter);