upgrade-track-changes-modal.tsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import { useTranslation } from 'react-i18next'
  2. import { Row, Col, Button, Modal } from 'react-bootstrap'
  3. import AccessibleModal from '../../../../shared/components/accessible-modal'
  4. import Icon from '../../../../shared/components/icon'
  5. import { useProjectContext } from '../../../../shared/context/project-context'
  6. import { useUserContext } from '../../../../shared/context/user-context'
  7. import { startFreeTrial, upgradePlan } from '../../../../main/account-upgrade'
  8. import { memo } from 'react'
  9. type UpgradeTrackChangesModalProps = {
  10. show: boolean
  11. setShow: React.Dispatch<React.SetStateAction<boolean>>
  12. }
  13. function UpgradeTrackChangesModal({
  14. show,
  15. setShow,
  16. }: UpgradeTrackChangesModalProps) {
  17. const { t } = useTranslation()
  18. const project = useProjectContext()
  19. const user = useUserContext()
  20. return (
  21. <AccessibleModal show={show} onHide={() => setShow(false)}>
  22. <Modal.Header closeButton>
  23. <h3>{t('upgrade_to_track_changes')}</h3>
  24. </Modal.Header>
  25. <Modal.Body>
  26. <div className="teaser-video-container">
  27. {/* eslint-disable-next-line jsx-a11y/media-has-caption */}
  28. <video className="teaser-video" autoPlay loop>
  29. <source
  30. src="/img/teasers/track-changes/teaser-track-changes.mp4"
  31. type="video/mp4"
  32. />
  33. <img
  34. src="/img/teasers/track-changes/teaser-track-changes.gif"
  35. alt={t('demonstrating_track_changes_feature')}
  36. />
  37. </video>
  38. </div>
  39. <h4 className="teaser-title">
  40. {t('see_changes_in_your_documents_live')}
  41. </h4>
  42. <p className="small">{t('refresh_page_after_starting_free_trial')}</p>
  43. <Row>
  44. <Col md={10} mdOffset={1}>
  45. <ul className="list-unstyled">
  46. {[
  47. t('track_any_change_in_real_time'),
  48. t('review_your_peers_work'),
  49. t('accept_or_reject_each_changes_individually'),
  50. ].map(translation => (
  51. <li key={translation}>
  52. <Icon type="check" /> {translation}
  53. </li>
  54. ))}
  55. </ul>
  56. </Col>
  57. </Row>
  58. {project.owner && (
  59. <Row className="text-center">
  60. {project.owner._id === user.id ? (
  61. user.allowedFreeTrial ? (
  62. <Button
  63. bsStyle={null}
  64. className="btn-primary"
  65. onClick={() => startFreeTrial('track-changes')}
  66. >
  67. {t('try_it_for_free')}
  68. </Button>
  69. ) : (
  70. <Button
  71. bsStyle={null}
  72. className="btn-primary"
  73. onClick={() => upgradePlan('project-sharing')}
  74. >
  75. {t('upgrade')}
  76. </Button>
  77. )
  78. ) : (
  79. <p>
  80. <strong>
  81. {t(
  82. 'please_ask_the_project_owner_to_upgrade_to_track_changes'
  83. )}
  84. </strong>
  85. </p>
  86. )}
  87. </Row>
  88. )}
  89. </Modal.Body>
  90. <Modal.Footer>
  91. <Button
  92. bsStyle={null}
  93. className="btn-secondary"
  94. onClick={() => setShow(false)}
  95. >
  96. {t('close')}
  97. </Button>
  98. </Modal.Footer>
  99. </AccessibleModal>
  100. )
  101. }
  102. export default memo(UpgradeTrackChangesModal)