lock-editor-message-modal.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { useTranslation } from 'react-i18next'
  2. import { Modal } from 'react-bootstrap'
  3. import AccessibleModal from '@/shared/components/accessible-modal'
  4. import { useEffect, useState } from 'react'
  5. export type LockEditorMessageModalProps = {
  6. delay: number // In seconds
  7. show: boolean
  8. }
  9. function LockEditorMessageModal({ delay, show }: LockEditorMessageModalProps) {
  10. const { t } = useTranslation()
  11. const [secondsUntilRefresh, setSecondsUntilRefresh] = useState(0)
  12. useEffect(() => {
  13. if (show) {
  14. setSecondsUntilRefresh(delay)
  15. const timer = window.setInterval(() => {
  16. setSecondsUntilRefresh(seconds => Math.max(0, seconds - 1))
  17. }, 1000)
  18. return () => {
  19. window.clearInterval(timer)
  20. }
  21. }
  22. }, [show, delay])
  23. return (
  24. <AccessibleModal
  25. show={show}
  26. // It's not possible to hide this modal, but it's a required prop
  27. onHide={() => {}}
  28. className="lock-editor-modal"
  29. backdrop={false}
  30. keyboard={false}
  31. >
  32. <Modal.Header>
  33. <Modal.Title>{t('please_wait')}</Modal.Title>
  34. </Modal.Header>
  35. <Modal.Body>
  36. {t('were_performing_maintenance', { seconds: secondsUntilRefresh })}
  37. </Modal.Body>
  38. </AccessibleModal>
  39. )
  40. }
  41. export default LockEditorMessageModal