source-editor.tsx 983 B

12345678910111213141516171819202122232425262728
  1. import { lazy, memo, Suspense, ElementType } from 'react'
  2. import { FullSizeLoadingSpinner } from '../../../shared/components/loading-spinner'
  3. import withErrorBoundary from '../../../infrastructure/error-boundary'
  4. import { ErrorBoundaryFallback } from '../../../shared/components/error-boundary-fallback'
  5. import importOverleafModules from '../../../../macros/import-overleaf-module.macro'
  6. const editorPromotions = importOverleafModules('editorPromotions') as {
  7. import: { default: ElementType }
  8. path: string
  9. }[]
  10. const CodeMirrorEditor = lazy(
  11. () =>
  12. import(/* webpackChunkName: "codemirror-editor" */ './codemirror-editor')
  13. )
  14. function SourceEditor() {
  15. return (
  16. <Suspense fallback={<FullSizeLoadingSpinner delay={500} />}>
  17. {editorPromotions.map(({ import: { default: Component }, path }) => (
  18. <Component key={path} />
  19. ))}
  20. <CodeMirrorEditor />
  21. </Suspense>
  22. )
  23. }
  24. export default withErrorBoundary(memo(SourceEditor), ErrorBoundaryFallback)