diff --git a/pkg/api/dtos/plugins.go b/pkg/api/dtos/plugins.go index d03a55861fc..53c911c10fa 100644 --- a/pkg/api/dtos/plugins.go +++ b/pkg/api/dtos/plugins.go @@ -3,17 +3,18 @@ package dtos import "github.com/grafana/grafana/pkg/plugins" type PluginSetting struct { - Name string `json:"name"` - Type string `json:"type"` - Id string `json:"id"` - Enabled bool `json:"enabled"` - Pinned bool `json:"pinned"` - Module string `json:"module"` - BaseUrl string `json:"baseUrl"` - Info *plugins.PluginInfo `json:"info"` - Includes []*plugins.PluginInclude `json:"includes"` - Dependencies *plugins.PluginDependencies `json:"dependencies"` - JsonData map[string]interface{} `json:"jsonData"` + Name string `json:"name"` + Type string `json:"type"` + Id string `json:"id"` + Enabled bool `json:"enabled"` + Pinned bool `json:"pinned"` + Module string `json:"module"` + BaseUrl string `json:"baseUrl"` + Info *plugins.PluginInfo `json:"info"` + Includes []*plugins.PluginInclude `json:"includes"` + Dependencies *plugins.PluginDependencies `json:"dependencies"` + JsonData map[string]interface{} `json:"jsonData"` + DefaultNavUrl string `json:"defaultNavUrl"` } type PluginListItem struct { diff --git a/pkg/api/index.go b/pkg/api/index.go index b26fb22ea52..a376f9504a4 100644 --- a/pkg/api/index.go +++ b/pkg/api/index.go @@ -90,7 +90,7 @@ func setIndexViewData(c *middleware.Context) (*dtos.IndexViewData, error) { if plugin.Pinned { appLink := &dtos.NavLink{ Text: plugin.Name, - Url: setting.AppSubUrl + "/plugins/" + plugin.Id + "/edit", + Url: plugin.DefaultNavUrl, Img: plugin.Info.Logos.Small, } @@ -100,9 +100,6 @@ func setIndexViewData(c *middleware.Context) (*dtos.IndexViewData, error) { Url: setting.AppSubUrl + "/plugins/" + plugin.Id + "/page/" + include.Slug, Text: include.Name, } - if include.DefaultNav { - appLink.Url = link.Url - } appLink.Children = append(appLink.Children, link) } if include.Type == "dashboard" && include.AddToNav { @@ -110,16 +107,13 @@ func setIndexViewData(c *middleware.Context) (*dtos.IndexViewData, error) { Url: setting.AppSubUrl + "/dashboard/db/" + include.Slug, Text: include.Name, } - if include.DefaultNav { - appLink.Url = link.Url - } appLink.Children = append(appLink.Children, link) } } if c.OrgRole == m.ROLE_ADMIN { appLink.Children = append(appLink.Children, &dtos.NavLink{Divider: true}) - appLink.Children = append(appLink.Children, &dtos.NavLink{Text: "Config", Icon: "fa fa-cog", Url: setting.AppSubUrl + "/plugins/" + plugin.Id + "/edit"}) + appLink.Children = append(appLink.Children, &dtos.NavLink{Text: "Plugin Config", Icon: "fa fa-cog", Url: setting.AppSubUrl + "/plugins/" + plugin.Id + "/edit"}) } data.MainNavLinks = append(data.MainNavLinks, appLink) @@ -132,10 +126,10 @@ func setIndexViewData(c *middleware.Context) (*dtos.IndexViewData, error) { Icon: "fa fa-fw fa-cogs", Url: setting.AppSubUrl + "/admin", Children: []*dtos.NavLink{ - {Text: "Global Users", Icon: "fa fa-fw fa-cogs", Url: setting.AppSubUrl + "/admin/users"}, - {Text: "Global Orgs", Icon: "fa fa-fw fa-cogs", Url: setting.AppSubUrl + "/admin/orgs"}, - {Text: "Server Settings", Icon: "fa fa-fw fa-cogs", Url: setting.AppSubUrl + "/admin/settings"}, - {Text: "Server Stats", Icon: "fa-fw fa-cogs", Url: setting.AppSubUrl + "/admin/stats"}, + {Text: "Global Users", Url: setting.AppSubUrl + "/admin/users"}, + {Text: "Global Orgs", Url: setting.AppSubUrl + "/admin/orgs"}, + {Text: "Server Settings", Url: setting.AppSubUrl + "/admin/settings"}, + {Text: "Server Stats", Url: setting.AppSubUrl + "/admin/stats"}, }, }) } diff --git a/pkg/api/plugins.go b/pkg/api/plugins.go index 793cf33e3c6..0411c0746ef 100644 --- a/pkg/api/plugins.go +++ b/pkg/api/plugins.go @@ -72,14 +72,15 @@ func GetPluginSettingById(c *middleware.Context) Response { } else { dto := &dtos.PluginSetting{ - Type: def.Type, - Id: def.Id, - Name: def.Name, - Info: &def.Info, - Dependencies: &def.Dependencies, - Includes: def.Includes, - BaseUrl: def.BaseUrl, - Module: def.Module, + Type: def.Type, + Id: def.Id, + Name: def.Name, + Info: &def.Info, + Dependencies: &def.Dependencies, + Includes: def.Includes, + BaseUrl: def.BaseUrl, + Module: def.Module, + DefaultNavUrl: def.DefaultNavUrl, } query := m.GetPluginSettingByIdQuery{PluginId: pluginId, OrgId: c.OrgId} diff --git a/pkg/plugins/app_plugin.go b/pkg/plugins/app_plugin.go index ecf59a15e15..f565b0e2b22 100644 --- a/pkg/plugins/app_plugin.go +++ b/pkg/plugins/app_plugin.go @@ -6,6 +6,7 @@ import ( "github.com/gosimple/slug" "github.com/grafana/grafana/pkg/models" + "github.com/grafana/grafana/pkg/setting" ) type AppPluginCss struct { @@ -75,10 +76,18 @@ func (app *AppPlugin) initApp() { } } + app.DefaultNavUrl = setting.AppSubUrl + "/plugins/" + app.Id + "/edit" + // slugify pages - for _, page := range app.Includes { - if page.Slug == "" { - page.Slug = slug.Make(page.Name) + for _, include := range app.Includes { + if include.Slug == "" { + include.Slug = slug.Make(include.Name) + } + if include.Type == "page" && include.DefaultNav { + app.DefaultNavUrl = setting.AppSubUrl + "/plugins/" + app.Id + "/page/" + include.Slug + } + if include.Type == "dashboard" && include.DefaultNav { + app.DefaultNavUrl = setting.AppSubUrl + "/dashboard/db/" + include.Slug } } } diff --git a/pkg/plugins/models.go b/pkg/plugins/models.go index 28e092dcd4a..30f794285e1 100644 --- a/pkg/plugins/models.go +++ b/pkg/plugins/models.go @@ -42,6 +42,7 @@ type PluginBase struct { IncludedInAppId string `json:"-"` PluginDir string `json:"-"` + DefaultNavUrl string `json:"-"` // cache for readme file contents Readme []byte `json:"-"` @@ -80,7 +81,7 @@ type PluginInclude struct { Type string `json:"type"` Component string `json:"component"` Role models.RoleType `json:"role"` - AddToNav bool `json:"AddToNav"` + AddToNav bool `json:"addToNav"` DefaultNav bool `json:"defaultNav"` Slug string `json:"slug"` diff --git a/public/app/features/plugins/partials/plugin_page.html b/public/app/features/plugins/partials/plugin_page.html index 1105cff3b46..5aadf6db86b 100644 --- a/public/app/features/plugins/partials/plugin_page.html +++ b/public/app/features/plugins/partials/plugin_page.html @@ -1,4 +1,4 @@ - +
diff --git a/public/app/features/plugins/plugin_page_ctrl.ts b/public/app/features/plugins/plugin_page_ctrl.ts index b12960a7306..f9150702de6 100644 --- a/public/app/features/plugins/plugin_page_ctrl.ts +++ b/public/app/features/plugins/plugin_page_ctrl.ts @@ -15,6 +15,7 @@ export class AppPageCtrl { this.backendSrv.get(`/api/plugins/${this.pluginId}/settings`).then(app => { this.appModel = app; this.page = _.findWhere(app.includes, {slug: this.$routeParams.slug}); + if (!this.page) { this.$rootScope.appEvent('alert-error', ['App Page Not Found', '']); }