From 384e02495582eda2d5506e2f2813562f54349f18 Mon Sep 17 00:00:00 2001 From: Lucy Chen <140550297+lucychen-grafana@users.noreply.github.com> Date: Tue, 14 Nov 2023 13:37:43 -0500 Subject: [PATCH] Task: Add tracking dashboard toolbar options (#77524) * add tracking for toolbar * Add favorite * add timepicker * add reusable analytics file * change the refresh and zoom click prop function * add interaction for timepicker * decouple tracking code * update naming of function * Update packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker.tsx Co-authored-by: Juan Cabanas * use useEffect * remove prop from useEffect * destructure prop * add dependency on useEffect --------- Co-authored-by: Juan Cabanas --- .../DateTimePickers/TimeRangePicker.tsx | 10 ++++++- .../dashboard/components/DashNav/DashNav.tsx | 19 +++++++++++-- .../DashNav/DashNavTimeControls.tsx | 16 ++++++++++- .../dashboard/components/DashNav/analytics.ts | 27 +++++++++++++++++++ 4 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 public/app/features/dashboard/components/DashNav/analytics.ts diff --git a/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker.tsx b/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker.tsx index 8f6640fc32c..40679f0ea27 100644 --- a/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker.tsx +++ b/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker.tsx @@ -2,7 +2,7 @@ import { css, cx } from '@emotion/css'; import { useDialog } from '@react-aria/dialog'; import { FocusScope } from '@react-aria/focus'; import { useOverlay } from '@react-aria/overlays'; -import React, { memo, createRef, useState } from 'react'; +import React, { memo, createRef, useState, useEffect } from 'react'; import { isDateTime, @@ -44,6 +44,7 @@ export interface TimeRangePickerProps { hideQuickRanges?: boolean; widthOverride?: number; isOnCanvas?: boolean; + onToolbarTimePickerClick?: () => void; } export interface State { @@ -68,6 +69,7 @@ export function TimeRangePicker(props: TimeRangePickerProps) { hideQuickRanges, widthOverride, isOnCanvas, + onToolbarTimePickerClick, } = props; const onChange = (timeRange: TimeRange) => { @@ -75,6 +77,12 @@ export function TimeRangePicker(props: TimeRangePickerProps) { setOpen(false); }; + useEffect(() => { + if (isOpen && onToolbarTimePickerClick) { + onToolbarTimePickerClick(); + } + }, [isOpen, onToolbarTimePickerClick]); + const onToolbarButtonSwitch = () => { setOpen((prevState) => !prevState); }; diff --git a/public/app/features/dashboard/components/DashNav/DashNav.tsx b/public/app/features/dashboard/components/DashNav/DashNav.tsx index 7dd129604b3..0c552a25dc4 100644 --- a/public/app/features/dashboard/components/DashNav/DashNav.tsx +++ b/public/app/features/dashboard/components/DashNav/DashNav.tsx @@ -35,6 +35,13 @@ import { DashboardMetaChangedEvent, ShowModalReactEvent } from 'app/types/events import { DashNavButton } from './DashNavButton'; import { DashNavTimeControls } from './DashNavTimeControls'; import { ShareButton } from './ShareButton'; +import { + trackToolbarFavoritesClick, + trackToolbarRefreshClick, + trackToolbarSettingsClick, + trackToolbarTimePickerClick, + trackToolbarZoomClick, +} from './analytics'; const mapDispatchToProps = { setStarred, @@ -122,6 +129,7 @@ export const DashNav = React.memo((props) => { }; const onStarDashboard = () => { + trackToolbarFavoritesClick(); const dashboardSrv = getDashboardSrv(); const { dashboard, setStarred } = props; @@ -133,6 +141,7 @@ export const DashNav = React.memo((props) => { }; const onOpenSettings = () => { + trackToolbarSettingsClick(); locationService.partial({ editview: 'settings' }); }; @@ -242,9 +251,15 @@ export const DashNav = React.memo((props) => { if (hideTimePicker) { return null; } - return ( - + ); }; diff --git a/public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx b/public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx index 532feb98936..aef39caf3d2 100644 --- a/public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx +++ b/public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx @@ -17,6 +17,9 @@ export interface Props { dashboard: DashboardModel; onChangeTimeZone: (timeZone: TimeZone) => void; isOnCanvas?: boolean; + onToolbarRefreshClick?: () => void; + onToolbarZoomClick?: () => void; + onToolbarTimePickerClick?: () => void; } export class DashNavTimeControls extends Component { @@ -75,9 +78,19 @@ export class DashNavTimeControls extends Component { }; onZoom = () => { + if (this.props.onToolbarZoomClick) { + this.props.onToolbarZoomClick(); + } appEvents.publish(new ZoomOutEvent({ scale: 2 })); }; + onRefreshClick = () => { + if (this.props.onToolbarRefreshClick) { + this.props.onToolbarRefreshClick(); + } + this.onRefresh(); + }; + render() { const { dashboard, isOnCanvas } = this.props; const { refresh_intervals } = dashboard.timepicker; @@ -106,10 +119,11 @@ export class DashNavTimeControls extends Component { onChangeTimeZone={this.onChangeTimeZone} onChangeFiscalYearStartMonth={this.onChangeFiscalYearStartMonth} isOnCanvas={isOnCanvas} + onToolbarTimePickerClick={this.props.onToolbarTimePickerClick} />