ide-page.tsx 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { useConnectionContext } from '@/features/ide-react/context/connection-context'
  2. import useEventListener from '@/shared/hooks/use-event-listener'
  3. import { useCallback, useEffect, useState } from 'react'
  4. import { Alerts } from '@/features/ide-react/components/alerts/alerts'
  5. import { useLayoutContext } from '@/shared/context/layout-context'
  6. import MainLayout from '@/features/ide-react/components/layout/main-layout'
  7. import { EditorAndSidebar } from '@/features/ide-react/components/editor-and-sidebar'
  8. import EditorLeftMenu from '@/features/editor-left-menu/components/editor-left-menu'
  9. import EditorNavigationToolbar from '@/features/ide-react/components/editor-navigation-toolbar'
  10. import ChatPane from '@/features/chat/components/chat-pane'
  11. import { useLayoutEventTracking } from '@/features/ide-react/hooks/use-layout-event-tracking'
  12. import useSocketListeners from '@/features/ide-react/hooks/use-socket-listeners'
  13. import { useOpenFile } from '@/features/ide-react/hooks/use-open-file'
  14. // This is filled with placeholder content while the real content is migrated
  15. // away from Angular
  16. export default function IdePage() {
  17. useLayoutEventTracking()
  18. useSocketListeners()
  19. // This returns a function to open a binary file but for now we just use the
  20. // fact that it also patches in ide.binaryFilesManager. Once Angular is gone,
  21. // we can remove this hook from here and use it in the history file restore
  22. // component instead.
  23. useOpenFile()
  24. const [leftColumnDefaultSize, setLeftColumnDefaultSize] = useState(20)
  25. const { registerUserActivity } = useConnectionContext()
  26. // Inform the connection manager when the user is active
  27. const listener = useCallback(
  28. () => registerUserActivity(),
  29. [registerUserActivity]
  30. )
  31. useEventListener('cursor:editor:update', listener)
  32. useEffect(() => {
  33. document.body.addEventListener('click', listener)
  34. return () => document.body.removeEventListener('click', listener)
  35. }, [listener])
  36. const { chatIsOpen } = useLayoutContext()
  37. const mainContent = (
  38. <EditorAndSidebar
  39. leftColumnDefaultSize={leftColumnDefaultSize}
  40. setLeftColumnDefaultSize={setLeftColumnDefaultSize}
  41. shouldPersistLayout
  42. />
  43. )
  44. return (
  45. <>
  46. <Alerts />
  47. <EditorLeftMenu />
  48. <MainLayout
  49. headerContent={<EditorNavigationToolbar />}
  50. chatContent={<ChatPane />}
  51. mainContent={mainContent}
  52. chatIsOpen={chatIsOpen}
  53. shouldPersistLayout
  54. />
  55. </>
  56. )
  57. }