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_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/ErrorPages/PageNotFound"; import PageLoadingBar from "pages/common/PageLoadingBar"; import ErrorPageHeader from "pages/common/ErrorPageHeader"; import { AppState } from "@appsmith/reducers"; import { connect, useSelector } from "react-redux"; import { polyfillCountryFlagEmojis } from "country-flag-emoji-polyfill"; import * as Sentry from "@sentry/react"; 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 { 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"; import { getDefaultAdminSettingsPath } from "@appsmith/utils/adminSettingsHelpers"; import { getCurrentUser as getCurrentUserSelector } from "selectors/usersSelectors"; import { getTenantPermissions } from "@appsmith/selectors/tenantSelectors"; import useBrandingTheme from "utils/hooks/useBrandingTheme"; import RouteChangeListener from "RouteChangeListener"; /* We use this polyfill to show emoji flags on windows devices, this polyfill loads a font family */ polyfillCountryFlagEmojis(); const SentryRoute = Sentry.withSentryRouting(Route); const loadingIndicator = ; function AppRouter(props: { safeCrash: boolean; getCurrentUser: () => void; getFeatureFlags: () => void; getCurrentTenant: () => void; safeCrashCode?: ERROR_CODES; featureFlags: FeatureFlags; }) { const { getCurrentTenant, getCurrentUser, getFeatureFlags } = props; useEffect(() => { getCurrentUser(); getFeatureFlags(); getCurrentTenant(); }, []); useBrandingTheme(); const user = useSelector(getCurrentUserSelector); const tenantPermissions = useSelector(getTenantPermissions); return ( {props.safeCrash && props.safeCrashCode ? ( <> ) : ( <> )} ); } const mapStateToProps = (state: AppState) => ({ safeCrash: getSafeCrash(state), safeCrashCode: getSafeCrashCode(state), featureFlags: selectFeatureFlags(state), }); const mapDispatchToProps = (dispatch: any) => ({ getCurrentUser: () => dispatch(getCurrentUser()), getFeatureFlags: () => dispatch(fetchFeatureFlagsInit()), getCurrentTenant: () => dispatch(getCurrentTenant()), }); export default connect(mapStateToProps, mapDispatchToProps)(AppRouter);