source-editor.tsx 999 B

123456789101112131415161718192021222324252627282930
  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 writefullPromotion = importOverleafModules(
  7. 'writefullEditorPromotion'
  8. ) as {
  9. import: { default: ElementType }
  10. path: string
  11. }[]
  12. const CodeMirrorEditor = lazy(
  13. () =>
  14. import(/* webpackChunkName: "codemirror-editor" */ './codemirror-editor')
  15. )
  16. function SourceEditor() {
  17. return (
  18. <Suspense fallback={<FullSizeLoadingSpinner delay={500} />}>
  19. {writefullPromotion.map(({ import: { default: Component }, path }) => (
  20. <Component key={path} />
  21. ))}
  22. <CodeMirrorEditor />
  23. </Suspense>
  24. )
  25. }
  26. export default withErrorBoundary(memo(SourceEditor), ErrorBoundaryFallback)