diff --git a/public/app/features/dashboard-scene/pages/DashboardScenePage.tsx b/public/app/features/dashboard-scene/pages/DashboardScenePage.tsx index 5d963ff1b9b..2a4344e1e88 100644 --- a/public/app/features/dashboard-scene/pages/DashboardScenePage.tsx +++ b/public/app/features/dashboard-scene/pages/DashboardScenePage.tsx @@ -21,7 +21,8 @@ export interface Props export function DashboardScenePage({ route, queryParams, location }: Props) { const params = useParams(); - const { type, slug, uid, path } = params; + const { type, slug, uid } = params; + const path = params['*']; const prevMatch = usePrevious({ params }); const stateManager = getDashboardScenePageStateManager(); const { dashboard, isLoading, loadError } = stateManager.useState(); @@ -33,7 +34,7 @@ export function DashboardScenePage({ route, queryParams, location }: Props) { stateManager.loadSnapshot(slug!); } else { stateManager.loadDashboard({ - uid: path ?? uid ?? '', + uid: (route.routeName === DashboardRoutes.Provisioning ? path : uid) ?? '', slug: slug, route: route.routeName as DashboardRoutes, urlFolderUid: queryParams.folderUid, diff --git a/public/app/features/provisioning/RepositoryListPage.tsx b/public/app/features/provisioning/RepositoryListPage.tsx index e7c80c95a3a..ae91a358631 100644 --- a/public/app/features/provisioning/RepositoryListPage.tsx +++ b/public/app/features/provisioning/RepositoryListPage.tsx @@ -1,7 +1,7 @@ import { css } from '@emotion/css'; import { useState } from 'react'; -import { Card, EmptySearchResult, EmptyState, FilterInput, LinkButton, Stack } from '@grafana/ui'; +import { Card, EmptySearchResult, EmptyState, FilterInput, LinkButton, Stack, TextLink } from '@grafana/ui'; import { Page } from 'app/core/components/Page/Page'; import { Resource } from '../apiserver/types'; @@ -54,11 +54,13 @@ function RepositoryListPageContent({ items }: { items?: Array - {item.spec.title} + + {item.spec.title} + {item.spec.type} - + Edit diff --git a/public/app/features/provisioning/RepositoryStatusPage.tsx b/public/app/features/provisioning/RepositoryStatusPage.tsx new file mode 100644 index 00000000000..a8d70108838 --- /dev/null +++ b/public/app/features/provisioning/RepositoryStatusPage.tsx @@ -0,0 +1,14 @@ +import { Page } from 'app/core/components/Page/Page'; + +export default function RepositoryStatusPage() { + return ( + + +
Repository status
+
+
+ ); +} diff --git a/public/app/features/provisioning/utils/routes.ts b/public/app/features/provisioning/utils/routes.ts new file mode 100644 index 00000000000..665c1eee395 --- /dev/null +++ b/public/app/features/provisioning/utils/routes.ts @@ -0,0 +1,41 @@ +import { SafeDynamicImport } from 'app/core/components/DynamicImports/SafeDynamicImport'; +import { RouteDescriptor } from 'app/core/navigation/types'; +import { DashboardRoutes } from 'app/types'; + +export function getProvisioningRoutes(): RouteDescriptor[] { + return [ + { + path: '/admin/provisioning', + component: SafeDynamicImport( + () => import(/* webpackChunkName: "RepositoryListPage"*/ 'app/features/provisioning/RepositoryListPage') + ), + }, + { + path: '/admin/provisioning/new', + component: SafeDynamicImport( + () => import(/* webpackChunkName: "NewRepositoryPage"*/ 'app/features/provisioning/NewRepositoryPage') + ), + }, + { + path: '/admin/provisioning/:name', + component: SafeDynamicImport( + () => import(/* webpackChunkName: "RepositoryStatusPage"*/ 'app/features/provisioning/RepositoryStatusPage') + ), + }, + { + path: '/admin/provisioning/:name/edit', + component: SafeDynamicImport( + () => import(/* webpackChunkName: "EditRepositoryPage"*/ 'app/features/provisioning/EditRepositoryPage') + ), + }, + { + path: '/admin/provisioning/:slug/dashboard/preview/*', + pageClass: 'page-dashboard', + routeName: DashboardRoutes.Provisioning, + component: SafeDynamicImport( + () => + import(/* webpackChunkName: "DashboardScenePage" */ 'app/features/dashboard-scene/pages/DashboardScenePage') + ), + }, + ]; +} diff --git a/public/app/routes/routes.tsx b/public/app/routes/routes.tsx index abb76a9a947..d16f8f3f388 100644 --- a/public/app/routes/routes.tsx +++ b/public/app/routes/routes.tsx @@ -22,6 +22,7 @@ import { AccessControlAction, DashboardRoutes } from 'app/types'; import { SafeDynamicImport } from '../core/components/DynamicImports/SafeDynamicImport'; import { RouteDescriptor } from '../core/navigation/types'; import { getPublicDashboardRoutes } from '../features/dashboard/routes'; +import { getProvisioningRoutes } from '../features/provisioning/utils/routes'; const isDevEnv = config.buildInfo.env === 'development'; export const extraRoutes: RouteDescriptor[] = []; @@ -63,15 +64,6 @@ export function getAppRoutes(): RouteDescriptor[] { () => import(/* webpackChunkName: "DashboardPage" */ '../features/dashboard/containers/NewDashboardWithDS') ), }, - { - path: '/dashboard/provisioning/:slug/:path/*', - pageClass: 'page-dashboard', - routeName: DashboardRoutes.Provisioning, - component: SafeDynamicImport( - () => - import(/* webpackChunkName: "DashboardScenePage" */ '../features/dashboard-scene/pages/DashboardScenePage') - ), - }, { path: '/dashboard/:type/:slug', pageClass: 'page-dashboard', @@ -535,24 +527,6 @@ export function getAppRoutes(): RouteDescriptor[] { () => import(/* webpackChunkName: "BookmarksPage"*/ 'app/features/bookmarks/BookmarksPage') ), }, - { - path: '/admin/provisioning', - component: SafeDynamicImport( - () => import(/* webpackChunkName: "RepositoryListPage"*/ 'app/features/provisioning/RepositoryListPage') - ), - }, - { - path: '/admin/provisioning/new', - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NewRepositoryPage"*/ 'app/features/provisioning/NewRepositoryPage') - ), - }, - { - path: '/admin/provisioning/edit/:name', - component: SafeDynamicImport( - () => import(/* webpackChunkName: "EditRepositoryPage"*/ 'app/features/provisioning/EditRepositoryPage') - ), - }, ...getPluginCatalogRoutes(), ...getSupportBundleRoutes(), ...getAlertingRoutes(), @@ -560,6 +534,7 @@ export function getAppRoutes(): RouteDescriptor[] { ...extraRoutes, ...getPublicDashboardRoutes(), ...getDataConnectionsRoutes(), + ...getProvisioningRoutes(), { path: '/goto/*', component: HandleGoToRedirect,