ide-page.tsx 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { lazy, Suspense } from 'react'
  2. import { Alerts } from '@/features/ide-react/components/alerts/alerts'
  3. import { MainLayout } from '@/features/ide-react/components/layout/main-layout'
  4. import EditorLeftMenu from '@/features/editor-left-menu/components/editor-left-menu'
  5. import { useLayoutEventTracking } from '@/features/ide-react/hooks/use-layout-event-tracking'
  6. import useSocketListeners from '@/features/ide-react/hooks/use-socket-listeners'
  7. import { useEditingSessionHeartbeat } from '@/features/ide-react/hooks/use-editing-session-heartbeat'
  8. import { useRegisterUserActivity } from '@/features/ide-react/hooks/use-register-user-activity'
  9. import { useHasLintingError } from '@/features/ide-react/hooks/use-has-linting-error'
  10. import { Modals } from '@/features/ide-react/components/modals/modals'
  11. import { GlobalAlertsProvider } from '@/features/ide-react/context/global-alerts-context'
  12. import { GlobalToasts } from '../global-toasts'
  13. import {
  14. canUseNewEditor,
  15. useIsNewEditorEnabled,
  16. } from '@/features/ide-redesign/utils/new-editor-utils'
  17. import EditorSurvey from '../editor-survey'
  18. import { useFeatureFlag } from '@/shared/context/split-test-context'
  19. import { useStatusFavicon } from '@/features/ide-react/hooks/use-status-favicon'
  20. import useThemedPage from '@/shared/hooks/use-themed-page'
  21. const MainLayoutNew = lazy(
  22. () => import('@/features/ide-redesign/components/main-layout')
  23. )
  24. const SettingsModalNew = lazy(
  25. () => import('@/features/ide-redesign/components/settings/settings-modal')
  26. )
  27. export default function IdePage() {
  28. useLayoutEventTracking() // sent event when the layout changes
  29. useSocketListeners() // listen for project-related websocket messages
  30. useEditingSessionHeartbeat() // send a batched event when user is active
  31. useRegisterUserActivity() // record activity and ensure connection when user is active
  32. useHasLintingError() // pass editor:lint hasLintingError to the compiler
  33. useStatusFavicon() // update the favicon based on the compile status
  34. useThemedPage() // set the page theme based on user settings
  35. const newEditor = useIsNewEditorEnabled()
  36. const canAccessNewEditor = canUseNewEditor()
  37. const editorSurveyFlag = useFeatureFlag('editor-popup-ux-survey')
  38. const showEditorSurvey = editorSurveyFlag && !canAccessNewEditor
  39. return (
  40. <GlobalAlertsProvider>
  41. <Alerts />
  42. <Modals />
  43. {newEditor ? (
  44. <Suspense fallback={null}>
  45. <SettingsModalNew />
  46. <MainLayoutNew />
  47. </Suspense>
  48. ) : (
  49. <>
  50. <EditorLeftMenu />
  51. <MainLayout />
  52. </>
  53. )}
  54. <GlobalToasts />
  55. {showEditorSurvey && <EditorSurvey />}
  56. </GlobalAlertsProvider>
  57. )
  58. }