source-editor.tsx 1.0 KB

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