\n {/*{nextJitsu && {window.location.href=`${process.env.JITSU_NEXT_URL}?token=${nextJitsu}`}} className={\"cursor-pointer\"}>Jitsu Next is available. Try it out now!}*/}\n {classicProject && \n What is Jitsu Next?\n
\n Jitsu Next is a new version of Jitsu with new user interface and faster,\n better scalable backend.\n
} >\n {window.location.href=`${process.env.JITSU_NEXT_URL}?token=${classicProject.token}&projectName=${encodeURIComponent(classicProject.name)}`}} className={\"cursor-pointer\"}>\n Switch to Jitsu Next (beta), a new version of Jitsu Platform\n \n }\n
\n \n \n This page does not exist. If you got here by clicking a link within Jitsu interface, try to contact us:{\" \"}\n \n {\"support@jitsu.com\"}\n \n >\n }\n avatar={\n \n \n \n }\n title={\"Page Not Found\"}\n />\n \n
\n )\n}\n\nconst PageWrapper: React.FC<{ pageTitle: string; component: ComponentType; pagePath: string }> = ({\n pageTitle,\n component,\n pagePath,\n ...rest\n}) => {\n const services = useServices()\n useEffect(() => {\n services.analyticsService.onPageLoad({\n pagePath: pagePath,\n })\n document[\"title\"] = `Jitsu: ${pageTitle}`\n currentPageHeaderStore.setBreadcrumbs(pageTitle)\n }, [])\n const Component = component as ExoticComponent\n return (\n }>\n \n \n )\n}\n\nconst ProjectRoute: React.FC<{ projects: Project[], classicProject: ClassicProjectStatus }> = ({ projects, classicProject }) => {\n const services = useServices()\n const [initialized, setInitialized] = useState(false)\n const [error, setError] = useState(undefined)\n const [project, setProject] = useState()\n const { projectId } = useParams<{ projectId: string }>()\n\n useEffect(() => {\n setInitialized(false)\n ;(async () => {\n let project = await initializeProject(projectId, projects)\n if (!project) {\n if (!projects || projects.length === 0) {\n services.userService.removeAuth(reloadPage)\n }\n const lastUsedProject = services.userSettingsService.get(Settings.ActiveProject)?.id || projects[0]?.id\n setProjectIdRedirectedFrom(projectId)\n window.location.replace(window.location.href.replace(projectId, lastUsedProject))\n return\n }\n setProject(project)\n try {\n await initializeAllStores(services.analyticsService)\n await initializeBilling(services, projectId)\n setInitialized(true)\n } catch (e) {\n setError(e)\n }\n })()\n }, [projectId])\n\n /** Show a message to user if they were redirected from a different project */\n useEffect(() => {\n const redirectedFromProjectId = getProjectIdRedirectedFrom()\n if (redirectedFromProjectId && project?.name) {\n window.sessionStorage.removeItem(\"redirectedFromProjectId\")\n actionNotification.warn(\n <>\n Project with ID {redirectedFromProjectId} not found. Redirected to {project.name} project.\n >\n )\n }\n }, [])\n\n /** Saves the last successfully initialized project to local storage */\n useEffect(() => {\n if (initialized && !error && project?.id) {\n services.userSettingsService.set({ [Settings.ActiveProject]: project })\n }\n }, [error, initialized, project?.id])\n\n if (!error && !initialized) {\n return \n } else if (error) {\n return (\n