main-layout.tsx 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. export default function MainLayout() {
  14. const [resizing, setResizing] = useState(false)
  15. const {
  16. togglePdfPane,
  17. handlePdfPaneExpand,
  18. handlePdfPaneCollapse,
  19. setPdfIsOpen: setIsPdfOpen,
  20. pdfIsOpen: isPdfOpen,
  21. pdfPanelRef,
  22. } = usePdfPane()
  23. const { view, pdfLayout } = useLayoutContext()
  24. const editorIsOpen =
  25. view === 'editor' || view === 'file' || pdfLayout === 'sideBySide'
  26. const { t } = useTranslation()
  27. return (
  28. <div className="ide-redesign-main">
  29. <Toolbar />
  30. <div className="ide-redesign-body">
  31. <PanelGroup
  32. autoSaveId="ide-redesign-outer-layout"
  33. direction="horizontal"
  34. className={classNames('ide-redesign-inner', {
  35. 'ide-panel-group-resizing': resizing,
  36. })}
  37. >
  38. <RailLayout />
  39. <Panel
  40. id="ide-redesign-editor-panel"
  41. order={1}
  42. className={classNames({
  43. 'ide-panel-group-resizing': resizing,
  44. hidden: !editorIsOpen,
  45. })}
  46. minSize={5}
  47. defaultSize={50}
  48. >
  49. <div className="ide-redesign-editor-container">
  50. <EditorPanel />
  51. </div>
  52. </Panel>
  53. <HorizontalResizeHandle
  54. resizable={pdfLayout === 'sideBySide'}
  55. onDragging={setResizing}
  56. onDoubleClick={togglePdfPane}
  57. hitAreaMargins={{ coarse: 0, fine: 0 }}
  58. className={classNames({
  59. hidden: !editorIsOpen,
  60. })}
  61. >
  62. <HorizontalToggler
  63. id="ide-redesign-pdf-panel"
  64. togglerType="east"
  65. isOpen={isPdfOpen}
  66. setIsOpen={setIsPdfOpen}
  67. tooltipWhenOpen={t('tooltip_hide_pdf')}
  68. tooltipWhenClosed={t('tooltip_show_pdf')}
  69. />
  70. </HorizontalResizeHandle>
  71. <Panel
  72. collapsible
  73. className="ide-redesign-pdf-container"
  74. id="ide-redesign-pdf-panel"
  75. order={2}
  76. defaultSize={50}
  77. minSize={5}
  78. ref={pdfPanelRef}
  79. onExpand={handlePdfPaneExpand}
  80. onCollapse={handlePdfPaneCollapse}
  81. >
  82. <PdfPreview />
  83. </Panel>
  84. </PanelGroup>
  85. </div>
  86. </div>
  87. )
  88. }