pdf-preview-pane.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { memo, Suspense } from 'react'
  2. import classNames from 'classnames'
  3. import PdfLogsViewer from './pdf-logs-viewer'
  4. import PdfViewer from './pdf-viewer'
  5. import LoadingSpinner from '../../../shared/components/loading-spinner'
  6. import PdfHybridPreviewToolbar from './pdf-preview-hybrid-toolbar'
  7. import { useDetachCompileContext as useCompileContext } from '../../../shared/context/detach-compile-context'
  8. import FasterCompilesFeedback from './faster-compiles-feedback'
  9. import { PdfPreviewMessages } from './pdf-preview-messages'
  10. import CompileTimeWarning from './compile-time-warning'
  11. import CompileTimeoutMessages from './compile-timeout-messages'
  12. function PdfPreviewPane() {
  13. const { pdfUrl, showNewCompileTimeoutUI } = useCompileContext()
  14. const classes = classNames('pdf', 'full-size', {
  15. 'pdf-empty': !pdfUrl,
  16. })
  17. return (
  18. <div className={classes}>
  19. <PdfHybridPreviewToolbar />
  20. <PdfPreviewMessages>
  21. {showNewCompileTimeoutUI ? (
  22. <CompileTimeoutMessages />
  23. ) : (
  24. <CompileTimeWarning />
  25. )}
  26. </PdfPreviewMessages>
  27. <Suspense fallback={<LoadingPreview />}>
  28. <div className="pdf-viewer">
  29. <PdfViewer />
  30. <FasterCompilesFeedback />
  31. </div>
  32. </Suspense>
  33. <PdfLogsViewer />
  34. </div>
  35. )
  36. }
  37. function LoadingPreview() {
  38. return (
  39. <div className="pdf-loading-spinner-container">
  40. <LoadingSpinner delay={500} />
  41. </div>
  42. )
  43. }
  44. export default memo(PdfPreviewPane)