diff --git a/public/app/features/dashboard-scene/edit-pane/EditPaneHeader.tsx b/public/app/features/dashboard-scene/edit-pane/EditPaneHeader.tsx index e0e5a74a10a..b2a7a149715 100644 --- a/public/app/features/dashboard-scene/edit-pane/EditPaneHeader.tsx +++ b/public/app/features/dashboard-scene/edit-pane/EditPaneHeader.tsx @@ -4,7 +4,7 @@ import { GrafanaTheme2 } from '@grafana/data'; import { selectors } from '@grafana/e2e-selectors'; import { t } from '@grafana/i18n'; import { Button, Menu, Stack, Text, useStyles2, Dropdown, Icon, IconButton } from '@grafana/ui'; -import { trackDeleteDashboardElement } from 'app/features/dashboard/utils/tracking'; +import { trackDeleteDashboardElement } from 'app/features/dashboard-scene/utils/tracking'; import { EditableDashboardElement } from '../scene/types/EditableDashboardElement'; diff --git a/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.ts b/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.ts index 083a5e08799..00c02b5d727 100644 --- a/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.ts +++ b/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.ts @@ -20,7 +20,7 @@ import { isDashboardV2Resource, isDashboardV2Spec, isV2StoredVersion } from 'app import { dashboardLoaderSrv, DashboardLoaderSrvV2 } from 'app/features/dashboard/services/DashboardLoaderSrv'; import { getDashboardSrv } from 'app/features/dashboard/services/DashboardSrv'; import { emitDashboardViewEvent } from 'app/features/dashboard/state/analyticsProcessor'; -import { trackDashboardSceneLoaded } from 'app/features/dashboard/utils/tracking'; +import { trackDashboardSceneLoaded } from 'app/features/dashboard-scene/utils/tracking'; import { playlistSrv } from 'app/features/playlist/PlaylistSrv'; import { ProvisioningPreview } from 'app/features/provisioning/types'; import { dispatch } from 'app/store/store'; diff --git a/public/app/features/dashboard-scene/saving/useSaveDashboard.ts b/public/app/features/dashboard-scene/saving/useSaveDashboard.ts index e6ca31a2e9f..7bfc54a752b 100644 --- a/public/app/features/dashboard-scene/saving/useSaveDashboard.ts +++ b/public/app/features/dashboard-scene/saving/useSaveDashboard.ts @@ -2,7 +2,7 @@ import { useAsyncFn } from 'react-use'; import { locationUtil } from '@grafana/data'; import { t } from '@grafana/i18n'; -import { locationService, reportInteraction } from '@grafana/runtime'; +import { locationService } from '@grafana/runtime'; import { Dashboard } from '@grafana/schema'; import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2'; import appEvents from 'app/core/app_events'; @@ -15,6 +15,8 @@ import { useDispatch } from 'app/types/store'; import { updateDashboardUidLastUsedDatasource } from '../../dashboard/utils/dashboard'; import { DashboardScene } from '../scene/DashboardScene'; +import { DashboardInteractions } from '../utils/interactions'; +import { trackDashboardSceneCreatedOrSaved } from '../utils/tracking'; export function useSaveDashboard(isCopy = false) { const dispatch = useDispatch(); @@ -73,18 +75,14 @@ export function useSaveDashboard(isCopy = false) { appEvents.publish(new DashboardSavedEvent()); notifyApp.success(t('dashboard-scene.use-save-dashboard.message-dashboard-saved', 'Dashboard saved')); - //Update local storage dashboard to handle things like last used datasource updateDashboardUidLastUsedDatasource(resultData.uid); if (isCopy) { - reportInteraction('grafana_dashboard_copied', { - name: saveModel.title, - url: resultData.url, - }); + DashboardInteractions.dashboardCopied({ name: saveModel.title || '', url: resultData.url }); } else { - reportInteraction(`grafana_dashboard_${options.isNew ? 'created' : 'saved'}`, { - name: saveModel.title, - url: resultData.url, + trackDashboardSceneCreatedOrSaved(!!options.isNew, scene, { + name: saveModel.title || '', + url: resultData.url || '', }); } diff --git a/public/app/features/dashboard-scene/scene/DashboardScene.tsx b/public/app/features/dashboard-scene/scene/DashboardScene.tsx index 867bfc5d22c..be793d5f1d1 100644 --- a/public/app/features/dashboard-scene/scene/DashboardScene.tsx +++ b/public/app/features/dashboard-scene/scene/DashboardScene.tsx @@ -716,6 +716,10 @@ export class DashboardScene extends SceneObjectBase impleme return this.serializer.getTrackingInformation(this); } + public getDynamicDashboardsTrackingInformation() { + return this.serializer.getDynamicDashboardsTrackingInformation(this); + } + public async onDashboardDelete() { // Need to mark it non dirty to navigate away without unsaved changes warning this.setState({ isDirty: false }); diff --git a/public/app/features/dashboard-scene/scene/NavToolbarActions.test.tsx b/public/app/features/dashboard-scene/scene/NavToolbarActions.test.tsx index 0a806693b3e..e42df99d74a 100644 --- a/public/app/features/dashboard-scene/scene/NavToolbarActions.test.tsx +++ b/public/app/features/dashboard-scene/scene/NavToolbarActions.test.tsx @@ -160,21 +160,30 @@ describe('NavToolbarActions', () => { it('should call DashboardInteractions.editButtonClicked with outlineExpanded:true if grafana.dashboard.edit-pane.outline.collapsed is undefined', async () => { setup(); await userEvent.click(await screen.findByTestId(selectors.components.NavToolbar.editDashboard.editButton)); - expect(DashboardInteractions.editButtonClicked).toHaveBeenCalledWith({ outlineExpanded: false }); + expect(DashboardInteractions.editButtonClicked).toHaveBeenCalledWith({ + dashboardUid: 'dash-1', + outlineExpanded: false, + }); }); it('should call DashboardInteractions.editButtonClicked with outlineExpanded:true if grafana.dashboard.edit-pane.outline.collapsed is false', async () => { localStorageMock.setItem('grafana.dashboard.edit-pane.outline.collapsed', 'false'); setup(); await userEvent.click(await screen.findByTestId(selectors.components.NavToolbar.editDashboard.editButton)); - expect(DashboardInteractions.editButtonClicked).toHaveBeenCalledWith({ outlineExpanded: true }); + expect(DashboardInteractions.editButtonClicked).toHaveBeenCalledWith({ + dashboardUid: 'dash-1', + outlineExpanded: true, + }); }); it('should call DashboardInteractions.editButtonClicked with outlineExpanded:false if grafana.dashboard.edit-pane.outline.collapsed is true', async () => { localStorageMock.setItem('grafana.dashboard.edit-pane.outline.collapsed', 'true'); setup(); await userEvent.click(await screen.findByTestId(selectors.components.NavToolbar.editDashboard.editButton)); - expect(DashboardInteractions.editButtonClicked).toHaveBeenCalledWith({ outlineExpanded: false }); + expect(DashboardInteractions.editButtonClicked).toHaveBeenCalledWith({ + dashboardUid: 'dash-1', + outlineExpanded: false, + }); }); }); }); diff --git a/public/app/features/dashboard-scene/scene/NavToolbarActions.tsx b/public/app/features/dashboard-scene/scene/NavToolbarActions.tsx index 210561d3654..4e8caac3bc6 100644 --- a/public/app/features/dashboard-scene/scene/NavToolbarActions.tsx +++ b/public/app/features/dashboard-scene/scene/NavToolbarActions.tsx @@ -321,7 +321,7 @@ export function ToolbarActions({ dashboard }: Props) { render: () => (