| 
									
										
										
										
											2015-01-29 19:10:34 +08:00
										 |  |  | package api | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2016-09-23 18:29:53 +08:00
										 |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2019-11-15 16:28:55 +08:00
										 |  |  | 	"sort" | 
					
						
							| 
									
										
										
										
											2016-07-05 23:59:43 +08:00
										 |  |  | 	"strings" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-05 17:37:13 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/api/dtos" | 
					
						
							| 
									
										
										
										
											2021-10-05 21:54:26 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/api/navlinks" | 
					
						
							| 
									
										
										
										
											2016-04-03 04:54:06 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/bus" | 
					
						
							| 
									
										
										
										
											2020-03-04 19:57:20 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/models" | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/plugins" | 
					
						
							| 
									
										
										
										
											2021-04-19 17:23:29 +08:00
										 |  |  | 	ac "github.com/grafana/grafana/pkg/services/accesscontrol" | 
					
						
							| 
									
										
										
										
											2015-02-05 17:37:13 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/setting" | 
					
						
							| 
									
										
										
										
											2015-01-29 19:10:34 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-22 16:50:00 +08:00
										 |  |  | const ( | 
					
						
							|  |  |  | 	// Themes
 | 
					
						
							|  |  |  | 	lightName = "light" | 
					
						
							|  |  |  | 	darkName  = "dark" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-10 19:41:29 +08:00
										 |  |  | func (hs *HTTPServer) getProfileNode(c *models.ReqContext) *dtos.NavLink { | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 	// Only set login if it's different from the name
 | 
					
						
							|  |  |  | 	var login string | 
					
						
							|  |  |  | 	if c.SignedInUser.Login != c.SignedInUser.NameOrFallback() { | 
					
						
							|  |  |  | 		login = c.SignedInUser.Login | 
					
						
							| 
									
										
										
										
											2015-01-29 19:10:34 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 	gravatarURL := dtos.GetGravatarUrl(c.Email) | 
					
						
							| 
									
										
										
										
											2015-01-29 19:10:34 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 	children := []*dtos.NavLink{ | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2021-03-10 19:41:29 +08:00
										 |  |  | 			Text: "Preferences", Id: "profile-settings", Url: hs.Cfg.AppSubURL + "/profile", Icon: "sliders-v-alt", | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2020-11-21 00:01:10 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if setting.AddChangePasswordLink() { | 
					
						
							|  |  |  | 		children = append(children, &dtos.NavLink{ | 
					
						
							| 
									
										
										
										
											2021-03-30 02:30:11 +08:00
										 |  |  | 			Text: "Change password", Id: "change-password", Url: hs.Cfg.AppSubURL + "/profile/password", | 
					
						
							| 
									
										
										
										
											2021-08-31 17:37:51 +08:00
										 |  |  | 			Icon: "lock", | 
					
						
							| 
									
										
										
										
											2020-11-21 00:01:10 +08:00
										 |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2016-04-03 04:54:06 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-11-21 00:01:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 	if !setting.DisableSignoutMenu { | 
					
						
							|  |  |  | 		// add sign out first
 | 
					
						
							|  |  |  | 		children = append(children, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text:         "Sign out", | 
					
						
							|  |  |  | 			Id:           "sign-out", | 
					
						
							| 
									
										
										
										
											2021-03-10 19:41:29 +08:00
										 |  |  | 			Url:          hs.Cfg.AppSubURL + "/logout", | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 			Icon:         "arrow-from-right", | 
					
						
							|  |  |  | 			Target:       "_self", | 
					
						
							|  |  |  | 			HideFromTabs: true, | 
					
						
							|  |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2016-07-05 23:59:43 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 	return &dtos.NavLink{ | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 		Text:       c.SignedInUser.NameOrFallback(), | 
					
						
							|  |  |  | 		SubTitle:   login, | 
					
						
							|  |  |  | 		Id:         "profile", | 
					
						
							|  |  |  | 		Img:        gravatarURL, | 
					
						
							|  |  |  | 		Url:        hs.Cfg.AppSubURL + "/profile", | 
					
						
							|  |  |  | 		Section:    dtos.NavSectionConfig, | 
					
						
							|  |  |  | 		SortWeight: dtos.WeightProfile, | 
					
						
							|  |  |  | 		Children:   children, | 
					
						
							| 
									
										
										
										
											2016-09-23 18:29:53 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2016-09-23 18:29:53 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-08 14:02:49 +08:00
										 |  |  | func (hs *HTTPServer) getAppLinks(c *models.ReqContext) ([]*dtos.NavLink, error) { | 
					
						
							| 
									
										
										
										
											2021-11-02 20:42:55 +08:00
										 |  |  | 	enabledPlugins, err := hs.enabledPlugins(c.Req.Context(), c.OrgId) | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2018-04-30 21:34:31 +08:00
										 |  |  | 		return nil, err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 	appLinks := []*dtos.NavLink{} | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	for _, plugin := range enabledPlugins[plugins.App] { | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 		if !plugin.Pinned { | 
					
						
							|  |  |  | 			continue | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2020-09-07 22:19:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 		appLink := &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text:       plugin.Name, | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 			Id:         "plugin-page-" + plugin.ID, | 
					
						
							|  |  |  | 			Url:        plugin.DefaultNavURL, | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 			Img:        plugin.Info.Logos.Small, | 
					
						
							|  |  |  | 			SortWeight: dtos.WeightPlugin, | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-01-29 19:10:34 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-21 05:42:05 +08:00
										 |  |  | 		if hs.Features.Toggles().IsNewNavigationEnabled() { | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 			appLink.Section = dtos.NavSectionPlugin | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			appLink.Section = dtos.NavSectionCore | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 		for _, include := range plugin.Includes { | 
					
						
							|  |  |  | 			if !c.HasUserRole(include.Role) { | 
					
						
							|  |  |  | 				continue | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-05-01 14:40:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 			if include.Type == "page" && include.AddToNav { | 
					
						
							|  |  |  | 				var link *dtos.NavLink | 
					
						
							|  |  |  | 				if len(include.Path) > 0 { | 
					
						
							|  |  |  | 					link = &dtos.NavLink{ | 
					
						
							| 
									
										
										
										
											2021-03-10 19:41:29 +08:00
										 |  |  | 						Url:  hs.Cfg.AppSubURL + include.Path, | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 						Text: include.Name, | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					if include.DefaultNav { | 
					
						
							|  |  |  | 						appLink.Url = link.Url // Overwrite the hardcoded page logic
 | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} else { | 
					
						
							|  |  |  | 					link = &dtos.NavLink{ | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 						Url:  hs.Cfg.AppSubURL + "/plugins/" + plugin.ID + "/page/" + include.Slug, | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 						Text: include.Name, | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2020-11-27 17:48:37 +08:00
										 |  |  | 				link.Icon = include.Icon | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 				appLink.Children = append(appLink.Children, link) | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-02-03 17:46:52 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 			if include.Type == "dashboard" && include.AddToNav { | 
					
						
							|  |  |  | 				link := &dtos.NavLink{ | 
					
						
							| 
									
										
										
										
											2021-07-22 15:11:33 +08:00
										 |  |  | 					Url:  hs.Cfg.AppSubURL + include.GetSlugOrUIDLink(), | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 					Text: include.Name, | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				appLink.Children = append(appLink.Children, link) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if len(appLink.Children) > 0 { | 
					
						
							| 
									
										
										
										
											2021-12-13 21:06:15 +08:00
										 |  |  | 			// If we only have one child and it's the app default nav then remove it from children
 | 
					
						
							|  |  |  | 			if len(appLink.Children) == 1 && appLink.Children[0].Url == appLink.Url { | 
					
						
							|  |  |  | 				appLink.Children = []*dtos.NavLink{} | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 			appLinks = append(appLinks, appLink) | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-04-02 15:21:38 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-07 17:08:47 +08:00
										 |  |  | 	if len(appLinks) > 0 { | 
					
						
							|  |  |  | 		sort.SliceStable(appLinks, func(i, j int) bool { | 
					
						
							|  |  |  | 			return appLinks[i].Text < appLinks[j].Text | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 	return appLinks, nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-05 22:32:38 +08:00
										 |  |  | func enableServiceAccount(hs *HTTPServer, c *models.ReqContext) bool { | 
					
						
							| 
									
										
										
										
											2022-01-21 05:42:05 +08:00
										 |  |  | 	return c.OrgRole == models.ROLE_ADMIN && hs.Features.Toggles().IsServiceAccountsEnabled() && hs.serviceAccountsService.Migrated(c.Req.Context(), c.OrgId) | 
					
						
							| 
									
										
										
										
											2022-01-05 22:32:38 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func enableTeams(hs *HTTPServer, c *models.ReqContext) bool { | 
					
						
							|  |  |  | 	return c.OrgRole == models.ROLE_ADMIN || (hs.Cfg.EditorsCanAdmin && c.OrgRole == models.ROLE_EDITOR) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | func (hs *HTTPServer) getNavTree(c *models.ReqContext, hasEditPerm bool) ([]*dtos.NavLink, error) { | 
					
						
							| 
									
										
										
										
											2021-04-22 18:19:41 +08:00
										 |  |  | 	hasAccess := ac.HasAccess(hs.AccessControl, c) | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 	navTree := []*dtos.NavLink{} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-21 05:42:05 +08:00
										 |  |  | 	if hs.Features.Toggles().IsNewNavigationEnabled() { | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 		navTree = append(navTree, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text:       "Home", | 
					
						
							|  |  |  | 			Id:         "home", | 
					
						
							|  |  |  | 			Icon:       "home-alt", | 
					
						
							|  |  |  | 			Url:        hs.Cfg.AppSubURL + "/", | 
					
						
							|  |  |  | 			Section:    dtos.NavSectionCore, | 
					
						
							|  |  |  | 			SortWeight: dtos.WeightHome, | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-21 05:42:05 +08:00
										 |  |  | 	if hasEditPerm && !hs.Features.Toggles().IsNewNavigationEnabled() { | 
					
						
							| 
									
										
										
										
											2021-10-14 21:22:16 +08:00
										 |  |  | 		children := hs.buildCreateNavLinks(c) | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 		navTree = append(navTree, &dtos.NavLink{ | 
					
						
							| 
									
										
										
										
											2019-11-15 16:28:55 +08:00
										 |  |  | 			Text:       "Create", | 
					
						
							|  |  |  | 			Id:         "create", | 
					
						
							| 
									
										
											  
											
												@grafana/ui: Create Icon component and replace part of the icons (#23402)
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Resolve type errors resulted from merge
* Part2: Unicons implementation (#23266)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Icons update
* Add optional chaining to for isFontAwesome variable
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Part3:  Unicons implementation (#23356)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Update icons in Explore
* Update icons in alerting
* Update + and x buttons
* Update icons in configurations and settings
* Update close icons
* Update icons in rich history
* Update alert messages
* Add optional chaining to for isFontAwesome variable
* Remove icon mock, set up jest.config
* Fix navbar plus icon
* Fir enable-bacground to enableBackgournd
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Merge remote branch origin master to icons-unicons
* Revert "Merge remote branch origin master to icons-unicons"
This reverts commit 3f25d50a39a940883fefe73ce51219139c1ed37f.
* Size-up dashnav icons
* Fix alerting icons, panel headers, update tests
* Fix typecheck error
* Adjustments - add panel icon, spacing
* Set TerserPlugin sourceMap to false to prevent running out of memory when publishing storybook
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
											
										 
											2020-04-08 20:33:31 +08:00
										 |  |  | 			Icon:       "plus", | 
					
						
							| 
									
										
										
										
											2021-03-10 19:41:29 +08:00
										 |  |  | 			Url:        hs.Cfg.AppSubURL + "/dashboard/new", | 
					
						
							| 
									
										
										
										
											2019-11-15 16:28:55 +08:00
										 |  |  | 			Children:   children, | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 			Section:    dtos.NavSectionCore, | 
					
						
							| 
									
										
										
										
											2019-11-15 16:28:55 +08:00
										 |  |  | 			SortWeight: dtos.WeightCreate, | 
					
						
							| 
									
										
										
										
											2017-06-23 06:41:39 +08:00
										 |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2016-03-10 23:38:16 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 	dashboardChildLinks := hs.buildDashboardNavLinks(c, hasEditPerm) | 
					
						
							| 
									
										
										
										
											2020-12-02 22:51:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 	dashboardsUrl := "/" | 
					
						
							| 
									
										
										
										
											2022-01-21 05:42:05 +08:00
										 |  |  | 	if hs.Features.Toggles().IsNewNavigationEnabled() { | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 		dashboardsUrl = "/dashboards" | 
					
						
							| 
									
										
										
										
											2016-03-10 23:38:16 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 	navTree = append(navTree, &dtos.NavLink{ | 
					
						
							| 
									
										
										
										
											2019-11-15 16:28:55 +08:00
										 |  |  | 		Text:       "Dashboards", | 
					
						
							|  |  |  | 		Id:         "dashboards", | 
					
						
							| 
									
										
										
										
											2021-03-30 02:30:11 +08:00
										 |  |  | 		SubTitle:   "Manage dashboards and folders", | 
					
						
							| 
									
										
											  
											
												@grafana/ui: Create Icon component and replace part of the icons (#23402)
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Resolve type errors resulted from merge
* Part2: Unicons implementation (#23266)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Icons update
* Add optional chaining to for isFontAwesome variable
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Part3:  Unicons implementation (#23356)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Update icons in Explore
* Update icons in alerting
* Update + and x buttons
* Update icons in configurations and settings
* Update close icons
* Update icons in rich history
* Update alert messages
* Add optional chaining to for isFontAwesome variable
* Remove icon mock, set up jest.config
* Fix navbar plus icon
* Fir enable-bacground to enableBackgournd
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Merge remote branch origin master to icons-unicons
* Revert "Merge remote branch origin master to icons-unicons"
This reverts commit 3f25d50a39a940883fefe73ce51219139c1ed37f.
* Size-up dashnav icons
* Fix alerting icons, panel headers, update tests
* Fix typecheck error
* Adjustments - add panel icon, spacing
* Set TerserPlugin sourceMap to false to prevent running out of memory when publishing storybook
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
											
										 
											2020-04-08 20:33:31 +08:00
										 |  |  | 		Icon:       "apps", | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 		Url:        hs.Cfg.AppSubURL + dashboardsUrl, | 
					
						
							| 
									
										
										
										
											2019-11-15 16:28:55 +08:00
										 |  |  | 		SortWeight: dtos.WeightDashboard, | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 		Section:    dtos.NavSectionCore, | 
					
						
							|  |  |  | 		Children:   dashboardChildLinks, | 
					
						
							| 
									
										
										
										
											2015-11-20 16:43:10 +08:00
										 |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-02 20:43:12 +08:00
										 |  |  | 	canExplore := func(context *models.ReqContext) bool { | 
					
						
							|  |  |  | 		return c.OrgRole == models.ROLE_ADMIN || c.OrgRole == models.ROLE_EDITOR || setting.ViewersCanEdit | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-24 17:36:28 +08:00
										 |  |  | 	if setting.ExploreEnabled && hasAccess(canExplore, ac.EvalPermission(ac.ActionDatasourcesExplore)) { | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 		navTree = append(navTree, &dtos.NavLink{ | 
					
						
							| 
									
										
										
										
											2019-11-15 16:28:55 +08:00
										 |  |  | 			Text:       "Explore", | 
					
						
							|  |  |  | 			Id:         "explore", | 
					
						
							|  |  |  | 			SubTitle:   "Explore your data", | 
					
						
							| 
									
										
											  
											
												@grafana/ui: Create Icon component and replace part of the icons (#23402)
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Resolve type errors resulted from merge
* Part2: Unicons implementation (#23266)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Icons update
* Add optional chaining to for isFontAwesome variable
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Part3:  Unicons implementation (#23356)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Update icons in Explore
* Update icons in alerting
* Update + and x buttons
* Update icons in configurations and settings
* Update close icons
* Update icons in rich history
* Update alert messages
* Add optional chaining to for isFontAwesome variable
* Remove icon mock, set up jest.config
* Fix navbar plus icon
* Fir enable-bacground to enableBackgournd
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Merge remote branch origin master to icons-unicons
* Revert "Merge remote branch origin master to icons-unicons"
This reverts commit 3f25d50a39a940883fefe73ce51219139c1ed37f.
* Size-up dashnav icons
* Fix alerting icons, panel headers, update tests
* Fix typecheck error
* Adjustments - add panel icon, spacing
* Set TerserPlugin sourceMap to false to prevent running out of memory when publishing storybook
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
											
										 
											2020-04-08 20:33:31 +08:00
										 |  |  | 			Icon:       "compass", | 
					
						
							| 
									
										
										
										
											2019-11-15 16:28:55 +08:00
										 |  |  | 			SortWeight: dtos.WeightExplore, | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 			Section:    dtos.NavSectionCore, | 
					
						
							| 
									
										
										
										
											2021-03-10 19:41:29 +08:00
										 |  |  | 			Url:        hs.Cfg.AppSubURL + "/explore", | 
					
						
							| 
									
										
										
										
											2018-04-27 17:39:14 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-04-26 17:58:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-16 02:24:16 +08:00
										 |  |  | 	if c.IsSignedIn { | 
					
						
							| 
									
										
										
										
											2021-03-10 19:41:29 +08:00
										 |  |  | 		navTree = append(navTree, hs.getProfileNode(c)) | 
					
						
							| 
									
										
										
										
											2017-08-16 02:24:16 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-21 16:04:41 +08:00
										 |  |  | 	_, uaIsDisabledForOrg := hs.Cfg.UnifiedAlerting.DisabledOrgs[c.OrgId] | 
					
						
							| 
									
										
										
										
											2021-11-25 03:56:07 +08:00
										 |  |  | 	uaVisibleForOrg := hs.Cfg.UnifiedAlerting.IsEnabled() && !uaIsDisabledForOrg | 
					
						
							| 
									
										
										
										
											2021-10-21 16:04:41 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-25 03:56:07 +08:00
										 |  |  | 	if setting.AlertingEnabled != nil && *setting.AlertingEnabled || uaVisibleForOrg { | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 		alertChildNavs := hs.buildAlertNavLinks(c, uaVisibleForOrg) | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 		navTree = append(navTree, &dtos.NavLink{ | 
					
						
							| 
									
										
										
										
											2019-11-15 16:28:55 +08:00
										 |  |  | 			Text:       "Alerting", | 
					
						
							| 
									
										
										
										
											2021-03-30 02:30:11 +08:00
										 |  |  | 			SubTitle:   "Alert rules and notifications", | 
					
						
							| 
									
										
										
										
											2019-11-15 16:28:55 +08:00
										 |  |  | 			Id:         "alerting", | 
					
						
							| 
									
										
											  
											
												@grafana/ui: Create Icon component and replace part of the icons (#23402)
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Resolve type errors resulted from merge
* Part2: Unicons implementation (#23266)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Icons update
* Add optional chaining to for isFontAwesome variable
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Part3:  Unicons implementation (#23356)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Update icons in Explore
* Update icons in alerting
* Update + and x buttons
* Update icons in configurations and settings
* Update close icons
* Update icons in rich history
* Update alert messages
* Add optional chaining to for isFontAwesome variable
* Remove icon mock, set up jest.config
* Fix navbar plus icon
* Fir enable-bacground to enableBackgournd
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Merge remote branch origin master to icons-unicons
* Revert "Merge remote branch origin master to icons-unicons"
This reverts commit 3f25d50a39a940883fefe73ce51219139c1ed37f.
* Size-up dashnav icons
* Fix alerting icons, panel headers, update tests
* Fix typecheck error
* Adjustments - add panel icon, spacing
* Set TerserPlugin sourceMap to false to prevent running out of memory when publishing storybook
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
											
										 
											2020-04-08 20:33:31 +08:00
										 |  |  | 			Icon:       "bell", | 
					
						
							| 
									
										
										
										
											2021-03-10 19:41:29 +08:00
										 |  |  | 			Url:        hs.Cfg.AppSubURL + "/alerting/list", | 
					
						
							| 
									
										
										
										
											2019-11-15 16:28:55 +08:00
										 |  |  | 			Children:   alertChildNavs, | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 			Section:    dtos.NavSectionCore, | 
					
						
							| 
									
										
										
										
											2019-11-15 16:28:55 +08:00
										 |  |  | 			SortWeight: dtos.WeightAlerting, | 
					
						
							| 
									
										
										
										
											2016-05-03 22:46:10 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-08 14:02:49 +08:00
										 |  |  | 	appLinks, err := hs.getAppLinks(c) | 
					
						
							| 
									
										
										
										
											2015-12-03 23:43:55 +08:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return nil, err | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 	navTree = append(navTree, appLinks...) | 
					
						
							| 
									
										
										
										
											2015-11-11 14:30:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-02 20:02:59 +08:00
										 |  |  | 	configNodes := []*dtos.NavLink{} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-08 19:15:21 +08:00
										 |  |  | 	if hasAccess(ac.ReqOrgAdmin, dataSourcesConfigurationAccessEvaluator) { | 
					
						
							| 
									
										
										
										
											2019-08-02 20:02:59 +08:00
										 |  |  | 		configNodes = append(configNodes, &dtos.NavLink{ | 
					
						
							| 
									
										
										
										
											2021-03-30 02:30:11 +08:00
										 |  |  | 			Text:        "Data sources", | 
					
						
							| 
									
										
											  
											
												@grafana/ui: Create Icon component and replace part of the icons (#23402)
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Resolve type errors resulted from merge
* Part2: Unicons implementation (#23266)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Icons update
* Add optional chaining to for isFontAwesome variable
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Part3:  Unicons implementation (#23356)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Update icons in Explore
* Update icons in alerting
* Update + and x buttons
* Update icons in configurations and settings
* Update close icons
* Update icons in rich history
* Update alert messages
* Add optional chaining to for isFontAwesome variable
* Remove icon mock, set up jest.config
* Fix navbar plus icon
* Fir enable-bacground to enableBackgournd
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Merge remote branch origin master to icons-unicons
* Revert "Merge remote branch origin master to icons-unicons"
This reverts commit 3f25d50a39a940883fefe73ce51219139c1ed37f.
* Size-up dashnav icons
* Fix alerting icons, panel headers, update tests
* Fix typecheck error
* Adjustments - add panel icon, spacing
* Set TerserPlugin sourceMap to false to prevent running out of memory when publishing storybook
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
											
										 
											2020-04-08 20:33:31 +08:00
										 |  |  | 			Icon:        "database", | 
					
						
							| 
									
										
										
										
											2019-08-02 20:02:59 +08:00
										 |  |  | 			Description: "Add and configure data sources", | 
					
						
							|  |  |  | 			Id:          "datasources", | 
					
						
							| 
									
										
										
										
											2021-03-10 19:41:29 +08:00
										 |  |  | 			Url:         hs.Cfg.AppSubURL + "/datasources", | 
					
						
							| 
									
										
										
										
											2019-08-02 20:02:59 +08:00
										 |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2021-04-22 18:19:41 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-13 21:40:32 +08:00
										 |  |  | 	if hasAccess(ac.ReqOrgAdmin, ac.EvalPermission(ac.ActionOrgUsersRead)) { | 
					
						
							| 
									
										
										
										
											2019-08-02 20:02:59 +08:00
										 |  |  | 		configNodes = append(configNodes, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text:        "Users", | 
					
						
							|  |  |  | 			Id:          "users", | 
					
						
							|  |  |  | 			Description: "Manage org members", | 
					
						
							| 
									
										
											  
											
												@grafana/ui: Create Icon component and replace part of the icons (#23402)
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Resolve type errors resulted from merge
* Part2: Unicons implementation (#23266)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Icons update
* Add optional chaining to for isFontAwesome variable
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Part3:  Unicons implementation (#23356)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Update icons in Explore
* Update icons in alerting
* Update + and x buttons
* Update icons in configurations and settings
* Update close icons
* Update icons in rich history
* Update alert messages
* Add optional chaining to for isFontAwesome variable
* Remove icon mock, set up jest.config
* Fix navbar plus icon
* Fir enable-bacground to enableBackgournd
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Merge remote branch origin master to icons-unicons
* Revert "Merge remote branch origin master to icons-unicons"
This reverts commit 3f25d50a39a940883fefe73ce51219139c1ed37f.
* Size-up dashnav icons
* Fix alerting icons, panel headers, update tests
* Fix typecheck error
* Adjustments - add panel icon, spacing
* Set TerserPlugin sourceMap to false to prevent running out of memory when publishing storybook
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
											
										 
											2020-04-08 20:33:31 +08:00
										 |  |  | 			Icon:        "user", | 
					
						
							| 
									
										
										
										
											2021-03-10 19:41:29 +08:00
										 |  |  | 			Url:         hs.Cfg.AppSubURL + "/org/users", | 
					
						
							| 
									
										
										
										
											2019-08-02 20:02:59 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-08-15 20:49:12 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-05 22:32:38 +08:00
										 |  |  | 	if enableTeams(hs, c) { | 
					
						
							| 
									
										
										
										
											2019-08-02 20:02:59 +08:00
										 |  |  | 		configNodes = append(configNodes, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text:        "Teams", | 
					
						
							|  |  |  | 			Id:          "teams", | 
					
						
							|  |  |  | 			Description: "Manage org groups", | 
					
						
							| 
									
										
											  
											
												@grafana/ui: Create Icon component and replace part of the icons (#23402)
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Resolve type errors resulted from merge
* Part2: Unicons implementation (#23266)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Icons update
* Add optional chaining to for isFontAwesome variable
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Part3:  Unicons implementation (#23356)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Update icons in Explore
* Update icons in alerting
* Update + and x buttons
* Update icons in configurations and settings
* Update close icons
* Update icons in rich history
* Update alert messages
* Add optional chaining to for isFontAwesome variable
* Remove icon mock, set up jest.config
* Fix navbar plus icon
* Fir enable-bacground to enableBackgournd
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Merge remote branch origin master to icons-unicons
* Revert "Merge remote branch origin master to icons-unicons"
This reverts commit 3f25d50a39a940883fefe73ce51219139c1ed37f.
* Size-up dashnav icons
* Fix alerting icons, panel headers, update tests
* Fix typecheck error
* Adjustments - add panel icon, spacing
* Set TerserPlugin sourceMap to false to prevent running out of memory when publishing storybook
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
											
										 
											2020-04-08 20:33:31 +08:00
										 |  |  | 			Icon:        "users-alt", | 
					
						
							| 
									
										
										
										
											2021-03-10 19:41:29 +08:00
										 |  |  | 			Url:         hs.Cfg.AppSubURL + "/org/teams", | 
					
						
							| 
									
										
										
										
											2019-08-02 20:02:59 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-06-05 01:28:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 19:57:20 +08:00
										 |  |  | 	if c.OrgRole == models.ROLE_ADMIN { | 
					
						
							| 
									
										
										
										
											2020-03-16 22:40:46 +08:00
										 |  |  | 		configNodes = append(configNodes, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text:        "Plugins", | 
					
						
							|  |  |  | 			Id:          "plugins", | 
					
						
							|  |  |  | 			Description: "View and configure plugins", | 
					
						
							| 
									
										
											  
											
												@grafana/ui: Create Icon component and replace part of the icons (#23402)
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Resolve type errors resulted from merge
* Part2: Unicons implementation (#23266)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Icons update
* Add optional chaining to for isFontAwesome variable
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Part3:  Unicons implementation (#23356)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Update icons in Explore
* Update icons in alerting
* Update + and x buttons
* Update icons in configurations and settings
* Update close icons
* Update icons in rich history
* Update alert messages
* Add optional chaining to for isFontAwesome variable
* Remove icon mock, set up jest.config
* Fix navbar plus icon
* Fir enable-bacground to enableBackgournd
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Merge remote branch origin master to icons-unicons
* Revert "Merge remote branch origin master to icons-unicons"
This reverts commit 3f25d50a39a940883fefe73ce51219139c1ed37f.
* Size-up dashnav icons
* Fix alerting icons, panel headers, update tests
* Fix typecheck error
* Adjustments - add panel icon, spacing
* Set TerserPlugin sourceMap to false to prevent running out of memory when publishing storybook
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
											
										 
											2020-04-08 20:33:31 +08:00
										 |  |  | 			Icon:        "plug", | 
					
						
							| 
									
										
										
										
											2021-03-10 19:41:29 +08:00
										 |  |  | 			Url:         hs.Cfg.AppSubURL + "/plugins", | 
					
						
							| 
									
										
										
										
											2020-03-16 22:40:46 +08:00
										 |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2021-11-18 21:10:38 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-03-16 22:40:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-18 21:10:38 +08:00
										 |  |  | 	if hasAccess(ac.ReqOrgAdmin, orgPreferencesAccessEvaluator) { | 
					
						
							| 
									
										
										
										
											2019-08-02 20:02:59 +08:00
										 |  |  | 		configNodes = append(configNodes, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text:        "Preferences", | 
					
						
							|  |  |  | 			Id:          "org-settings", | 
					
						
							|  |  |  | 			Description: "Organization preferences", | 
					
						
							| 
									
										
											  
											
												@grafana/ui: Create Icon component and replace part of the icons (#23402)
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Resolve type errors resulted from merge
* Part2: Unicons implementation (#23266)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Icons update
* Add optional chaining to for isFontAwesome variable
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Part3:  Unicons implementation (#23356)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Update icons in Explore
* Update icons in alerting
* Update + and x buttons
* Update icons in configurations and settings
* Update close icons
* Update icons in rich history
* Update alert messages
* Add optional chaining to for isFontAwesome variable
* Remove icon mock, set up jest.config
* Fix navbar plus icon
* Fir enable-bacground to enableBackgournd
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Merge remote branch origin master to icons-unicons
* Revert "Merge remote branch origin master to icons-unicons"
This reverts commit 3f25d50a39a940883fefe73ce51219139c1ed37f.
* Size-up dashnav icons
* Fix alerting icons, panel headers, update tests
* Fix typecheck error
* Adjustments - add panel icon, spacing
* Set TerserPlugin sourceMap to false to prevent running out of memory when publishing storybook
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
											
										 
											2020-04-08 20:33:31 +08:00
										 |  |  | 			Icon:        "sliders-v-alt", | 
					
						
							| 
									
										
										
										
											2021-03-10 19:41:29 +08:00
										 |  |  | 			Url:         hs.Cfg.AppSubURL + "/org", | 
					
						
							| 
									
										
										
										
											2019-08-02 20:02:59 +08:00
										 |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2021-11-18 21:10:38 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if c.OrgRole == models.ROLE_ADMIN { | 
					
						
							| 
									
										
										
										
											2019-08-02 20:02:59 +08:00
										 |  |  | 		configNodes = append(configNodes, &dtos.NavLink{ | 
					
						
							| 
									
										
										
										
											2021-03-30 02:30:11 +08:00
										 |  |  | 			Text:        "API keys", | 
					
						
							| 
									
										
										
										
											2019-08-02 20:02:59 +08:00
										 |  |  | 			Id:          "apikeys", | 
					
						
							|  |  |  | 			Description: "Create & manage API keys", | 
					
						
							| 
									
										
											  
											
												@grafana/ui: Create Icon component and replace part of the icons (#23402)
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Resolve type errors resulted from merge
* Part2: Unicons implementation (#23266)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Icons update
* Add optional chaining to for isFontAwesome variable
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Part3:  Unicons implementation (#23356)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and  empty  list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on  main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Update icons in Explore
* Update icons in alerting
* Update + and x buttons
* Update icons in configurations and settings
* Update close icons
* Update icons in rich history
* Update alert messages
* Add optional chaining to for isFontAwesome variable
* Remove icon mock, set up jest.config
* Fix navbar plus icon
* Fir enable-bacground to enableBackgournd
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Merge remote branch origin master to icons-unicons
* Revert "Merge remote branch origin master to icons-unicons"
This reverts commit 3f25d50a39a940883fefe73ce51219139c1ed37f.
* Size-up dashnav icons
* Fix alerting icons, panel headers, update tests
* Fix typecheck error
* Adjustments - add panel icon, spacing
* Set TerserPlugin sourceMap to false to prevent running out of memory when publishing storybook
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
											
										 
											2020-04-08 20:33:31 +08:00
										 |  |  | 			Icon:        "key-skeleton-alt", | 
					
						
							| 
									
										
										
										
											2021-03-10 19:41:29 +08:00
										 |  |  | 			Url:         hs.Cfg.AppSubURL + "/org/apikeys", | 
					
						
							| 
									
										
										
										
											2019-08-02 20:02:59 +08:00
										 |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2016-02-15 00:37:05 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2022-01-05 22:32:38 +08:00
										 |  |  | 	// needs both feature flag and migration to be able to show service accounts
 | 
					
						
							|  |  |  | 	if enableServiceAccount(hs, c) { | 
					
						
							|  |  |  | 		configNodes = append(configNodes, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text:        "Service accounts", | 
					
						
							|  |  |  | 			Id:          "serviceaccounts", | 
					
						
							|  |  |  | 			Description: "Manage service accounts", | 
					
						
							|  |  |  | 			// TODO: change icon to "key-skeleton-alt" when it's available
 | 
					
						
							|  |  |  | 			Icon: "key-skeleton-alt", | 
					
						
							|  |  |  | 			Url:  hs.Cfg.AppSubURL + "/org/serviceaccounts", | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-02-15 00:37:05 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-21 05:42:05 +08:00
										 |  |  | 	if hs.Features.Toggles().IsLivePipelineEnabled() { | 
					
						
							| 
									
										
										
										
											2021-09-16 23:34:12 +08:00
										 |  |  | 		liveNavLinks := []*dtos.NavLink{} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		liveNavLinks = append(liveNavLinks, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text: "Status", Id: "live-status", Url: hs.Cfg.AppSubURL + "/live", Icon: "exchange-alt", | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 		liveNavLinks = append(liveNavLinks, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text: "Pipeline", Id: "live-pipeline", Url: hs.Cfg.AppSubURL + "/live/pipeline", Icon: "arrow-to-right", | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 		liveNavLinks = append(liveNavLinks, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text: "Cloud", Id: "live-cloud", Url: hs.Cfg.AppSubURL + "/live/cloud", Icon: "cloud-upload", | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 		navTree = append(navTree, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Id:           "live", | 
					
						
							|  |  |  | 			Text:         "Live", | 
					
						
							|  |  |  | 			SubTitle:     "Event Streaming", | 
					
						
							|  |  |  | 			Icon:         "exchange-alt", | 
					
						
							|  |  |  | 			Url:          hs.Cfg.AppSubURL + "/live", | 
					
						
							|  |  |  | 			Children:     liveNavLinks, | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 			Section:      dtos.NavSectionConfig, | 
					
						
							| 
									
										
										
										
											2021-10-22 23:56:16 +08:00
										 |  |  | 			HideFromTabs: true, | 
					
						
							| 
									
										
										
										
											2021-09-16 23:34:12 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-16 22:40:46 +08:00
										 |  |  | 	if len(configNodes) > 0 { | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 		configNode := &dtos.NavLink{ | 
					
						
							|  |  |  | 			Id:         dtos.NavIDCfg, | 
					
						
							|  |  |  | 			Text:       "Configuration", | 
					
						
							|  |  |  | 			SubTitle:   "Organization: " + c.OrgName, | 
					
						
							|  |  |  | 			Icon:       "cog", | 
					
						
							|  |  |  | 			Url:        configNodes[0].Url, | 
					
						
							|  |  |  | 			SortWeight: dtos.WeightConfig, | 
					
						
							|  |  |  | 			Children:   configNodes, | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2022-01-21 05:42:05 +08:00
										 |  |  | 		if hs.Features.Toggles().IsNewNavigationEnabled() { | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 			configNode.Section = dtos.NavSectionConfig | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			configNode.Section = dtos.NavSectionCore | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		navTree = append(navTree, configNode) | 
					
						
							| 
									
										
										
										
											2020-03-16 22:40:46 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-08-02 20:02:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-19 17:23:29 +08:00
										 |  |  | 	adminNavLinks := hs.buildAdminNavLinks(c) | 
					
						
							| 
									
										
										
										
											2019-09-17 16:27:55 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-19 17:23:29 +08:00
										 |  |  | 	if len(adminNavLinks) > 0 { | 
					
						
							| 
									
										
										
										
											2021-11-19 19:02:13 +08:00
										 |  |  | 		navSection := dtos.NavSectionCore | 
					
						
							| 
									
										
										
										
											2022-01-21 05:42:05 +08:00
										 |  |  | 		if hs.Features.Toggles().IsNewNavigationEnabled() { | 
					
						
							| 
									
										
										
										
											2021-11-19 19:02:13 +08:00
										 |  |  | 			navSection = dtos.NavSectionConfig | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2021-11-19 19:02:13 +08:00
										 |  |  | 		serverAdminNode := navlinks.GetServerAdminNode(adminNavLinks, navSection) | 
					
						
							| 
									
										
										
										
											2021-10-05 21:54:26 +08:00
										 |  |  | 		navTree = append(navTree, serverAdminNode) | 
					
						
							| 
									
										
										
										
											2019-03-05 20:02:41 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-17 13:39:50 +08:00
										 |  |  | 	helpVersion := fmt.Sprintf(`%s v%s (%s)`, setting.ApplicationName, setting.BuildVersion, setting.BuildCommit) | 
					
						
							|  |  |  | 	if hs.Cfg.AnonymousHideVersion && !c.IsSignedIn { | 
					
						
							|  |  |  | 		helpVersion = setting.ApplicationName | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 	navTree = append(navTree, &dtos.NavLink{ | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 		Text:       "Help", | 
					
						
							|  |  |  | 		SubTitle:   helpVersion, | 
					
						
							|  |  |  | 		Id:         "help", | 
					
						
							|  |  |  | 		Url:        "#", | 
					
						
							|  |  |  | 		Icon:       "question-circle", | 
					
						
							|  |  |  | 		SortWeight: dtos.WeightHelp, | 
					
						
							|  |  |  | 		Section:    dtos.NavSectionConfig, | 
					
						
							|  |  |  | 		Children:   []*dtos.NavLink{}, | 
					
						
							| 
									
										
										
										
											2017-08-16 21:03:49 +08:00
										 |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 	return navTree, nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | func (hs *HTTPServer) buildDashboardNavLinks(c *models.ReqContext, hasEditPerm bool) []*dtos.NavLink { | 
					
						
							|  |  |  | 	dashboardChildNavs := []*dtos.NavLink{} | 
					
						
							| 
									
										
										
										
											2022-01-21 05:42:05 +08:00
										 |  |  | 	if !hs.Features.Toggles().IsNewNavigationEnabled() { | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 		dashboardChildNavs = append(dashboardChildNavs, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text: "Home", Id: "home", Url: hs.Cfg.AppSubURL + "/", Icon: "home-alt", HideFromTabs: true, | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 		dashboardChildNavs = append(dashboardChildNavs, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text: "Divider", Divider: true, Id: "divider", HideFromTabs: true, | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	dashboardChildNavs = append(dashboardChildNavs, &dtos.NavLink{ | 
					
						
							|  |  |  | 		Text: "Browse", Id: "manage-dashboards", Url: hs.Cfg.AppSubURL + "/dashboards", Icon: "sitemap", | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 	dashboardChildNavs = append(dashboardChildNavs, &dtos.NavLink{ | 
					
						
							|  |  |  | 		Text: "Playlists", Id: "playlists", Url: hs.Cfg.AppSubURL + "/playlists", Icon: "presentation-play", | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if c.IsSignedIn { | 
					
						
							|  |  |  | 		dashboardChildNavs = append(dashboardChildNavs, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text: "Snapshots", | 
					
						
							|  |  |  | 			Id:   "snapshots", | 
					
						
							|  |  |  | 			Url:  hs.Cfg.AppSubURL + "/dashboard/snapshots", | 
					
						
							|  |  |  | 			Icon: "camera", | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		dashboardChildNavs = append(dashboardChildNavs, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text: "Library panels", | 
					
						
							|  |  |  | 			Id:   "library-panels", | 
					
						
							|  |  |  | 			Url:  hs.Cfg.AppSubURL + "/library-panels", | 
					
						
							|  |  |  | 			Icon: "library-panel", | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-21 05:42:05 +08:00
										 |  |  | 	if hasEditPerm && hs.Features.Toggles().IsNewNavigationEnabled() { | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 		dashboardChildNavs = append(dashboardChildNavs, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text: "Divider", Divider: true, Id: "divider", HideFromTabs: true, | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 		dashboardChildNavs = append(dashboardChildNavs, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text: "New dashboard", Icon: "plus", Url: hs.Cfg.AppSubURL + "/dashboard/new", HideFromTabs: true, | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 		if c.OrgRole == models.ROLE_ADMIN || c.OrgRole == models.ROLE_EDITOR { | 
					
						
							|  |  |  | 			dashboardChildNavs = append(dashboardChildNavs, &dtos.NavLink{ | 
					
						
							|  |  |  | 				Text: "New folder", SubTitle: "Create a new folder to organize your dashboards", Id: "folder", | 
					
						
							|  |  |  | 				Icon: "plus", Url: hs.Cfg.AppSubURL + "/dashboards/folder/new", HideFromTabs: true, | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		dashboardChildNavs = append(dashboardChildNavs, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text: "Import", SubTitle: "Import dashboard from file or Grafana.com", Id: "import", Icon: "plus", | 
					
						
							|  |  |  | 			Url: hs.Cfg.AppSubURL + "/dashboard/import", HideFromTabs: true, | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return dashboardChildNavs | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (hs *HTTPServer) buildAlertNavLinks(c *models.ReqContext, uaVisibleForOrg bool) []*dtos.NavLink { | 
					
						
							|  |  |  | 	alertChildNavs := []*dtos.NavLink{ | 
					
						
							|  |  |  | 		{Text: "Alert rules", Id: "alert-list", Url: hs.Cfg.AppSubURL + "/alerting/list", Icon: "list-ul"}, | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2021-11-25 01:28:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 	if c.OrgRole == models.ROLE_ADMIN || c.OrgRole == models.ROLE_EDITOR { | 
					
						
							|  |  |  | 		if uaVisibleForOrg { | 
					
						
							|  |  |  | 			alertChildNavs = append(alertChildNavs, &dtos.NavLink{ | 
					
						
							|  |  |  | 				Text: "Contact points", Id: "receivers", Url: hs.Cfg.AppSubURL + "/alerting/notifications", | 
					
						
							|  |  |  | 				Icon: "comment-alt-share", | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 			alertChildNavs = append(alertChildNavs, &dtos.NavLink{Text: "Notification policies", Id: "am-routes", Url: hs.Cfg.AppSubURL + "/alerting/routes", Icon: "sitemap"}) | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			alertChildNavs = append(alertChildNavs, &dtos.NavLink{ | 
					
						
							|  |  |  | 				Text: "Notification channels", Id: "channels", Url: hs.Cfg.AppSubURL + "/alerting/notifications", | 
					
						
							|  |  |  | 				Icon: "comment-alt-share", | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2021-11-25 01:28:19 +08:00
										 |  |  | 	if uaVisibleForOrg { | 
					
						
							|  |  |  | 		alertChildNavs = append(alertChildNavs, &dtos.NavLink{Text: "Silences", Id: "silences", Url: hs.Cfg.AppSubURL + "/alerting/silences", Icon: "bell-slash"}) | 
					
						
							|  |  |  | 		alertChildNavs = append(alertChildNavs, &dtos.NavLink{Text: "Alert groups", Id: "groups", Url: hs.Cfg.AppSubURL + "/alerting/groups", Icon: "layer-group"}) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2021-11-02 19:19:18 +08:00
										 |  |  | 	if c.OrgRole == models.ROLE_ADMIN && uaVisibleForOrg { | 
					
						
							|  |  |  | 		alertChildNavs = append(alertChildNavs, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text: "Admin", Id: "alerting-admin", Url: hs.Cfg.AppSubURL + "/alerting/admin", | 
					
						
							|  |  |  | 			Icon: "cog", | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return alertChildNavs | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-14 21:22:16 +08:00
										 |  |  | func (hs *HTTPServer) buildCreateNavLinks(c *models.ReqContext) []*dtos.NavLink { | 
					
						
							|  |  |  | 	children := []*dtos.NavLink{ | 
					
						
							|  |  |  | 		{Text: "Dashboard", Icon: "apps", Url: hs.Cfg.AppSubURL + "/dashboard/new"}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if c.OrgRole == models.ROLE_ADMIN || c.OrgRole == models.ROLE_EDITOR { | 
					
						
							|  |  |  | 		children = append(children, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text: "Folder", SubTitle: "Create a new folder to organize your dashboards", Id: "folder", | 
					
						
							|  |  |  | 			Icon: "folder-plus", Url: hs.Cfg.AppSubURL + "/dashboards/folder/new", | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	children = append(children, &dtos.NavLink{ | 
					
						
							|  |  |  | 		Text: "Import", SubTitle: "Import dashboard from file or Grafana.com", Id: "import", Icon: "import", | 
					
						
							|  |  |  | 		Url: hs.Cfg.AppSubURL + "/dashboard/import", | 
					
						
							|  |  |  | 	}) | 
					
						
							| 
									
										
										
										
											2021-10-21 16:04:41 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	_, uaIsDisabledForOrg := hs.Cfg.UnifiedAlerting.DisabledOrgs[c.OrgId] | 
					
						
							| 
									
										
										
										
											2021-11-25 03:56:07 +08:00
										 |  |  | 	uaVisibleForOrg := hs.Cfg.UnifiedAlerting.IsEnabled() && !uaIsDisabledForOrg | 
					
						
							| 
									
										
										
										
											2021-10-21 16:04:41 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-25 03:56:07 +08:00
										 |  |  | 	if setting.AlertingEnabled != nil && *setting.AlertingEnabled || uaVisibleForOrg { | 
					
						
							| 
									
										
										
										
											2021-10-14 21:22:16 +08:00
										 |  |  | 		children = append(children, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text: "Alert rule", SubTitle: "Create an alert rule", Id: "alert", | 
					
						
							|  |  |  | 			Icon: "bell", Url: hs.Cfg.AppSubURL + "/alerting/new", | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return children | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-19 17:23:29 +08:00
										 |  |  | func (hs *HTTPServer) buildAdminNavLinks(c *models.ReqContext) []*dtos.NavLink { | 
					
						
							|  |  |  | 	hasAccess := ac.HasAccess(hs.AccessControl, c) | 
					
						
							| 
									
										
										
										
											2021-11-18 21:10:38 +08:00
										 |  |  | 	hasGlobalAccess := ac.HasGlobalAccess(hs.AccessControl, c) | 
					
						
							| 
									
										
										
										
											2021-04-19 17:23:29 +08:00
										 |  |  | 	adminNavLinks := []*dtos.NavLink{} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-24 17:36:28 +08:00
										 |  |  | 	if hasAccess(ac.ReqGrafanaAdmin, ac.EvalPermission(ac.ActionUsersRead, ac.ScopeGlobalUsersAll)) { | 
					
						
							| 
									
										
										
										
											2021-04-19 17:23:29 +08:00
										 |  |  | 		adminNavLinks = append(adminNavLinks, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text: "Users", Id: "global-users", Url: hs.Cfg.AppSubURL + "/admin/users", Icon: "user", | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-18 21:10:38 +08:00
										 |  |  | 	if hasGlobalAccess(ac.ReqGrafanaAdmin, orgsAccessEvaluator) { | 
					
						
							| 
									
										
										
										
											2021-04-19 17:23:29 +08:00
										 |  |  | 		adminNavLinks = append(adminNavLinks, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text: "Orgs", Id: "global-orgs", Url: hs.Cfg.AppSubURL + "/admin/orgs", Icon: "building", | 
					
						
							|  |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2021-06-14 23:36:48 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-24 17:36:28 +08:00
										 |  |  | 	if hasAccess(ac.ReqGrafanaAdmin, ac.EvalPermission(ac.ActionSettingsRead)) { | 
					
						
							| 
									
										
										
										
											2021-04-19 17:23:29 +08:00
										 |  |  | 		adminNavLinks = append(adminNavLinks, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text: "Settings", Id: "server-settings", Url: hs.Cfg.AppSubURL + "/admin/settings", Icon: "sliders-v-alt", | 
					
						
							|  |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2021-06-14 23:36:48 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-24 17:36:28 +08:00
										 |  |  | 	if hs.Cfg.LDAPEnabled && hasAccess(ac.ReqGrafanaAdmin, ac.EvalPermission(ac.ActionLDAPStatusRead)) { | 
					
						
							| 
									
										
										
										
											2021-04-22 18:19:41 +08:00
										 |  |  | 		adminNavLinks = append(adminNavLinks, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text: "LDAP", Id: "ldap", Url: hs.Cfg.AppSubURL + "/admin/ldap", Icon: "book", | 
					
						
							|  |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2021-04-19 17:23:29 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-24 17:36:28 +08:00
										 |  |  | 	if hs.Cfg.PluginAdminEnabled && hasAccess(ac.ReqGrafanaAdmin, ac.EvalPermission(ac.ActionPluginsManage)) { | 
					
						
							| 
									
										
										
										
											2021-08-04 17:49:05 +08:00
										 |  |  | 		adminNavLinks = append(adminNavLinks, &dtos.NavLink{ | 
					
						
							|  |  |  | 			Text: "Plugins", Id: "admin-plugins", Url: hs.Cfg.AppSubURL + "/admin/plugins", Icon: "plug", | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-19 17:23:29 +08:00
										 |  |  | 	return adminNavLinks | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | func (hs *HTTPServer) setIndexViewData(c *models.ReqContext) (*dtos.IndexViewData, error) { | 
					
						
							|  |  |  | 	hasEditPermissionInFoldersQuery := models.HasEditPermissionInFoldersQuery{SignedInUser: c.SignedInUser} | 
					
						
							| 
									
										
										
										
											2021-12-29 00:36:22 +08:00
										 |  |  | 	if err := bus.Dispatch(c.Req.Context(), &hasEditPermissionInFoldersQuery); err != nil { | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 		return nil, err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	hasEditPerm := hasEditPermissionInFoldersQuery.Result | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	settings, err := hs.getFrontendSettingsMap(c) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return nil, err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	settings["dateFormats"] = hs.Cfg.DateFormats | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	prefsQuery := models.GetPreferencesWithDefaultsQuery{User: c.SignedInUser} | 
					
						
							| 
									
										
										
										
											2021-12-29 00:36:22 +08:00
										 |  |  | 	if err := bus.Dispatch(c.Req.Context(), &prefsQuery); err != nil { | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 		return nil, err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	prefs := prefsQuery.Result | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Read locale from accept-language
 | 
					
						
							|  |  |  | 	acceptLang := c.Req.Header.Get("Accept-Language") | 
					
						
							|  |  |  | 	locale := "en-US" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(acceptLang) > 0 { | 
					
						
							|  |  |  | 		parts := strings.Split(acceptLang, ",") | 
					
						
							|  |  |  | 		locale = parts[0] | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	appURL := setting.AppUrl | 
					
						
							| 
									
										
										
										
											2021-03-10 19:41:29 +08:00
										 |  |  | 	appSubURL := hs.Cfg.AppSubURL | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// special case when doing localhost call from image renderer
 | 
					
						
							|  |  |  | 	if c.IsRenderCall && !hs.Cfg.ServeFromSubPath { | 
					
						
							| 
									
										
										
										
											2021-03-10 19:41:29 +08:00
										 |  |  | 		appURL = fmt.Sprintf("%s://localhost:%s", hs.Cfg.Protocol, hs.Cfg.HTTPPort) | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 		appSubURL = "" | 
					
						
							|  |  |  | 		settings["appSubUrl"] = "" | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	navTree, err := hs.getNavTree(c, hasEditPerm) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return nil, err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	data := dtos.IndexViewData{ | 
					
						
							|  |  |  | 		User: &dtos.CurrentUser{ | 
					
						
							|  |  |  | 			Id:                         c.UserId, | 
					
						
							|  |  |  | 			IsSignedIn:                 c.IsSignedIn, | 
					
						
							|  |  |  | 			Login:                      c.Login, | 
					
						
							|  |  |  | 			Email:                      c.Email, | 
					
						
							|  |  |  | 			Name:                       c.Name, | 
					
						
							|  |  |  | 			OrgCount:                   c.OrgCount, | 
					
						
							|  |  |  | 			OrgId:                      c.OrgId, | 
					
						
							|  |  |  | 			OrgName:                    c.OrgName, | 
					
						
							|  |  |  | 			OrgRole:                    c.OrgRole, | 
					
						
							|  |  |  | 			GravatarUrl:                dtos.GetGravatarUrl(c.Email), | 
					
						
							|  |  |  | 			IsGrafanaAdmin:             c.IsGrafanaAdmin, | 
					
						
							|  |  |  | 			LightTheme:                 prefs.Theme == lightName, | 
					
						
							|  |  |  | 			Timezone:                   prefs.Timezone, | 
					
						
							| 
									
										
										
										
											2021-10-18 21:27:14 +08:00
										 |  |  | 			WeekStart:                  prefs.WeekStart, | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 			Locale:                     locale, | 
					
						
							|  |  |  | 			HelpFlags1:                 c.HelpFlags1, | 
					
						
							|  |  |  | 			HasEditPermissionInFolders: hasEditPerm, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		Settings:                settings, | 
					
						
							|  |  |  | 		Theme:                   prefs.Theme, | 
					
						
							|  |  |  | 		AppUrl:                  appURL, | 
					
						
							|  |  |  | 		AppSubUrl:               appSubURL, | 
					
						
							|  |  |  | 		GoogleAnalyticsId:       setting.GoogleAnalyticsId, | 
					
						
							|  |  |  | 		GoogleTagManagerId:      setting.GoogleTagManagerId, | 
					
						
							|  |  |  | 		BuildVersion:            setting.BuildVersion, | 
					
						
							|  |  |  | 		BuildCommit:             setting.BuildCommit, | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 		NewGrafanaVersion:       hs.updateChecker.LatestGrafanaVersion(), | 
					
						
							|  |  |  | 		NewGrafanaVersionExists: hs.updateChecker.GrafanaUpdateAvailable(), | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 		AppName:                 setting.ApplicationName, | 
					
						
							| 
									
										
										
										
											2022-01-08 04:11:23 +08:00
										 |  |  | 		AppNameBodyClass:        "app-grafana", | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 		FavIcon:                 "public/img/fav32.png", | 
					
						
							|  |  |  | 		AppleTouchIcon:          "public/img/apple-touch-icon.png", | 
					
						
							|  |  |  | 		AppTitle:                "Grafana", | 
					
						
							|  |  |  | 		NavTree:                 navTree, | 
					
						
							| 
									
										
										
										
											2020-11-12 19:29:43 +08:00
										 |  |  | 		Sentry:                  &hs.Cfg.Sentry, | 
					
						
							| 
									
										
										
										
											2021-01-12 14:42:32 +08:00
										 |  |  | 		Nonce:                   c.RequestNonce, | 
					
						
							| 
									
										
										
										
											2021-02-01 18:00:53 +08:00
										 |  |  | 		ContentDeliveryURL:      hs.Cfg.GetContentDeliveryURL(hs.License.ContentDeliveryPrefix()), | 
					
						
							| 
									
										
										
										
											2021-07-02 20:17:10 +08:00
										 |  |  | 		LoadingLogo:             "public/img/grafana_icon.svg", | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-21 05:42:05 +08:00
										 |  |  | 	if hs.Features.Toggles().IsAccesscontrolEnabled() { | 
					
						
							| 
									
										
										
										
											2021-04-16 21:02:16 +08:00
										 |  |  | 		userPermissions, err := hs.AccessControl.GetUserPermissions(c.Req.Context(), c.SignedInUser) | 
					
						
							|  |  |  | 		if err != nil { | 
					
						
							|  |  |  | 			return nil, err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-19 17:23:29 +08:00
										 |  |  | 		data.User.Permissions = ac.BuildPermissionsMap(userPermissions) | 
					
						
							| 
									
										
										
										
											2021-04-16 21:02:16 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 	if setting.DisableGravatar { | 
					
						
							| 
									
										
										
										
											2021-03-10 19:41:29 +08:00
										 |  |  | 		data.User.GravatarUrl = hs.Cfg.AppSubURL + "/public/img/user_profile.png" | 
					
						
							| 
									
										
										
										
											2020-09-08 04:10:06 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(data.User.Name) == 0 { | 
					
						
							|  |  |  | 		data.User.Name = data.User.Login | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	themeURLParam := c.Query("theme") | 
					
						
							|  |  |  | 	if themeURLParam == lightName { | 
					
						
							|  |  |  | 		data.User.LightTheme = true | 
					
						
							|  |  |  | 		data.Theme = lightName | 
					
						
							|  |  |  | 	} else if themeURLParam == darkName { | 
					
						
							|  |  |  | 		data.User.LightTheme = false | 
					
						
							|  |  |  | 		data.Theme = darkName | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-27 16:24:44 +08:00
										 |  |  | 	hs.HooksService.RunIndexDataHooks(&data, c) | 
					
						
							| 
									
										
										
										
											2019-11-15 16:28:55 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-11 21:17:41 +08:00
										 |  |  | 	sort.SliceStable(data.NavTree, func(i, j int) bool { | 
					
						
							|  |  |  | 		return data.NavTree[i].SortWeight < data.NavTree[j].SortWeight | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-20 16:43:10 +08:00
										 |  |  | 	return &data, nil | 
					
						
							| 
									
										
										
										
											2015-01-29 19:10:34 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 19:57:20 +08:00
										 |  |  | func (hs *HTTPServer) Index(c *models.ReqContext) { | 
					
						
							| 
									
										
										
										
											2018-10-09 23:47:43 +08:00
										 |  |  | 	data, err := hs.setIndexViewData(c) | 
					
						
							| 
									
										
										
										
											2018-03-22 19:37:35 +08:00
										 |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2020-12-16 02:09:04 +08:00
										 |  |  | 		c.Handle(hs.Cfg, 500, "Failed to get settings", err) | 
					
						
							| 
									
										
										
										
											2015-01-29 19:10:34 +08:00
										 |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-03-22 19:37:35 +08:00
										 |  |  | 	c.HTML(200, "index", data) | 
					
						
							| 
									
										
										
										
											2015-01-29 19:10:34 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 19:57:20 +08:00
										 |  |  | func (hs *HTTPServer) NotFoundHandler(c *models.ReqContext) { | 
					
						
							| 
									
										
										
										
											2015-01-29 19:10:34 +08:00
										 |  |  | 	if c.IsApiRequest() { | 
					
						
							| 
									
										
										
										
											2015-03-23 03:14:00 +08:00
										 |  |  | 		c.JsonApiErr(404, "Not found", nil) | 
					
						
							| 
									
										
										
										
											2015-01-29 19:10:34 +08:00
										 |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-09 23:47:43 +08:00
										 |  |  | 	data, err := hs.setIndexViewData(c) | 
					
						
							| 
									
										
										
										
											2018-03-22 19:37:35 +08:00
										 |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2020-12-16 02:09:04 +08:00
										 |  |  | 		c.Handle(hs.Cfg, 500, "Failed to get settings", err) | 
					
						
							| 
									
										
										
										
											2015-01-29 19:10:34 +08:00
										 |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-03-22 19:37:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	c.HTML(404, "index", data) | 
					
						
							| 
									
										
										
										
											2015-01-29 19:10:34 +08:00
										 |  |  | } |