mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Navigation: Backend to save navigation customization into preferences (#89783)
This commit is contained in:
parent
68e30e2b4b
commit
9004b58851
@ -53,7 +53,7 @@ Content-Type: application/json
|
|||||||
"timezone": "utc",
|
"timezone": "utc",
|
||||||
"weekStart": "",
|
"weekStart": "",
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"savedItems": null
|
"savedItemIds": null
|
||||||
},
|
},
|
||||||
"queryHistory": {
|
"queryHistory": {
|
||||||
"homeTab": ""
|
"homeTab": ""
|
||||||
@ -142,7 +142,7 @@ Content-Type: application/json
|
|||||||
"timezone": "",
|
"timezone": "",
|
||||||
"weekStart": "",
|
"weekStart": "",
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"savedItems": null
|
"savedItemIds": null
|
||||||
},
|
},
|
||||||
"queryHistory": {
|
"queryHistory": {
|
||||||
"homeTab": ""
|
"homeTab": ""
|
||||||
|
@ -32,6 +32,9 @@ lineage: schemas: [{
|
|||||||
|
|
||||||
// Cookie preferences
|
// Cookie preferences
|
||||||
cookiePreferences?: #CookiePreferences
|
cookiePreferences?: #CookiePreferences
|
||||||
|
|
||||||
|
// Navigation preferences
|
||||||
|
navbar?: #NavbarPreference
|
||||||
} @cuetsy(kind="interface")
|
} @cuetsy(kind="interface")
|
||||||
|
|
||||||
#QueryHistoryPreference: {
|
#QueryHistoryPreference: {
|
||||||
@ -44,5 +47,9 @@ lineage: schemas: [{
|
|||||||
performance?: {}
|
performance?: {}
|
||||||
functional?: {}
|
functional?: {}
|
||||||
} @cuetsy(kind="interface")
|
} @cuetsy(kind="interface")
|
||||||
|
|
||||||
|
#NavbarPreference: {
|
||||||
|
savedItemIds: [...string]
|
||||||
|
} @cuetsy(kind="interface")
|
||||||
}
|
}
|
||||||
}]
|
}]
|
||||||
|
@ -125,9 +125,13 @@ export type { LibraryPanel } from './veneer/librarypanel.types';
|
|||||||
export type {
|
export type {
|
||||||
Preferences,
|
Preferences,
|
||||||
QueryHistoryPreference,
|
QueryHistoryPreference,
|
||||||
CookiePreferences
|
CookiePreferences,
|
||||||
|
NavbarPreference
|
||||||
} from './raw/preferences/x/preferences_types.gen';
|
} from './raw/preferences/x/preferences_types.gen';
|
||||||
|
|
||||||
|
// Raw generated enums and default consts from preferences kind.
|
||||||
|
export { defaultNavbarPreference } from './raw/preferences/x/preferences_types.gen';
|
||||||
|
|
||||||
// Raw generated types from PublicDashboard kind.
|
// Raw generated types from PublicDashboard kind.
|
||||||
export type { PublicDashboard } from './raw/publicdashboard/x/publicdashboard_types.gen';
|
export type { PublicDashboard } from './raw/publicdashboard/x/publicdashboard_types.gen';
|
||||||
|
|
||||||
|
@ -21,6 +21,14 @@ export interface CookiePreferences {
|
|||||||
performance?: Record<string, unknown>;
|
performance?: Record<string, unknown>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface NavbarPreference {
|
||||||
|
savedItemIds: Array<string>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const defaultNavbarPreference: Partial<NavbarPreference> = {
|
||||||
|
savedItemIds: [],
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Spec defines user, team or org Grafana preferences
|
* Spec defines user, team or org Grafana preferences
|
||||||
* swagger:model Preferences
|
* swagger:model Preferences
|
||||||
@ -38,6 +46,10 @@ export interface Preferences {
|
|||||||
* Selected language (beta)
|
* Selected language (beta)
|
||||||
*/
|
*/
|
||||||
language?: string;
|
language?: string;
|
||||||
|
/**
|
||||||
|
* Navigation preferences
|
||||||
|
*/
|
||||||
|
navbar?: NavbarPreference;
|
||||||
/**
|
/**
|
||||||
* Explore query history preferences
|
* Explore query history preferences
|
||||||
*/
|
*/
|
||||||
|
@ -18,6 +18,7 @@ type UpdatePrefsCmd struct {
|
|||||||
QueryHistory *pref.QueryHistoryPreference `json:"queryHistory,omitempty"`
|
QueryHistory *pref.QueryHistoryPreference `json:"queryHistory,omitempty"`
|
||||||
Language string `json:"language"`
|
Language string `json:"language"`
|
||||||
Cookies []pref.CookieType `json:"cookies,omitempty"`
|
Cookies []pref.CookieType `json:"cookies,omitempty"`
|
||||||
|
Navbar *pref.NavbarPreference `json:"navbar,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// swagger:model
|
// swagger:model
|
||||||
@ -34,4 +35,5 @@ type PatchPrefsCmd struct {
|
|||||||
QueryHistory *pref.QueryHistoryPreference `json:"queryHistory,omitempty"`
|
QueryHistory *pref.QueryHistoryPreference `json:"queryHistory,omitempty"`
|
||||||
HomeDashboardUID *string `json:"homeDashboardUID,omitempty"`
|
HomeDashboardUID *string `json:"homeDashboardUID,omitempty"`
|
||||||
Cookies []pref.CookieType `json:"cookies,omitempty"`
|
Cookies []pref.CookieType `json:"cookies,omitempty"`
|
||||||
|
Navbar *pref.NavbarPreference `json:"navbar,omitempty"`
|
||||||
}
|
}
|
||||||
|
@ -155,6 +155,7 @@ func (hs *HTTPServer) patchPreferencesFor(ctx context.Context, orgID, userID, te
|
|||||||
Language: dtoCmd.Language,
|
Language: dtoCmd.Language,
|
||||||
QueryHistory: dtoCmd.QueryHistory,
|
QueryHistory: dtoCmd.QueryHistory,
|
||||||
CookiePreferences: dtoCmd.Cookies,
|
CookiePreferences: dtoCmd.Cookies,
|
||||||
|
Navbar: dtoCmd.Navbar,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := hs.preferenceService.Patch(ctx, &patchCmd); err != nil {
|
if err := hs.preferenceService.Patch(ctx, &patchCmd); err != nil {
|
||||||
|
@ -16,6 +16,11 @@ type CookiePreferences struct {
|
|||||||
Performance map[string]any `json:"performance,omitempty"`
|
Performance map[string]any `json:"performance,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NavbarPreference defines model for NavbarPreference.
|
||||||
|
type NavbarPreference struct {
|
||||||
|
SavedItemIds []string `json:"savedItemIds"`
|
||||||
|
}
|
||||||
|
|
||||||
// QueryHistoryPreference defines model for QueryHistoryPreference.
|
// QueryHistoryPreference defines model for QueryHistoryPreference.
|
||||||
type QueryHistoryPreference struct {
|
type QueryHistoryPreference struct {
|
||||||
// HomeTab one of: '' | 'query' | 'starred';
|
// HomeTab one of: '' | 'query' | 'starred';
|
||||||
@ -32,6 +37,7 @@ type Spec struct {
|
|||||||
|
|
||||||
// Selected language (beta)
|
// Selected language (beta)
|
||||||
Language *string `json:"language,omitempty"`
|
Language *string `json:"language,omitempty"`
|
||||||
|
Navbar *NavbarPreference `json:"navbar,omitempty"`
|
||||||
QueryHistory *QueryHistoryPreference `json:"queryHistory,omitempty"`
|
QueryHistory *QueryHistoryPreference `json:"queryHistory,omitempty"`
|
||||||
|
|
||||||
// Theme light, dark, empty is default
|
// Theme light, dark, empty is default
|
||||||
|
@ -67,6 +67,7 @@ type SavePreferenceCommand struct {
|
|||||||
Language string `json:"language,omitempty"`
|
Language string `json:"language,omitempty"`
|
||||||
QueryHistory *QueryHistoryPreference `json:"queryHistory,omitempty"`
|
QueryHistory *QueryHistoryPreference `json:"queryHistory,omitempty"`
|
||||||
CookiePreferences []CookieType `json:"cookiePreferences,omitempty"`
|
CookiePreferences []CookieType `json:"cookiePreferences,omitempty"`
|
||||||
|
Navbar *NavbarPreference `json:"navbar,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type PatchPreferenceCommand struct {
|
type PatchPreferenceCommand struct {
|
||||||
@ -82,18 +83,24 @@ type PatchPreferenceCommand struct {
|
|||||||
Language *string `json:"language,omitempty"`
|
Language *string `json:"language,omitempty"`
|
||||||
QueryHistory *QueryHistoryPreference `json:"queryHistory,omitempty"`
|
QueryHistory *QueryHistoryPreference `json:"queryHistory,omitempty"`
|
||||||
CookiePreferences []CookieType `json:"cookiePreferences,omitempty"`
|
CookiePreferences []CookieType `json:"cookiePreferences,omitempty"`
|
||||||
|
Navbar *NavbarPreference `json:"navbar,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type PreferenceJSONData struct {
|
type PreferenceJSONData struct {
|
||||||
Language string `json:"language"`
|
Language string `json:"language"`
|
||||||
QueryHistory QueryHistoryPreference `json:"queryHistory"`
|
QueryHistory QueryHistoryPreference `json:"queryHistory"`
|
||||||
CookiePreferences map[string]struct{} `json:"cookiePreferences"`
|
CookiePreferences map[string]struct{} `json:"cookiePreferences"`
|
||||||
|
Navbar NavbarPreference `json:"navbar"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type QueryHistoryPreference struct {
|
type QueryHistoryPreference struct {
|
||||||
HomeTab string `json:"homeTab"`
|
HomeTab string `json:"homeTab"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type NavbarPreference struct {
|
||||||
|
SavedItemIds []string `json:"savedItemIds"`
|
||||||
|
}
|
||||||
|
|
||||||
func (j *PreferenceJSONData) FromDB(data []byte) error {
|
func (j *PreferenceJSONData) FromDB(data []byte) error {
|
||||||
dec := json.NewDecoder(bytes.NewBuffer(data))
|
dec := json.NewDecoder(bytes.NewBuffer(data))
|
||||||
dec.UseNumber()
|
dec.UseNumber()
|
||||||
|
@ -46,6 +46,7 @@ func UpdatePreferencesFor(ctx context.Context,
|
|||||||
HomeDashboardID: dtoCmd.HomeDashboardID,
|
HomeDashboardID: dtoCmd.HomeDashboardID,
|
||||||
QueryHistory: dtoCmd.QueryHistory,
|
QueryHistory: dtoCmd.QueryHistory,
|
||||||
CookiePreferences: dtoCmd.Cookies,
|
CookiePreferences: dtoCmd.Cookies,
|
||||||
|
Navbar: dtoCmd.Navbar,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := preferenceService.Save(ctx, &saveCmd); err != nil {
|
if err := preferenceService.Save(ctx, &saveCmd); err != nil {
|
||||||
@ -96,6 +97,13 @@ func GetPreferencesFor(ctx context.Context,
|
|||||||
dto.Language = &preference.JSONData.Language
|
dto.Language = &preference.JSONData.Language
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if preference.JSONData.Navbar.SavedItemIds != nil {
|
||||||
|
dto.Navbar = &preferences.NavbarPreference{
|
||||||
|
SavedItemIds: []string{},
|
||||||
|
}
|
||||||
|
dto.Navbar.SavedItemIds = preference.JSONData.Navbar.SavedItemIds
|
||||||
|
}
|
||||||
|
|
||||||
if preference.JSONData.QueryHistory.HomeTab != "" {
|
if preference.JSONData.QueryHistory.HomeTab != "" {
|
||||||
dto.QueryHistory = &preferences.QueryHistoryPreference{
|
dto.QueryHistory = &preferences.QueryHistoryPreference{
|
||||||
HomeTab: &preference.JSONData.QueryHistory.HomeTab,
|
HomeTab: &preference.JSONData.QueryHistory.HomeTab,
|
||||||
|
@ -71,6 +71,10 @@ func (s *Service) GetWithDefaults(ctx context.Context, query *pref.GetPreference
|
|||||||
res.JSONData.QueryHistory.HomeTab = p.JSONData.QueryHistory.HomeTab
|
res.JSONData.QueryHistory.HomeTab = p.JSONData.QueryHistory.HomeTab
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if p.JSONData.Navbar.SavedItemIds != nil {
|
||||||
|
res.JSONData.Navbar.SavedItemIds = p.JSONData.Navbar.SavedItemIds
|
||||||
|
}
|
||||||
|
|
||||||
if p.JSONData.CookiePreferences != nil {
|
if p.JSONData.CookiePreferences != nil {
|
||||||
res.JSONData.CookiePreferences = p.JSONData.CookiePreferences
|
res.JSONData.CookiePreferences = p.JSONData.CookiePreferences
|
||||||
}
|
}
|
||||||
@ -170,6 +174,13 @@ func (s *Service) Patch(ctx context.Context, cmd *pref.PatchPreferenceCommand) e
|
|||||||
preference.JSONData.Language = *cmd.Language
|
preference.JSONData.Language = *cmd.Language
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if cmd.Navbar != nil && cmd.Navbar.SavedItemIds != nil {
|
||||||
|
if preference.JSONData == nil {
|
||||||
|
preference.JSONData = &pref.PreferenceJSONData{}
|
||||||
|
}
|
||||||
|
preference.JSONData.Navbar.SavedItemIds = cmd.Navbar.SavedItemIds
|
||||||
|
}
|
||||||
|
|
||||||
if cmd.QueryHistory != nil {
|
if cmd.QueryHistory != nil {
|
||||||
if preference.JSONData == nil {
|
if preference.JSONData == nil {
|
||||||
preference.JSONData = &pref.PreferenceJSONData{}
|
preference.JSONData = &pref.PreferenceJSONData{}
|
||||||
@ -257,6 +268,9 @@ func preferenceData(cmd *pref.SavePreferenceCommand) (*pref.PreferenceJSONData,
|
|||||||
Language: cmd.Language,
|
Language: cmd.Language,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if cmd.Navbar != nil {
|
||||||
|
jsonData.Navbar = *cmd.Navbar
|
||||||
|
}
|
||||||
if cmd.QueryHistory != nil {
|
if cmd.QueryHistory != nil {
|
||||||
jsonData.QueryHistory = *cmd.QueryHistory
|
jsonData.QueryHistory = *cmd.QueryHistory
|
||||||
}
|
}
|
||||||
|
@ -17014,6 +17014,18 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"NavbarPreference": {
|
||||||
|
"type": "object",
|
||||||
|
"title": "NavbarPreference defines model for NavbarPreference.",
|
||||||
|
"properties": {
|
||||||
|
"savedItemIds": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"NewApiKeyResult": {
|
"NewApiKeyResult": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -17577,6 +17589,9 @@
|
|||||||
"language": {
|
"language": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"navbar": {
|
||||||
|
"$ref": "#/definitions/NavbarPreference"
|
||||||
|
},
|
||||||
"queryHistory": {
|
"queryHistory": {
|
||||||
"$ref": "#/definitions/QueryHistoryPreference"
|
"$ref": "#/definitions/QueryHistoryPreference"
|
||||||
},
|
},
|
||||||
@ -18168,6 +18183,9 @@
|
|||||||
"description": "Selected language (beta)",
|
"description": "Selected language (beta)",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"navbar": {
|
||||||
|
"$ref": "#/definitions/NavbarPreference"
|
||||||
|
},
|
||||||
"queryHistory": {
|
"queryHistory": {
|
||||||
"$ref": "#/definitions/QueryHistoryPreference"
|
"$ref": "#/definitions/QueryHistoryPreference"
|
||||||
},
|
},
|
||||||
@ -21419,6 +21437,9 @@
|
|||||||
"language": {
|
"language": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"navbar": {
|
||||||
|
"$ref": "#/definitions/NavbarPreference"
|
||||||
|
},
|
||||||
"queryHistory": {
|
"queryHistory": {
|
||||||
"$ref": "#/definitions/QueryHistoryPreference"
|
"$ref": "#/definitions/QueryHistoryPreference"
|
||||||
},
|
},
|
||||||
|
@ -7140,6 +7140,18 @@
|
|||||||
},
|
},
|
||||||
"type": "object"
|
"type": "object"
|
||||||
},
|
},
|
||||||
|
"NavbarPreference": {
|
||||||
|
"properties": {
|
||||||
|
"savedItemIds": {
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"title": "NavbarPreference defines model for NavbarPreference.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
"NewApiKeyResult": {
|
"NewApiKeyResult": {
|
||||||
"properties": {
|
"properties": {
|
||||||
"id": {
|
"id": {
|
||||||
@ -7702,6 +7714,9 @@
|
|||||||
"language": {
|
"language": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"navbar": {
|
||||||
|
"$ref": "#/components/schemas/NavbarPreference"
|
||||||
|
},
|
||||||
"queryHistory": {
|
"queryHistory": {
|
||||||
"$ref": "#/components/schemas/QueryHistoryPreference"
|
"$ref": "#/components/schemas/QueryHistoryPreference"
|
||||||
},
|
},
|
||||||
@ -8293,6 +8308,9 @@
|
|||||||
"description": "Selected language (beta)",
|
"description": "Selected language (beta)",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"navbar": {
|
||||||
|
"$ref": "#/components/schemas/NavbarPreference"
|
||||||
|
},
|
||||||
"queryHistory": {
|
"queryHistory": {
|
||||||
"$ref": "#/components/schemas/QueryHistoryPreference"
|
"$ref": "#/components/schemas/QueryHistoryPreference"
|
||||||
},
|
},
|
||||||
@ -11543,6 +11561,9 @@
|
|||||||
"language": {
|
"language": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"navbar": {
|
||||||
|
"$ref": "#/components/schemas/NavbarPreference"
|
||||||
|
},
|
||||||
"queryHistory": {
|
"queryHistory": {
|
||||||
"$ref": "#/components/schemas/QueryHistoryPreference"
|
"$ref": "#/components/schemas/QueryHistoryPreference"
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user