import { APP_INIT_ERROR, APP_READY, subscribe, initialize, mergeConfig, getConfig, getPath, } from '@edx/frontend-platform'; import { AppProvider, ErrorPage } from '@edx/frontend-platform/react'; import React, { StrictMode, useEffect } from 'react'; import { createRoot } from 'react-dom/client'; import { Route, createRoutesFromElements, createBrowserRouter, RouterProvider, } from 'react-router-dom'; import { QueryClient, QueryClientProvider, } from '@tanstack/react-query'; import { initializeHotjar } from '@edx/frontend-enterprise-hotjar'; import { logError } from '@edx/frontend-platform/logging'; import messages from './i18n'; import { ComponentPicker, CreateLibrary, CreateLegacyLibrary, LibraryLayout, PreviewChangesEmbed, } from './library-authoring'; import initializeStore from './store'; import CourseAuthoringRoutes from './CourseAuthoringRoutes'; import Head from './head/Head'; import { StudioHome } from './studio-home'; import CourseRerun from './course-rerun'; import { TaxonomyLayout, TaxonomyDetailPage, TaxonomyListPage } from './taxonomy'; import { ContentTagsDrawer } from './content-tags-drawer'; import AccessibilityPage from './accessibility-page'; import { ToastProvider } from './generic/toast-context'; import { ContentType } from './library-authoring/routes'; import 'react-datepicker/dist/react-datepicker.css'; import './index.scss'; import { LegacyLibMigrationPage } from './legacy-libraries-migration/LegacyLibMigrationPage'; const queryClient = new QueryClient({ defaultOptions: { queries: { staleTime: 60 * 60_000, // If cache is up to one hour old, no need to re-fetch }, }, }); const App = () => { useEffect(() => { if (process.env.HOTJAR_APP_ID) { try { initializeHotjar({ hotjarId: process.env.HOTJAR_APP_ID, hotjarVersion: process.env.HOTJAR_VERSION, hotjarDebug: !!process.env.HOTJAR_DEBUG, }); } catch (error) { logError(error); } } }, []); const router = createBrowserRouter( createRoutesFromElements( } /> } /> } /> } /> } /> } /> } /> )} /> )} /> } /> } /> } /> {getConfig().ENABLE_ACCESSIBILITY_PAGE === 'true' && ( } /> )} {getConfig().ENABLE_TAGGING_TAXONOMY_PAGES === 'true' && ( <> }> } /> }> } /> } /> )} , ), { basename: getPath(getConfig().PUBLIC_PATH), }, ); return ( ); }; subscribe(APP_READY, () => { const root = createRoot(document.getElementById('root')); root.render( , ); }); subscribe(APP_INIT_ERROR, (error) => { const root = createRoot(document.getElementById('root')); root.render( , ); }); initialize({ handlers: { config: () => { mergeConfig({ SUPPORT_URL: process.env.SUPPORT_URL || null, SUPPORT_EMAIL: process.env.SUPPORT_EMAIL || null, LEARNING_BASE_URL: process.env.LEARNING_BASE_URL, LMS_BASE_URL: process.env.LMS_BASE_URL || null, EXAMS_BASE_URL: process.env.EXAMS_BASE_URL || null, CALCULATOR_HELP_URL: process.env.CALCULATOR_HELP_URL || null, ENABLE_PROGRESS_GRAPH_SETTINGS: process.env.ENABLE_PROGRESS_GRAPH_SETTINGS || 'false', ENABLE_TEAM_TYPE_SETTING: process.env.ENABLE_TEAM_TYPE_SETTING === 'true', ENABLE_OPEN_MANAGED_TEAM_TYPE: process.env.ENABLE_OPEN_MANAGED_TEAM_TYPE === 'true', BBB_LEARN_MORE_URL: process.env.BBB_LEARN_MORE_URL || '', STUDIO_BASE_URL: process.env.STUDIO_BASE_URL || null, STUDIO_SHORT_NAME: process.env.STUDIO_SHORT_NAME || null, TERMS_OF_SERVICE_URL: process.env.TERMS_OF_SERVICE_URL || null, PRIVACY_POLICY_URL: process.env.PRIVACY_POLICY_URL || null, ENABLE_ACCESSIBILITY_PAGE: process.env.ENABLE_ACCESSIBILITY_PAGE || 'false', NOTIFICATION_FEEDBACK_URL: process.env.NOTIFICATION_FEEDBACK_URL || null, ENABLE_UNIT_PAGE: process.env.ENABLE_UNIT_PAGE || 'false', ENABLE_ASSETS_PAGE: process.env.ENABLE_ASSETS_PAGE || 'false', ENABLE_VIDEO_UPLOAD_PAGE_LINK_IN_CONTENT_DROPDOWN: process.env.ENABLE_VIDEO_UPLOAD_PAGE_LINK_IN_CONTENT_DROPDOWN || 'false', ENABLE_CERTIFICATE_PAGE: process.env.ENABLE_CERTIFICATE_PAGE || 'false', ENABLE_COURSE_IMPORT_IN_LIBRARY: process.env.ENABLE_COURSE_IMPORT_IN_LIBRARY || 'false', ENABLE_TAGGING_TAXONOMY_PAGES: process.env.ENABLE_TAGGING_TAXONOMY_PAGES || 'false', ENABLE_CHECKLIST_QUALITY: process.env.ENABLE_CHECKLIST_QUALITY || 'true', ENABLE_GRADING_METHOD_IN_PROBLEMS: process.env.ENABLE_GRADING_METHOD_IN_PROBLEMS === 'true', LIBRARY_UNSUPPORTED_BLOCKS: (process.env.LIBRARY_UNSUPPORTED_BLOCKS || 'conditional,step-builder,problem-builder').split(','), COURSE_TEAM_SUPPORT_EMAIL: process.env.COURSE_TEAM_SUPPORT_EMAIL || null, ADMIN_CONSOLE_URL: process.env.ADMIN_CONSOLE_URL || null, }, 'CourseAuthoringConfig'); }, }, messages, requireAuthenticatedUser: true, });