editor.tsx 2.3 KB

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