duplicate-project.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import EditorCloneProjectModalWrapper from '@/features/clone-project-modal/components/editor-clone-project-modal-wrapper'
  2. import OLDropdownMenuItem from '@/features/ui/components/ol/ol-dropdown-menu-item'
  3. import { useEditorAnalytics } from '@/shared/hooks/use-editor-analytics'
  4. import { useLocation } from '@/shared/hooks/use-location'
  5. import getMeta from '@/utils/meta'
  6. import { useCallback, useState } from 'react'
  7. import { useTranslation } from 'react-i18next'
  8. type ProjectCopyResponse = {
  9. project_id: string
  10. }
  11. export const DuplicateProject = () => {
  12. const { sendEvent } = useEditorAnalytics()
  13. const { t } = useTranslation()
  14. const [showModal, setShowModal] = useState(false)
  15. const location = useLocation()
  16. const anonymous = getMeta('ol-anonymous')
  17. const openProject = useCallback(
  18. ({ project_id: projectId }: ProjectCopyResponse) => {
  19. location.assign(`/project/${projectId}`)
  20. },
  21. [location]
  22. )
  23. const handleShowModal = useCallback(() => {
  24. sendEvent('copy-project', { location: 'project-title-dropdown' })
  25. setShowModal(true)
  26. }, [sendEvent])
  27. if (anonymous) {
  28. return null
  29. }
  30. return (
  31. <>
  32. <OLDropdownMenuItem onClick={handleShowModal}>
  33. {t('copy')}
  34. </OLDropdownMenuItem>
  35. <EditorCloneProjectModalWrapper
  36. show={showModal}
  37. handleHide={() => setShowModal(false)}
  38. openProject={openProject}
  39. />
  40. </>
  41. )
  42. }