diff --git a/docs/sources/administration/plugin-management/_index.md b/docs/sources/administration/plugin-management/_index.md index 5e14a43c0a7..5e71d76e5dc 100644 --- a/docs/sources/administration/plugin-management/_index.md +++ b/docs/sources/administration/plugin-management/_index.md @@ -67,7 +67,7 @@ The Plugin catalog allows you to browse and manage plugins from within Grafana.
@@ -76,11 +76,8 @@ In order to be able to install / uninstall / update plugins using plugin catalog Before following the steps below, make sure you are logged in as a Grafana administrator. -Currently, there are two entry points to the Plugin catalog. -- Grafana server administrators can find it at **Server Admin > - Plugins**. -- Organization administrators can find it at **Configuration > Plugins**. +- Administrators can find the Plugin catalog at **Configuration > Plugins**. ### Browse plugins @@ -90,7 +87,7 @@ To browse for available plugins: 1. Click the **All** filter to browse all available plugins. 1. Click the **Data sources**, **Panels**, or **Applications** buttons to filter by plugin type. -![Plugin catalog browse](/static/img/docs/plugins/plugins-catalog-browse-8-1.png) +![Plugin catalog browse](/static/img/docs/plugins/plugins-catalog-browse-9.2.png) ### Install a plugin diff --git a/pkg/api/index.go b/pkg/api/index.go index 5459be8aff4..b0174b691fd 100644 --- a/pkg/api/index.go +++ b/pkg/api/index.go @@ -366,7 +366,7 @@ func (hs *HTTPServer) setupConfigNodes(c *models.ReqContext) ([]*dtos.NavLink, e }) } - if c.OrgRole == org.RoleAdmin { + if c.OrgRole == org.RoleAdmin || (hs.Cfg.PluginAdminEnabled && ac.ReqGrafanaAdmin(c)) { configNodes = append(configNodes, &dtos.NavLink{ Text: "Plugins", Id: "plugins", @@ -724,12 +724,6 @@ func (hs *HTTPServer) buildAdminNavLinks(c *models.ReqContext) []*dtos.NavLink { }) } - if hs.Cfg.PluginAdminEnabled && ac.ReqGrafanaAdmin(c) { - adminNavLinks = append(adminNavLinks, &dtos.NavLink{ - Text: "Plugins", Id: "admin-plugins", Url: hs.Cfg.AppSubURL + "/admin/plugins", Icon: "plug", - }) - } - return adminNavLinks } diff --git a/public/app/features/plugins/admin/pages/Browse.tsx b/public/app/features/plugins/admin/pages/Browse.tsx index 3c8edae639f..af73faf228c 100644 --- a/public/app/features/plugins/admin/pages/Browse.tsx +++ b/public/app/features/plugins/admin/pages/Browse.tsx @@ -17,13 +17,12 @@ import { SearchField } from '../components/SearchField'; import { Sorters } from '../helpers'; import { useHistory } from '../hooks/useHistory'; import { useGetAllWithFilters, useIsRemotePluginsAvailable, useDisplayMode } from '../state/hooks'; -import { PluginAdminRoutes, PluginListDisplayMode } from '../types'; +import { PluginListDisplayMode } from '../types'; export default function Browse({ route }: GrafanaRouteComponentProps): ReactElement | null { const location = useLocation(); const locationSearch = locationSearchToObject(location.search); - const navModelId = getNavModelId(route.routeName); - const navModel = useSelector((state: StoreState) => getNavModel(state.navIndex, navModelId)); + const navModel = useSelector((state: StoreState) => getNavModel(state.navIndex, 'plugins')); const { displayMode, setDisplayMode } = useDisplayMode(); const styles = useStyles2(getStyles); const history = useHistory(); @@ -173,13 +172,3 @@ const getStyles = (theme: GrafanaTheme2) => ({ } `, }); - -// Because the component is used under multiple paths (/plugins and /admin/plugins) we need to get -// the correct navModel from the store -const getNavModelId = (routeName?: string) => { - if (routeName === PluginAdminRoutes.HomeAdmin || routeName === PluginAdminRoutes.BrowseAdmin) { - return 'admin-plugins'; - } - - return 'plugins'; -}; diff --git a/public/app/features/plugins/admin/routes.ts b/public/app/features/plugins/admin/routes.tsx similarity index 54% rename from public/app/features/plugins/admin/routes.ts rename to public/app/features/plugins/admin/routes.tsx index 53a573ccbf4..9e092654f1b 100644 --- a/public/app/features/plugins/admin/routes.ts +++ b/public/app/features/plugins/admin/routes.tsx @@ -1,7 +1,9 @@ +import React from 'react'; +import { Redirect } from 'react-router-dom'; + import { SafeDynamicImport } from 'app/core/components/DynamicImports/SafeDynamicImport'; import { RouteDescriptor } from 'app/core/navigation/types'; -import { isGrafanaAdmin } from './permissions'; import { PluginAdminRoutes } from './types'; const DEFAULT_ROUTES = [ @@ -23,33 +25,13 @@ const DEFAULT_ROUTES = [ routeName: PluginAdminRoutes.Details, component: SafeDynamicImport(() => import(/* webpackChunkName: "PluginPage" */ './pages/PluginDetails')), }, -]; - -const ADMIN_ROUTES = [ { - path: '/admin/plugins', + path: '/admin/plugins/*', navId: 'admin-plugins', - routeName: PluginAdminRoutes.HomeAdmin, - component: SafeDynamicImport(() => import(/* webpackChunkName: "PluginListPage" */ './pages/Browse')), - }, - { - path: '/admin/plugins/browse', - navId: 'admin-plugins', - routeName: PluginAdminRoutes.BrowseAdmin, - component: SafeDynamicImport(() => import(/* webpackChunkName: "PluginListPage" */ './pages/Browse')), - }, - { - path: '/admin/plugins/:pluginId/', - navId: 'admin-plugins', - routeName: PluginAdminRoutes.DetailsAdmin, - component: SafeDynamicImport(() => import(/* webpackChunkName: "PluginPage" */ './pages/PluginDetails')), + component: () => , }, ]; export function getRoutes(): RouteDescriptor[] { - if (isGrafanaAdmin()) { - return [...DEFAULT_ROUTES, ...ADMIN_ROUTES]; - } - return DEFAULT_ROUTES; } diff --git a/public/app/features/plugins/admin/types.ts b/public/app/features/plugins/admin/types.ts index cfd5efb6527..48adcee05c1 100644 --- a/public/app/features/plugins/admin/types.ts +++ b/public/app/features/plugins/admin/types.ts @@ -21,9 +21,6 @@ export enum PluginAdminRoutes { Home = 'plugins-home', Browse = 'plugins-browse', Details = 'plugins-details', - HomeAdmin = 'plugins-home-admin', - BrowseAdmin = 'plugins-browse-admin', - DetailsAdmin = 'plugins-details-admin', } export enum PluginIconName {