diff --git a/docs/sources/developers/http_api/preferences.md b/docs/sources/developers/http_api/preferences.md index 9841b26569a..91a81849cea 100644 --- a/docs/sources/developers/http_api/preferences.md +++ b/docs/sources/developers/http_api/preferences.md @@ -53,7 +53,7 @@ Content-Type: application/json "timezone": "utc", "weekStart": "", "navbar": { - "bookmarkIds": null + "bookmarkUrls": null }, "queryHistory": { "homeTab": "" @@ -142,7 +142,7 @@ Content-Type: application/json "timezone": "", "weekStart": "", "navbar": { - "bookmarkIds": null + "bookmarkUrls": null }, "queryHistory": { "homeTab": "" diff --git a/kinds/preferences/preferences_kind.cue b/kinds/preferences/preferences_kind.cue index 87ca5b76864..265bda07a13 100644 --- a/kinds/preferences/preferences_kind.cue +++ b/kinds/preferences/preferences_kind.cue @@ -49,7 +49,7 @@ lineage: schemas: [{ } @cuetsy(kind="interface") #NavbarPreference: { - bookmarkIds: [...string] + bookmarkUrls: [...string] } @cuetsy(kind="interface") } }] diff --git a/packages/grafana-schema/src/raw/preferences/x/preferences_types.gen.ts b/packages/grafana-schema/src/raw/preferences/x/preferences_types.gen.ts index eb0b2b11c7e..408cd5914b9 100644 --- a/packages/grafana-schema/src/raw/preferences/x/preferences_types.gen.ts +++ b/packages/grafana-schema/src/raw/preferences/x/preferences_types.gen.ts @@ -22,11 +22,11 @@ export interface CookiePreferences { } export interface NavbarPreference { - bookmarkIds: Array; + bookmarkUrls: Array; } export const defaultNavbarPreference: Partial = { - bookmarkIds: [], + bookmarkUrls: [], }; /** diff --git a/pkg/kinds/preferences/preferences_spec_gen.go b/pkg/kinds/preferences/preferences_spec_gen.go index 96506431def..7c30cea20c1 100644 --- a/pkg/kinds/preferences/preferences_spec_gen.go +++ b/pkg/kinds/preferences/preferences_spec_gen.go @@ -18,7 +18,7 @@ type CookiePreferences struct { // NavbarPreference defines model for NavbarPreference. type NavbarPreference struct { - BookmarkIds []string `json:"bookmarkIds"` + BookmarkUrls []string `json:"bookmarkUrls"` } // QueryHistoryPreference defines model for QueryHistoryPreference. diff --git a/pkg/services/navtree/navtreeimpl/navtree.go b/pkg/services/navtree/navtreeimpl/navtree.go index dadb110e0c7..f80bab4566a 100644 --- a/pkg/services/navtree/navtreeimpl/navtree.go +++ b/pkg/services/navtree/navtreeimpl/navtree.go @@ -338,11 +338,11 @@ func (s *ServiceImpl) buildStarredItemsNavLinks(c *contextmodel.ReqContext) ([]* func (s *ServiceImpl) buildBookmarksNavLinks(prefs *pref.Preference, treeRoot *navtree.NavTreeRoot) []*navtree.NavLink { bookmarksChildNavs := []*navtree.NavLink{} - bookmarkIds := prefs.JSONData.Navbar.BookmarkIds + bookmarkUrls := prefs.JSONData.Navbar.BookmarkUrls - if len(bookmarkIds) > 0 { - for _, id := range bookmarkIds { - item := treeRoot.FindById(id) + if len(bookmarkUrls) > 0 { + for _, url := range bookmarkUrls { + item := treeRoot.FindByURL(url) if item != nil { bookmarksChildNavs = append(bookmarksChildNavs, &navtree.NavLink{ Id: item.Id, diff --git a/pkg/services/preference/model.go b/pkg/services/preference/model.go index ac74f7878af..c780dbdc057 100644 --- a/pkg/services/preference/model.go +++ b/pkg/services/preference/model.go @@ -98,7 +98,7 @@ type QueryHistoryPreference struct { } type NavbarPreference struct { - BookmarkIds []string `json:"bookmarkIds"` + BookmarkUrls []string `json:"bookmarkUrls"` } func (j *PreferenceJSONData) FromDB(data []byte) error { diff --git a/pkg/services/preference/prefapi/api.go b/pkg/services/preference/prefapi/api.go index 191a35c546a..3a7659b1aff 100644 --- a/pkg/services/preference/prefapi/api.go +++ b/pkg/services/preference/prefapi/api.go @@ -97,11 +97,11 @@ func GetPreferencesFor(ctx context.Context, dto.Language = &preference.JSONData.Language } - if preference.JSONData.Navbar.BookmarkIds != nil { + if preference.JSONData.Navbar.BookmarkUrls != nil { dto.Navbar = &preferences.NavbarPreference{ - BookmarkIds: []string{}, + BookmarkUrls: []string{}, } - dto.Navbar.BookmarkIds = preference.JSONData.Navbar.BookmarkIds + dto.Navbar.BookmarkUrls = preference.JSONData.Navbar.BookmarkUrls } if preference.JSONData.QueryHistory.HomeTab != "" { diff --git a/pkg/services/preference/prefimpl/pref.go b/pkg/services/preference/prefimpl/pref.go index 48c2932b78c..2050a7dff36 100644 --- a/pkg/services/preference/prefimpl/pref.go +++ b/pkg/services/preference/prefimpl/pref.go @@ -71,8 +71,8 @@ func (s *Service) GetWithDefaults(ctx context.Context, query *pref.GetPreference res.JSONData.QueryHistory.HomeTab = p.JSONData.QueryHistory.HomeTab } - if p.JSONData.Navbar.BookmarkIds != nil { - res.JSONData.Navbar.BookmarkIds = p.JSONData.Navbar.BookmarkIds + if p.JSONData.Navbar.BookmarkUrls != nil { + res.JSONData.Navbar.BookmarkUrls = p.JSONData.Navbar.BookmarkUrls } if p.JSONData.CookiePreferences != nil { @@ -174,11 +174,11 @@ func (s *Service) Patch(ctx context.Context, cmd *pref.PatchPreferenceCommand) e preference.JSONData.Language = *cmd.Language } - if cmd.Navbar != nil && cmd.Navbar.BookmarkIds != nil { + if cmd.Navbar != nil && cmd.Navbar.BookmarkUrls != nil { if preference.JSONData == nil { preference.JSONData = &pref.PreferenceJSONData{} } - preference.JSONData.Navbar.BookmarkIds = cmd.Navbar.BookmarkIds + preference.JSONData.Navbar.BookmarkUrls = cmd.Navbar.BookmarkUrls } if cmd.QueryHistory != nil { diff --git a/public/api-merged.json b/public/api-merged.json index 799a5b71ea6..8522f35233c 100644 --- a/public/api-merged.json +++ b/public/api-merged.json @@ -17112,7 +17112,7 @@ "type": "object", "title": "NavbarPreference defines model for NavbarPreference.", "properties": { - "bookmarkIds": { + "bookmarkUrls": { "type": "array", "items": { "type": "string" diff --git a/public/app/core/components/AppChrome/MegaMenu/MegaMenu.tsx b/public/app/core/components/AppChrome/MegaMenu/MegaMenu.tsx index 1c783f55e15..ce7488d0d9b 100644 --- a/public/app/core/components/AppChrome/MegaMenu/MegaMenu.tsx +++ b/public/app/core/components/AppChrome/MegaMenu/MegaMenu.tsx @@ -54,29 +54,28 @@ export const MegaMenu = memo( }; const isPinned = useCallback( - (id?: string) => { - if (!id || !pinnedItems?.length) { + (url?: string) => { + if (!url || !pinnedItems?.length) { return false; } - return pinnedItems?.includes(id); + return pinnedItems?.includes(url); }, [pinnedItems] ); const onPinItem = (item: NavModelItem) => { - const id = item.id; - if (id && config.featureToggles.pinNavItems) { - const navItem = navTree.find((item) => item.id === id); - const isSaved = isPinned(id); - const newItems = isSaved ? pinnedItems.filter((i) => id !== i) : [...pinnedItems, id]; + const url = item.url; + if (url && config.featureToggles.pinNavItems) { + const isSaved = isPinned(url); + const newItems = isSaved ? pinnedItems.filter((i) => url !== i) : [...pinnedItems, url]; const interactionName = isSaved ? 'grafana_nav_item_unpinned' : 'grafana_nav_item_pinned'; reportInteraction(interactionName, { - path: navItem?.url ?? id, + path: url, }); patchPreferences({ patchPrefsCmd: { navbar: { - bookmarkIds: newItems, + bookmarkUrls: newItems, }, }, }).then((data) => { diff --git a/public/app/core/components/AppChrome/MegaMenu/MegaMenuItem.tsx b/public/app/core/components/AppChrome/MegaMenu/MegaMenuItem.tsx index 3cd54142d75..94410dfa696 100644 --- a/public/app/core/components/AppChrome/MegaMenu/MegaMenuItem.tsx +++ b/public/app/core/components/AppChrome/MegaMenu/MegaMenuItem.tsx @@ -104,9 +104,8 @@ export function MegaMenuItem({ link, activeItem, level = 0, onClick, onPin, isPi }} target={link.target} url={link.url} - id={link.id} onPin={() => onPin(link)} - isPinned={isPinned(link.id)} + isPinned={isPinned(link.url)} >
void; target?: HTMLAnchorElement['target']; url: string; - id?: string; onPin: (id?: string) => void; isPinned?: boolean; } -export function MegaMenuItemText({ children, isActive, onClick, target, url, id, onPin, isPinned }: Props) { +export function MegaMenuItemText({ children, isActive, onClick, target, url, onPin, isPinned }: Props) { const theme = useTheme2(); const styles = getStyles(theme, isActive); const LinkComponent = !target && url.startsWith('/') ? Link : 'a'; @@ -51,12 +50,12 @@ export function MegaMenuItemText({ children, isActive, onClick, target, url, id, > {linkContent} - {config.featureToggles.pinNavItems && id && id !== 'bookmarks' && ( + {config.featureToggles.pinNavItems && url && url !== '/bookmarks' && ( onPin(id)} + onClick={() => onPin(url)} aria-label={ isPinned ? t('navigation.item.remove-bookmark', 'Remove from Bookmarks') diff --git a/public/app/core/components/AppChrome/MegaMenu/hooks.ts b/public/app/core/components/AppChrome/MegaMenu/hooks.ts index ebb6f1437b1..e4cb39d7edc 100644 --- a/public/app/core/components/AppChrome/MegaMenu/hooks.ts +++ b/public/app/core/components/AppChrome/MegaMenu/hooks.ts @@ -5,7 +5,7 @@ import { useGetUserPreferencesQuery } from 'app/features/preferences/api'; export const usePinnedItems = () => { const preferences = useGetUserPreferencesQuery(); - const pinnedItems = useMemo(() => preferences.data?.navbar?.bookmarkIds || [], [preferences]); + const pinnedItems = useMemo(() => preferences.data?.navbar?.bookmarkUrls || [], [preferences]); if (config.featureToggles.pinNavItems) { return pinnedItems; diff --git a/public/app/core/components/SharedPreferences/SharedPreferences.tsx b/public/app/core/components/SharedPreferences/SharedPreferences.tsx index be0d48bb87d..47e063ac363 100644 --- a/public/app/core/components/SharedPreferences/SharedPreferences.tsx +++ b/public/app/core/components/SharedPreferences/SharedPreferences.tsx @@ -73,7 +73,7 @@ export class SharedPreferences extends PureComponent { weekStart: '', language: '', queryHistory: { homeTab: '' }, - navbar: { bookmarkIds: [] }, + navbar: { bookmarkUrls: [] }, }; this.themeOptions = getBuiltInThemes(config.featureToggles.extraThemes).map((theme) => ({ diff --git a/public/app/core/reducers/navBarTree.ts b/public/app/core/reducers/navBarTree.ts index 4fb8438c8f0..eeaa8083b76 100644 --- a/public/app/core/reducers/navBarTree.ts +++ b/public/app/core/reducers/navBarTree.ts @@ -71,7 +71,7 @@ const navTreeSlice = createSlice({ }; bookmarks.children.push(newBookmark); } else { - bookmarks.children = bookmarks.children?.filter((i) => i.id !== item.id) ?? []; + bookmarks.children = bookmarks.children?.filter((i) => i.url !== item.url) ?? []; } } }, diff --git a/public/app/features/preferences/api/user/endpoints.gen.ts b/public/app/features/preferences/api/user/endpoints.gen.ts index 99165c810bd..4d61e519280 100644 --- a/public/app/features/preferences/api/user/endpoints.gen.ts +++ b/public/app/features/preferences/api/user/endpoints.gen.ts @@ -38,7 +38,7 @@ export type CookiePreferencesDefinesModelForCookiePreferences = { }; }; export type NavbarPreferenceDefinesModelForNavbarPreference = { - bookmarkIds?: string[]; + bookmarkUrls?: string[]; }; export type QueryHistoryPreferenceDefinesModelForQueryHistoryPreference = { /** HomeTab one of: '' | 'query' | 'starred'; */ diff --git a/public/openapi3.json b/public/openapi3.json index 080ff5328b6..b51b79aa969 100644 --- a/public/openapi3.json +++ b/public/openapi3.json @@ -7188,7 +7188,7 @@ }, "NavbarPreference": { "properties": { - "bookmarkIds": { + "bookmarkUrls": { "items": { "type": "string" },