compile-time-warning-upgrade-prompt.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { memo, useCallback, useEffect, useState } from 'react'
  2. import * as eventTracking from '@/infrastructure/event-tracking'
  3. import { useDetachCompileContext } from '@/shared/context/detach-compile-context'
  4. import usePersistedState from '@/shared/hooks/use-persisted-state'
  5. import { CompileTimeWarningUpgradePromptInner } from '@/features/pdf-preview/components/compile-time-warning-upgrade-prompt-inner'
  6. import getMeta from '@/utils/meta'
  7. function CompileTimeWarningUpgradePrompt() {
  8. const { isProjectOwner, deliveryLatencies, compiling, showLogs, error } =
  9. useDetachCompileContext()
  10. const [showWarning, setShowWarning] = useState(false)
  11. const [dismissedUntilWarning, setDismissedUntilWarning] = usePersistedState<
  12. Date | undefined
  13. >(`has-dismissed-10s-compile-time-warning-until`)
  14. const handleNewCompile = useCallback(
  15. (compileTime: number) => {
  16. setShowWarning(false)
  17. if (compileTime > 10000) {
  18. if (isProjectOwner) {
  19. if (
  20. !dismissedUntilWarning ||
  21. new Date(dismissedUntilWarning) < new Date()
  22. ) {
  23. setShowWarning(true)
  24. eventTracking.sendMB('compile-time-warning-displayed', {
  25. time: 10,
  26. isProjectOwner,
  27. })
  28. }
  29. }
  30. }
  31. },
  32. [isProjectOwner, dismissedUntilWarning]
  33. )
  34. const handleDismissWarning = useCallback(() => {
  35. eventTracking.sendMB('compile-time-warning-dismissed', {
  36. time: 10,
  37. isProjectOwner,
  38. })
  39. setShowWarning(false)
  40. const until = new Date()
  41. until.setDate(until.getDate() + 1) // 1 day
  42. setDismissedUntilWarning(until)
  43. }, [isProjectOwner, setDismissedUntilWarning])
  44. useEffect(() => {
  45. if (compiling || error || showLogs) return
  46. handleNewCompile(deliveryLatencies.compileTimeServerE2E)
  47. }, [compiling, error, showLogs, deliveryLatencies, handleNewCompile])
  48. if (!getMeta('ol-ExposedSettings').enableSubscriptions) {
  49. return null
  50. }
  51. if (compiling || error || showLogs) {
  52. return null
  53. }
  54. if (!showWarning) {
  55. return null
  56. }
  57. // if showWarning is true then the 10s warning is shown
  58. return (
  59. <div>
  60. {showWarning && isProjectOwner && (
  61. <CompileTimeWarningUpgradePromptInner
  62. handleDismissWarning={handleDismissWarning}
  63. />
  64. )}
  65. </div>
  66. )
  67. }
  68. export default memo(CompileTimeWarningUpgradePrompt)