From 670884805606aa834f311e4736b1ecac8aa3b98d Mon Sep 17 00:00:00 2001 From: Lucy Chen <140550297+lucychen-grafana@users.noreply.github.com> Date: Mon, 27 Nov 2023 09:53:48 -0500 Subject: [PATCH] Add tracking dashboard toolbar options v2 (#78237) * Add share, save, add tracking * change event name * revert naming * change naming of action --- .../AddPanelButton/AddPanelButton.tsx | 11 +++++++++-- .../dashboard/components/DashNav/DashNav.tsx | 7 ++++++- .../components/DashNav/ShareButton.tsx | 2 ++ .../dashboard/components/DashNav/analytics.ts | 18 ++++++++++++------ 4 files changed, 29 insertions(+), 9 deletions(-) diff --git a/public/app/features/dashboard/components/AddPanelButton/AddPanelButton.tsx b/public/app/features/dashboard/components/AddPanelButton/AddPanelButton.tsx index 869cb4f8dde..ce2c6fc7b09 100644 --- a/public/app/features/dashboard/components/AddPanelButton/AddPanelButton.tsx +++ b/public/app/features/dashboard/components/AddPanelButton/AddPanelButton.tsx @@ -1,5 +1,5 @@ import { css, cx } from '@emotion/css'; -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { GrafanaTheme2 } from '@grafana/data'; import { selectors } from '@grafana/e2e-selectors'; @@ -11,12 +11,19 @@ import AddPanelMenu from './AddPanelMenu'; export interface Props { dashboard: DashboardModel; + onToolbarAddMenuOpen?: () => void; } -const AddPanelButton = ({ dashboard }: Props) => { +const AddPanelButton = ({ dashboard, onToolbarAddMenuOpen }: Props) => { const styles = getStyles(useTheme2()); const [isMenuOpen, setIsMenuOpen] = useState(false); + useEffect(() => { + if (isMenuOpen && onToolbarAddMenuOpen) { + onToolbarAddMenuOpen(); + } + }, [isMenuOpen, onToolbarAddMenuOpen]); + return ( } diff --git a/public/app/features/dashboard/components/DashNav/DashNav.tsx b/public/app/features/dashboard/components/DashNav/DashNav.tsx index 0c552a25dc4..ad37adc2fed 100644 --- a/public/app/features/dashboard/components/DashNav/DashNav.tsx +++ b/public/app/features/dashboard/components/DashNav/DashNav.tsx @@ -41,6 +41,8 @@ import { trackToolbarSettingsClick, trackToolbarTimePickerClick, trackToolbarZoomClick, + trackToolbarSaveClick, + trackToolbarAddClick, } from './analytics'; const mapDispatchToProps = { @@ -280,7 +282,9 @@ export const DashNav = React.memo((props) => { if (canEdit && !isFullscreen) { if (config.featureToggles.emptyDashboardPage) { - buttons.push(); + buttons.push( + + ); } else { buttons.push( ((props) => { tooltip={t('dashboard.toolbar.save', 'Save dashboard')} icon="save" onClick={() => { + trackToolbarSaveClick(); showModal(SaveDashboardDrawer, { dashboard, onDismiss: hideModal, diff --git a/public/app/features/dashboard/components/DashNav/ShareButton.tsx b/public/app/features/dashboard/components/DashNav/ShareButton.tsx index f21b9f560ad..8497d74ec22 100644 --- a/public/app/features/dashboard/components/DashNav/ShareButton.tsx +++ b/public/app/features/dashboard/components/DashNav/ShareButton.tsx @@ -8,6 +8,7 @@ import { DashboardModel } from 'app/features/dashboard/state'; import { ShareModal } from '../ShareModal'; import { DashNavButton } from './DashNavButton'; +import { trackToolbarShareClick } from './analytics'; export const ShareButton = ({ dashboard }: { dashboard: DashboardModel }) => { const [queryParams] = useQueryParams(); @@ -32,6 +33,7 @@ export const ShareButton = ({ dashboard }: { dashboard: DashboardModel }) => { icon="share-alt" iconSize="lg" onClick={() => { + trackToolbarShareClick(); showModal(ShareModal, { dashboard, onDismiss: hideModal, diff --git a/public/app/features/dashboard/components/DashNav/analytics.ts b/public/app/features/dashboard/components/DashNav/analytics.ts index a95016bfbdf..c572af37813 100644 --- a/public/app/features/dashboard/components/DashNav/analytics.ts +++ b/public/app/features/dashboard/components/DashNav/analytics.ts @@ -1,27 +1,33 @@ import { reportInteraction } from '@grafana/runtime'; - export const shareAnalyticsEventNames: { [key: string]: string; } = { dashboardsToolbarActionsClicked: 'dashboards_toolbar_actions_clicked', }; - export function trackToolbarFavoritesClick() { reportInteraction(shareAnalyticsEventNames.dashboardsToolbarActionsClicked, { item: 'favorites' }); } - export function trackToolbarSettingsClick() { reportInteraction(shareAnalyticsEventNames.dashboardsToolbarActionsClicked, { item: 'settings' }); } - export function trackToolbarRefreshClick() { reportInteraction(shareAnalyticsEventNames.dashboardsToolbarActionsClicked, { item: 'refresh' }); } - export function trackToolbarTimePickerClick() { reportInteraction(shareAnalyticsEventNames.dashboardsToolbarActionsClicked, { item: 'time_picker' }); } - export function trackToolbarZoomClick() { reportInteraction(shareAnalyticsEventNames.dashboardsToolbarActionsClicked, { item: 'zoom_out_time_range' }); } + +export function trackToolbarShareClick() { + reportInteraction(shareAnalyticsEventNames.dashboardsToolbarActionsClicked, { item: 'share' }); +} + +export function trackToolbarSaveClick() { + reportInteraction(shareAnalyticsEventNames.dashboardsToolbarActionsClicked, { item: 'save' }); +} + +export function trackToolbarAddClick() { + reportInteraction(shareAnalyticsEventNames.dashboardsToolbarActionsClicked, { item: 'add' }); +}