project-converted-from-docx-modal.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { Trans, useTranslation } from 'react-i18next'
  2. import {
  3. OLModal,
  4. OLModalBody,
  5. OLModalFooter,
  6. OLModalHeader,
  7. OLModalTitle,
  8. } from '@/shared/components/ol/ol-modal'
  9. import OLButton from '@/shared/components/ol/ol-button'
  10. import { useEffect, useState } from 'react'
  11. import { showImportDocxFeedbackToast } from '@/features/project-list/components/new-project-button/import-docx-feedback-toast'
  12. function ProjectConvertedFromDocxModal() {
  13. const [
  14. showProjectConvertedFromDocxModal,
  15. setShowProjectConvertedFromDocxModal,
  16. ] = useState(false)
  17. useEffect(() => {
  18. const query = window.location.search
  19. const queryString = new URLSearchParams(query)
  20. if (queryString.get('converted-from-docx') === 'true') {
  21. setShowProjectConvertedFromDocxModal(true)
  22. // Clean the URL immediately so a refresh doesn't trigger the modal again,
  23. // but preserve other search params and the hash.
  24. const url = new URL(window.location.href)
  25. url.searchParams.delete('converted-from-docx')
  26. window.history.replaceState(window.history.state, '', url.toString())
  27. }
  28. }, [])
  29. return (
  30. <>
  31. {showProjectConvertedFromDocxModal && (
  32. <ProjectConvertedFromDocxModalContent
  33. onHide={() => {
  34. setShowProjectConvertedFromDocxModal(false)
  35. showImportDocxFeedbackToast()
  36. }}
  37. />
  38. )}
  39. </>
  40. )
  41. }
  42. function ProjectConvertedFromDocxModalContent({
  43. onHide,
  44. }: {
  45. onHide: () => void
  46. }) {
  47. const { t } = useTranslation()
  48. return (
  49. <OLModal
  50. show
  51. animation
  52. onHide={onHide}
  53. id="converted-from-docx-modal"
  54. backdrop="static"
  55. >
  56. <OLModalHeader>
  57. <OLModalTitle as="h3">{t('document_ready_for_editing')}</OLModalTitle>
  58. </OLModalHeader>
  59. <OLModalBody>
  60. <Trans
  61. i18nKey="weve_converted_your_content_to_latex"
  62. components={[
  63. // eslint-disable-next-line jsx-a11y/anchor-has-content
  64. <a
  65. href="/learn"
  66. key="wiki-link"
  67. rel="noopener noreferrer"
  68. target="_blank"
  69. />,
  70. ]}
  71. />
  72. </OLModalBody>
  73. <OLModalFooter>
  74. <OLButton variant="primary" onClick={onHide}>
  75. {t('start_editing')}
  76. </OLButton>
  77. </OLModalFooter>
  78. </OLModal>
  79. )
  80. }
  81. export default ProjectConvertedFromDocxModal