main-layout.tsx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import { Panel, PanelGroup } from 'react-resizable-panels'
  2. import classNames from 'classnames'
  3. import { HorizontalResizeHandle } from '@/features/ide-react/components/resize/horizontal-resize-handle'
  4. import PdfPreview from '@/features/pdf-preview/components/pdf-preview'
  5. import { RailLayout } from './rail'
  6. import { Toolbar } from './toolbar/toolbar'
  7. import { HorizontalToggler } from '@/features/ide-react/components/resize/horizontal-toggler'
  8. import { useTranslation } from 'react-i18next'
  9. import { usePdfPane } from '@/features/ide-react/hooks/use-pdf-pane'
  10. import { useLayoutContext } from '@/shared/context/layout-context'
  11. import { useState } from 'react'
  12. import EditorPanel from './editor-panel'
  13. import { useRailContext } from '../contexts/rail-context'
  14. import HistoryContainer from '@/features/ide-react/components/history-container'
  15. export default function MainLayout() {
  16. const [resizing, setResizing] = useState(false)
  17. const { resizing: railResizing } = useRailContext()
  18. const {
  19. togglePdfPane,
  20. handlePdfPaneExpand,
  21. handlePdfPaneCollapse,
  22. setPdfIsOpen: setIsPdfOpen,
  23. pdfIsOpen: isPdfOpen,
  24. pdfPanelRef,
  25. } = usePdfPane()
  26. const { view, pdfLayout } = useLayoutContext()
  27. const editorIsOpen =
  28. view === 'editor' || view === 'file' || pdfLayout === 'sideBySide'
  29. const { t } = useTranslation()
  30. return (
  31. <div className="ide-redesign-main">
  32. <Toolbar />
  33. <div className="ide-redesign-body">
  34. <PanelGroup
  35. autoSaveId="ide-redesign-outer-layout"
  36. direction="horizontal"
  37. className={classNames('ide-redesign-inner', {
  38. 'ide-panel-group-resizing': resizing || railResizing,
  39. })}
  40. >
  41. <RailLayout />
  42. <Panel id="ide-redesign-editor-and-pdf-panel" order={2}>
  43. <HistoryContainer />
  44. <PanelGroup
  45. autoSaveId="ide-redesign-editor-and-pdf-panel-group"
  46. direction="horizontal"
  47. >
  48. <Panel
  49. id="ide-redesign-editor-panel"
  50. order={1}
  51. className={classNames({
  52. hidden: !editorIsOpen || view === 'history',
  53. })}
  54. minSize={5}
  55. defaultSize={50}
  56. >
  57. <div className="ide-redesign-editor-container">
  58. <EditorPanel />
  59. </div>
  60. </Panel>
  61. <HorizontalResizeHandle
  62. resizable={pdfLayout === 'sideBySide'}
  63. onDragging={setResizing}
  64. onDoubleClick={togglePdfPane}
  65. hitAreaMargins={{ coarse: 0, fine: 0 }}
  66. className={classNames({
  67. hidden: !editorIsOpen,
  68. })}
  69. >
  70. <HorizontalToggler
  71. id="ide-redesign-pdf-panel"
  72. togglerType="east"
  73. isOpen={isPdfOpen}
  74. setIsOpen={setIsPdfOpen}
  75. tooltipWhenOpen={t('tooltip_hide_pdf')}
  76. tooltipWhenClosed={t('tooltip_show_pdf')}
  77. />
  78. </HorizontalResizeHandle>
  79. <Panel
  80. collapsible
  81. className={classNames('ide-redesign-pdf-container', {
  82. hidden: view === 'history',
  83. })}
  84. id="ide-redesign-pdf-panel"
  85. order={2}
  86. defaultSize={50}
  87. minSize={5}
  88. ref={pdfPanelRef}
  89. onExpand={handlePdfPaneExpand}
  90. onCollapse={handlePdfPaneCollapse}
  91. >
  92. <PdfPreview />
  93. </Panel>
  94. </PanelGroup>
  95. </Panel>
  96. </PanelGroup>
  97. </div>
  98. </div>
  99. )
  100. }