diff --git a/web/src/components/MoreOptionsDropdown.cy.tsx b/web/src/components/MoreOptionsDropdown.cy.tsx index 632d583151..6d13ef8664 100644 --- a/web/src/components/MoreOptionsDropdown.cy.tsx +++ b/web/src/components/MoreOptionsDropdown.cy.tsx @@ -65,7 +65,7 @@ describe('MoreOptionsDropdown', () => { ); cy.get('button').click(); cy.contains('Share').should('be.visible'); - cy.get('[data-testid=dismiss-btn]').click(); + cy.get('body').click(0, 0); cy.contains('Share').should('not.exist'); }); diff --git a/web/src/components/MoreOptionsDropdown.tsx b/web/src/components/MoreOptionsDropdown.tsx index e48ce39b3e..06b899b55d 100644 --- a/web/src/components/MoreOptionsDropdown.tsx +++ b/web/src/components/MoreOptionsDropdown.tsx @@ -2,10 +2,11 @@ import * as DropdownMenu from '@radix-ui/react-dropdown-menu'; import { useFeatureFlag } from 'features/feature-flags/api'; import { useShare } from 'hooks/useShare'; import { useAtomValue } from 'jotai'; -import { Link } from 'lucide-react'; +import { ExternalLink, FileDownIcon, Link } from 'lucide-react'; import { useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { FaFacebook, FaLinkedin, FaReddit, FaSquareXTwitter } from 'react-icons/fa6'; +import { useParams } from 'react-router-dom'; import { twMerge } from 'tailwind-merge'; import { getTrackByShareType, ShareType } from 'utils/analytics'; import { @@ -17,7 +18,6 @@ import { import { hasMobileUserAgent as hasMobileUA } from 'utils/helpers'; import { displayByEmissionsAtom, isConsumptionAtom } from 'utils/state/atoms'; -import { DefaultCloseButton } from './DefaultCloseButton'; import { MemoizedShareIcon } from './ShareIcon'; import { TimeDisplay } from './TimeDisplay'; import { Toast, useToastReference } from './Toast'; @@ -42,11 +42,13 @@ export function MoreOptionsDropdown({ title, id, }: MoreOptionsDropdownProps) { + const { zoneId } = useParams(); const { t } = useTranslation(); const [toastMessage, setToastMessage] = useState(''); const { isOpen, onDismiss, onToggleDropdown } = useDropdownCtl(); const reference = useToastReference(); const { copyToClipboard, share } = useShare(); + const downloadUrl = `https://portal.electricitymaps.com/datasets/${zoneId}?utm_source=app&utm_medium=download_button&utm_campaign=csv_download`; const summary = t('more-options-dropdown.summary'); @@ -89,25 +91,46 @@ export function MoreOptionsDropdown({ {children} {isEstimated && (
-

{t('more-options-dropdown.preliminary-data')}

+

{t('more-options-dropdown.preliminary-data')}

)} -
- -
-

{dropdownTitle}

- -
- +
+ + - - + + + +
+
+

{dropdownTitle}

+
+ +
+

{copyLinkText}

diff --git a/web/src/features/panels/zone/ZoneHeader.tsx b/web/src/features/panels/zone/ZoneHeader.tsx index b727a4bb28..b8ed92ed36 100644 --- a/web/src/features/panels/zone/ZoneHeader.tsx +++ b/web/src/features/panels/zone/ZoneHeader.tsx @@ -45,6 +45,7 @@ export default function ZoneHeader({ zoneId, isEstimated }: ZoneHeaderTitleProps
+ {isShareButtonEnabled && isConsumption && (showMoreOptions ? ( diff --git a/web/src/locales/en.json b/web/src/locales/en.json index 578970aad0..afa5942fbc 100644 --- a/web/src/locales/en.json +++ b/web/src/locales/en.json @@ -48,6 +48,7 @@ }, "more-options-dropdown": { "title": "Share", + "download": "Download CSV", "chart-title": "Share chart", "zone-title": "Share zone", "mobile-share-via": "Share via",