editor.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { EditorLoadingPane } from '@/features/ide-react/components/editor/editor-loading-pane'
  2. import { useEditorOpenDocContext } from '@/features/ide-react/context/editor-open-doc-context'
  3. import { useFileTreeOpenContext } from '@/features/ide-react/context/file-tree-open-context'
  4. import classNames from 'classnames'
  5. import SourceEditor from '@/features/source-editor/components/source-editor'
  6. import { Panel, PanelGroup } from 'react-resizable-panels'
  7. import { VerticalResizeHandle } from '@/features/ide-react/components/resize/vertical-resize-handle'
  8. import { Suspense } from 'react'
  9. import { FullSizeLoadingSpinner } from '@/shared/components/loading-spinner'
  10. import SymbolPalettePane from '@/features/ide-react/components/editor/symbol-palette-pane'
  11. import { useEditorPropertiesContext } from '@/features/ide-react/context/editor-properties-context'
  12. export const Editor = () => {
  13. const { opening, errorState, showSymbolPalette } =
  14. useEditorPropertiesContext()
  15. const { selectedEntityCount, openEntity } = useFileTreeOpenContext()
  16. const { currentDocumentId, currentDocument } = useEditorOpenDocContext()
  17. if (!currentDocumentId) {
  18. return null
  19. }
  20. const isLoading = Boolean(
  21. (!currentDocument || opening) && !errorState && currentDocumentId
  22. )
  23. return (
  24. <div
  25. className={classNames('ide-redesign-editor-content', {
  26. hidden: openEntity?.type !== 'doc' || selectedEntityCount !== 1,
  27. })}
  28. >
  29. <PanelGroup
  30. autoSaveId="ide-redesign-editor-symbol-palette"
  31. direction="vertical"
  32. >
  33. <Panel
  34. id="ide-redesign-panel-source-editor"
  35. order={1}
  36. className="ide-redesign-editor-panel"
  37. >
  38. <SourceEditor />
  39. {isLoading && <EditorLoadingPane />}
  40. </Panel>
  41. {showSymbolPalette && (
  42. <>
  43. <VerticalResizeHandle id="ide-redesign-editor-symbol-palette" />
  44. <Panel
  45. id="ide-redesign-panel-symbol-palette"
  46. order={2}
  47. defaultSize={25}
  48. minSize={10}
  49. maxSize={50}
  50. >
  51. <Suspense fallback={<FullSizeLoadingSpinner delay={500} />}>
  52. <SymbolPalettePane />
  53. </Suspense>
  54. </Panel>
  55. </>
  56. )}
  57. </PanelGroup>
  58. </div>
  59. )
  60. }