main-layout.tsx 3.0 KB

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