copy-sharing-link-button.tsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { useTranslation } from 'react-i18next'
  2. import OLButton from '@/shared/components/ol/ol-button'
  3. import { useShareProjectContext } from '@/features/share-project-modal/components/share-project-modal'
  4. import { useProjectContext } from '@/shared/context/project-context'
  5. import { useUserContext } from '@/shared/context/user-context'
  6. import { debugConsole } from '@/utils/debugging'
  7. import getMeta from '@/utils/meta'
  8. import { sendMB } from '@/infrastructure/event-tracking'
  9. export default function CopySharingLinkButton() {
  10. const { t } = useTranslation()
  11. const { sharingLinkData, projectAccess, setSuccessActionMessage } =
  12. useShareProjectContext()
  13. const { projectId } = useProjectContext()
  14. const { isAdmin } = useUserContext()
  15. const isCopyBtnEnabled =
  16. Boolean(navigator.clipboard?.writeText) &&
  17. Boolean(sharingLinkData?.token) &&
  18. (projectAccess?.startsWith('anyoneInXyzWithTheLink') ||
  19. projectAccess === 'anyoneWithTheLink')
  20. const handleCopyClick = () => {
  21. if (!sharingLinkData?.token) {
  22. return
  23. }
  24. const origin = isAdmin
  25. ? getMeta('ol-ExposedSettings').siteUrl
  26. : window.location.origin
  27. const link = `${origin}/project/${projectId}/share#${sharingLinkData.token}`
  28. navigator.clipboard
  29. .writeText(link)
  30. .then(() => {
  31. setSuccessActionMessage(t('link_copied'))
  32. sendMB('sharing-link-copied', {
  33. project_id: projectId,
  34. })
  35. })
  36. .catch(debugConsole.error)
  37. }
  38. return (
  39. <OLButton
  40. variant="secondary"
  41. leadingIcon={isCopyBtnEnabled ? 'link' : 'link_off'}
  42. disabled={!isCopyBtnEnabled}
  43. onClick={handleCopyClick}
  44. >
  45. {t('copy_sharing_link')}
  46. </OLButton>
  47. )
  48. }