From 8966083132637f51d36df453da09f21f7bc79ab4 Mon Sep 17 00:00:00 2001 From: Alex Khomenko Date: Tue, 23 Jul 2024 14:58:50 +0300 Subject: [PATCH] Pin Nav Items: Add tracking for pinned items clicks (#90803) * Pin Nav Items: Add tracking for pinned items clicks * Update id * Simplify onClick logic --- pkg/services/navtree/models.go | 2 ++ pkg/services/navtree/navtreeimpl/navtree.go | 3 ++- public/app/core/components/AppChrome/MegaMenu/utils.ts | 1 + public/app/core/reducers/navBarTree.ts | 5 ++--- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/pkg/services/navtree/models.go b/pkg/services/navtree/models.go index 963f5364d9e..3c7078f44c0 100644 --- a/pkg/services/navtree/models.go +++ b/pkg/services/navtree/models.go @@ -49,6 +49,7 @@ const ( NavIDCfgGeneral = "cfg/general" NavIDCfgPlugins = "cfg/plugins" NavIDCfgAccess = "cfg/access" + NavIDBookmarks = "bookmarks" ) type NavLink struct { @@ -70,6 +71,7 @@ type NavLink struct { PluginID string `json:"pluginId,omitempty"` // (Optional) The ID of the plugin that registered nav link (e.g. as a standalone plugin page) IsCreateAction bool `json:"isCreateAction,omitempty"` Keywords []string `json:"keywords,omitempty"` + ParentItem *NavLink `json:"parentItem,omitempty"` // (Optional) The parent item of the nav link } func (node *NavLink) Sort() { diff --git a/pkg/services/navtree/navtreeimpl/navtree.go b/pkg/services/navtree/navtreeimpl/navtree.go index e3805fffb83..47572206831 100644 --- a/pkg/services/navtree/navtreeimpl/navtree.go +++ b/pkg/services/navtree/navtreeimpl/navtree.go @@ -168,7 +168,7 @@ func (s *ServiceImpl) GetNavTree(c *contextmodel.ReqContext, prefs *pref.Prefere treeRoot.AddSection(&navtree.NavLink{ Text: "Bookmarks", - Id: "bookmarks", + Id: navtree.NavIDBookmarks, Icon: "bookmark", SortWeight: navtree.WeightBookmarks, Children: bookmarks, @@ -355,6 +355,7 @@ func (s *ServiceImpl) buildBookmarksNavLinks(prefs *pref.Preference, treeRoot *n PluginID: item.PluginID, IsCreateAction: item.IsCreateAction, Keywords: item.Keywords, + ParentItem: &navtree.NavLink{Id: navtree.NavIDBookmarks}, }) } } diff --git a/public/app/core/components/AppChrome/MegaMenu/utils.ts b/public/app/core/components/AppChrome/MegaMenu/utils.ts index 90950cc25cd..908edd8ead6 100644 --- a/public/app/core/components/AppChrome/MegaMenu/utils.ts +++ b/public/app/core/components/AppChrome/MegaMenu/utils.ts @@ -38,6 +38,7 @@ export const enrichWithInteractionTracking = (item: NavModelItem, megaMenuDocked reportInteraction('grafana_navigation_item_clicked', { path: newItem.url ?? newItem.id, menuIsDocked: megaMenuDockedState, + itemIsBookmarked: Boolean(config.featureToggles.pinNavItems && newItem?.parentItem?.id === 'bookmarks'), }); onClick?.(); }; diff --git a/public/app/core/reducers/navBarTree.ts b/public/app/core/reducers/navBarTree.ts index 88d70dba538..4fb8438c8f0 100644 --- a/public/app/core/reducers/navBarTree.ts +++ b/public/app/core/reducers/navBarTree.ts @@ -59,9 +59,7 @@ const navTreeSlice = createSlice({ const { item, isSaved } = action.payload; if (bookmarks) { if (isSaved) { - if (!bookmarks.children) { - bookmarks.children = []; - } + bookmarks.children ||= []; const newBookmark: NavModelItem = { ...item, // Clear the children, sortWeight and empty message of the item @@ -69,6 +67,7 @@ const navTreeSlice = createSlice({ sortWeight: 0, emptyMessageId: '', emptyMessage: '', + parentItem: { id: bookmarks.id, text: bookmarks.text }, }; bookmarks.children.push(newBookmark); } else {