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

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { 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>{t('weve_converted_your_content_to_latex')}</OLModalBody>
  60. <OLModalFooter>
  61. <OLButton variant="primary" onClick={onHide}>
  62. {t('start_editing')}
  63. </OLButton>
  64. </OLModalFooter>
  65. </OLModal>
  66. )
  67. }
  68. export default ProjectConvertedFromDocxModal