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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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 { showImportDocumentFeedbackToast } from '@/features/project-list/components/new-project-button/import-document-feedback-toast'
  12. function ProjectConvertedFromDocumentModal() {
  13. const [convertedFrom, setConvertedFrom] = useState<string | null>(null)
  14. useEffect(() => {
  15. const queryString = new URLSearchParams(window.location.search)
  16. const from = queryString.get('converted-from')
  17. if (from) {
  18. setConvertedFrom(from)
  19. // Clean the URL immediately so a refresh doesn't trigger the modal again,
  20. // but preserve other search params and the hash.
  21. const url = new URL(window.location.href)
  22. url.searchParams.delete('converted-from')
  23. window.history.replaceState(window.history.state, '', url.toString())
  24. }
  25. }, [])
  26. return (
  27. <>
  28. {convertedFrom && (
  29. <ProjectConvertedFromImportModalContent
  30. onHide={() => {
  31. setConvertedFrom(null)
  32. if (convertedFrom === 'docx' || convertedFrom === 'markdown') {
  33. showImportDocumentFeedbackToast(convertedFrom)
  34. }
  35. }}
  36. />
  37. )}
  38. </>
  39. )
  40. }
  41. function ProjectConvertedFromImportModalContent({
  42. onHide,
  43. }: {
  44. onHide: () => void
  45. }) {
  46. const { t } = useTranslation()
  47. return (
  48. <OLModal
  49. show
  50. animation
  51. onHide={onHide}
  52. id="converted-from-document-modal"
  53. backdrop="static"
  54. >
  55. <OLModalHeader>
  56. <OLModalTitle as="h3">{t('document_ready_for_editing')}</OLModalTitle>
  57. </OLModalHeader>
  58. <OLModalBody>{t('weve_converted_your_content_to_latex')}</OLModalBody>
  59. <OLModalFooter>
  60. <OLButton variant="primary" onClick={onHide}>
  61. {t('start_editing')}
  62. </OLButton>
  63. </OLModalFooter>
  64. </OLModal>
  65. )
  66. }
  67. export default ProjectConvertedFromDocumentModal