ide-page.tsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. // This is filled with placeholder content while the real content is migrated
  14. // away from Angular
  15. export default function IdePage() {
  16. useLayoutEventTracking()
  17. useSocketListeners()
  18. const [leftColumnDefaultSize, setLeftColumnDefaultSize] = useState(20)
  19. const { registerUserActivity } = useConnectionContext()
  20. // Inform the connection manager when the user is active
  21. const listener = useCallback(
  22. () => registerUserActivity(),
  23. [registerUserActivity]
  24. )
  25. useEventListener('cursor:editor:update', listener)
  26. useEffect(() => {
  27. document.body.addEventListener('click', listener)
  28. return () => document.body.removeEventListener('click', listener)
  29. }, [listener])
  30. const { chatIsOpen } = useLayoutContext()
  31. const mainContent = (
  32. <EditorAndSidebar
  33. leftColumnDefaultSize={leftColumnDefaultSize}
  34. setLeftColumnDefaultSize={setLeftColumnDefaultSize}
  35. shouldPersistLayout
  36. />
  37. )
  38. return (
  39. <>
  40. <Alerts />
  41. <EditorLeftMenu />
  42. <MainLayout
  43. headerContent={<EditorNavigationToolbar />}
  44. chatContent={<ChatPane />}
  45. mainContent={mainContent}
  46. chatIsOpen={chatIsOpen}
  47. shouldPersistLayout
  48. />
  49. </>
  50. )
  51. }