editor.tsx 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. import { PythonEditorSplit } from '@/features/ide-react/components/layout/python-editor-split'
  13. export const Editor = () => {
  14. const { opening, errorState, showSymbolPalette } =
  15. useEditorPropertiesContext()
  16. const { selectedEntityCount, openEntity } = useFileTreeOpenContext()
  17. const { currentDocumentId, currentDocument } = useEditorOpenDocContext()
  18. const isPythonDocument =
  19. openEntity?.type === 'doc' &&
  20. openEntity.entity.name.toLowerCase().endsWith('.py')
  21. if (!currentDocumentId) {
  22. return null
  23. }
  24. const isLoading = Boolean(
  25. (!currentDocument || opening) && !errorState && currentDocumentId
  26. )
  27. return (
  28. <div
  29. className={classNames('ide-redesign-editor-content', {
  30. hidden: openEntity?.type !== 'doc' || selectedEntityCount !== 1,
  31. })}
  32. >
  33. <PanelGroup
  34. autoSaveId="ide-redesign-editor-symbol-palette"
  35. direction="vertical"
  36. >
  37. <Panel
  38. id="ide-redesign-panel-source-editor"
  39. order={1}
  40. className="ide-redesign-editor-panel"
  41. >
  42. {isPythonDocument ? <PythonEditorSplit /> : <SourceEditor />}
  43. {isLoading && <EditorLoadingPane />}
  44. </Panel>
  45. {showSymbolPalette && (
  46. <>
  47. <VerticalResizeHandle id="ide-redesign-editor-symbol-palette" />
  48. <Panel
  49. id="ide-redesign-panel-symbol-palette"
  50. order={2}
  51. defaultSize={25}
  52. minSize={10}
  53. maxSize={50}
  54. >
  55. <Suspense fallback={<FullSizeLoadingSpinner delay={500} />}>
  56. <SymbolPalettePane />
  57. </Suspense>
  58. </Panel>
  59. </>
  60. )}
  61. </PanelGroup>
  62. </div>
  63. )
  64. }