source-editor.tsx 1.0 KB

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