ide-page.tsx 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { useConnectionContext } from '@/features/ide-react/context/connection-context'
  2. import { useEffect, useState } from 'react'
  3. import { Alerts } from '@/features/ide-react/components/alerts/alerts'
  4. import { useLayoutContext } from '@/shared/context/layout-context'
  5. import MainLayout from '@/features/ide-react/components/layout/main-layout'
  6. import { EditorAndSidebar } from '@/features/ide-react/components/editor-and-sidebar'
  7. import EditorLeftMenu from '@/features/editor-left-menu/components/editor-left-menu'
  8. import EditorNavigationToolbar from '@/features/ide-react/components/editor-navigation-toolbar'
  9. import ChatPane from '@/features/chat/components/chat-pane'
  10. import { useLayoutEventTracking } from '@/features/ide-react/hooks/use-layout-event-tracking'
  11. import useSocketListeners from '@/features/ide-react/hooks/use-socket-listeners'
  12. import { useModalsContext } from '@/features/ide-react/context/modals-context'
  13. import { useOpenFile } from '@/features/ide-react/hooks/use-open-file'
  14. import { useEditingSessionHeartbeat } from '@/features/ide-react/hooks/use-editing-session-heartbeat'
  15. import { useRegisterUserActivity } from '@/features/ide-react/hooks/use-register-user-activity'
  16. import { useHasLintingError } from '@/features/ide-react/hooks/use-has-linting-error'
  17. // This is filled with placeholder content while the real content is migrated
  18. // away from Angular
  19. export default function IdePage() {
  20. useLayoutEventTracking()
  21. useSocketListeners()
  22. useEditingSessionHeartbeat()
  23. useRegisterUserActivity()
  24. useHasLintingError()
  25. // This returns a function to open a binary file but for now we just use the
  26. // fact that it also patches in ide.binaryFilesManager. Once Angular is gone,
  27. // we can remove this hook from here and use it in the history file restore
  28. // component instead.
  29. useOpenFile()
  30. const [leftColumnDefaultSize, setLeftColumnDefaultSize] = useState(20)
  31. const { connectionState } = useConnectionContext()
  32. const { showLockEditorMessageModal } = useModalsContext()
  33. // Show modal when editor is forcefully disconnected
  34. useEffect(() => {
  35. if (connectionState.forceDisconnected) {
  36. showLockEditorMessageModal(connectionState.forcedDisconnectDelay)
  37. }
  38. }, [
  39. connectionState.forceDisconnected,
  40. connectionState.forcedDisconnectDelay,
  41. showLockEditorMessageModal,
  42. ])
  43. const { chatIsOpen } = useLayoutContext()
  44. const mainContent = (
  45. <EditorAndSidebar
  46. leftColumnDefaultSize={leftColumnDefaultSize}
  47. setLeftColumnDefaultSize={setLeftColumnDefaultSize}
  48. shouldPersistLayout
  49. />
  50. )
  51. return (
  52. <>
  53. <Alerts />
  54. <EditorLeftMenu />
  55. <MainLayout
  56. headerContent={<EditorNavigationToolbar />}
  57. chatContent={<ChatPane />}
  58. mainContent={mainContent}
  59. chatIsOpen={chatIsOpen}
  60. shouldPersistLayout
  61. />
  62. </>
  63. )
  64. }