ide-page.tsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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 PlaceholderChat from '@/features/ide-react/components/layout/placeholder/placeholder-chat'
  7. import PlaceholderHistory from '@/features/ide-react/components/layout/placeholder/placeholder-history'
  8. import MainLayout from '@/features/ide-react/components/layout/main-layout'
  9. import { EditorAndSidebar } from '@/features/ide-react/components/editor-and-sidebar'
  10. import Header from '@/features/ide-react/components/header'
  11. import EditorLeftMenu from '@/features/editor-left-menu/components/editor-left-menu'
  12. import { useLayoutEventTracking } from '@/features/ide-react/hooks/use-layout-event-tracking'
  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. const [leftColumnDefaultSize, setLeftColumnDefaultSize] = useState(20)
  18. const { registerUserActivity } = useConnectionContext()
  19. // Inform the connection manager when the user is active
  20. const listener = useCallback(
  21. () => registerUserActivity(),
  22. [registerUserActivity]
  23. )
  24. useEventListener('cursor:editor:update', listener)
  25. useEffect(() => {
  26. document.body.addEventListener('click', listener)
  27. return () => document.body.removeEventListener('click', listener)
  28. }, [listener])
  29. const { chatIsOpen, setChatIsOpen, view, setView } = useLayoutContext()
  30. const historyIsOpen = view === 'history'
  31. const setHistoryIsOpen = useCallback(
  32. (historyIsOpen: boolean) => {
  33. setView(historyIsOpen ? 'history' : 'editor')
  34. },
  35. [setView]
  36. )
  37. const headerContent = (
  38. <Header
  39. chatIsOpen={chatIsOpen}
  40. setChatIsOpen={setChatIsOpen}
  41. historyIsOpen={historyIsOpen}
  42. setHistoryIsOpen={setHistoryIsOpen}
  43. />
  44. )
  45. const chatContent = <PlaceholderChat />
  46. const mainContent = historyIsOpen ? (
  47. <PlaceholderHistory
  48. shouldPersistLayout
  49. leftColumnDefaultSize={leftColumnDefaultSize}
  50. setLeftColumnDefaultSize={setLeftColumnDefaultSize}
  51. />
  52. ) : (
  53. <EditorAndSidebar
  54. leftColumnDefaultSize={leftColumnDefaultSize}
  55. setLeftColumnDefaultSize={setLeftColumnDefaultSize}
  56. shouldPersistLayout
  57. />
  58. )
  59. return (
  60. <>
  61. <Alerts />
  62. <EditorLeftMenu />
  63. <MainLayout
  64. headerContent={headerContent}
  65. chatContent={chatContent}
  66. mainContent={mainContent}
  67. chatIsOpen={chatIsOpen}
  68. shouldPersistLayout
  69. />
  70. </>
  71. )
  72. }