ide-page.tsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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 { useOpenFile } from '@/features/ide-react/hooks/use-open-file'
  8. import { useEditingSessionHeartbeat } from '@/features/ide-react/hooks/use-editing-session-heartbeat'
  9. import { useRegisterUserActivity } from '@/features/ide-react/hooks/use-register-user-activity'
  10. import { useHasLintingError } from '@/features/ide-react/hooks/use-has-linting-error'
  11. import { Modals } from '@/features/ide-react/components/modals/modals'
  12. import { GlobalAlertsProvider } from '@/features/ide-react/context/global-alerts-context'
  13. import { GlobalToasts } from '../global-toasts'
  14. import { useFeatureFlag } from '@/shared/context/split-test-context'
  15. const MainLayoutNew = lazy(
  16. () => import('@/features/ide-redesign/components/main-layout')
  17. )
  18. const SettingsModalNew = lazy(
  19. () => import('@/features/ide-redesign/components/settings/settings-modal')
  20. )
  21. export default function IdePage() {
  22. useLayoutEventTracking() // sent event when the layout changes
  23. useSocketListeners() // listen for project-related websocket messages
  24. useEditingSessionHeartbeat() // send a batched event when user is active
  25. useRegisterUserActivity() // record activity and ensure connection when user is active
  26. useHasLintingError() // pass editor:lint hasLintingError to the compiler
  27. useOpenFile() // create ide.binaryFilesManager (TODO: move to the history file restore component)
  28. const newEditor = useFeatureFlag('editor-redesign')
  29. return (
  30. <GlobalAlertsProvider>
  31. <Alerts />
  32. <Modals />
  33. {newEditor ? (
  34. <Suspense fallback={null}>
  35. <SettingsModalNew />
  36. <MainLayoutNew />
  37. </Suspense>
  38. ) : (
  39. <>
  40. <EditorLeftMenu />
  41. <MainLayout />
  42. </>
  43. )}
  44. <GlobalToasts />
  45. </GlobalAlertsProvider>
  46. )
  47. }