From 89a75343eb370eb2e17dcd34caa8e8ed4e345dee Mon Sep 17 00:00:00 2001 From: Alex Khomenko Date: Wed, 22 Apr 2020 11:24:29 +0300 Subject: [PATCH] Search: Load folder page (#23768) --- .../search/components/DashboardListPage.tsx | 29 +++++----- public/app/features/search/loaders.ts | 58 +++++++++++++++++++ 2 files changed, 72 insertions(+), 15 deletions(-) create mode 100644 public/app/features/search/loaders.ts diff --git a/public/app/features/search/components/DashboardListPage.tsx b/public/app/features/search/components/DashboardListPage.tsx index 516877d0580..b5613221162 100644 --- a/public/app/features/search/components/DashboardListPage.tsx +++ b/public/app/features/search/components/DashboardListPage.tsx @@ -7,7 +7,7 @@ import { StoreState } from 'app/types'; import { getNavModel } from 'app/core/selectors/navModel'; import { getRouteParams } from 'app/core/selectors/location'; import Page from 'app/core/components/Page/Page'; -import { backendSrv } from 'app/core/services/backend_srv'; +import { loadFolderPage } from '../loaders'; import { ManageDashboards } from './ManageDashboards'; interface Props { @@ -17,25 +17,24 @@ interface Props { export const DashboardListPage: FC = memo(({ navModel, uid }) => { const { loading, value } = useAsync(() => { - if (uid) { - return backendSrv.getFolderByUid(uid).then((folder: any) => { - const url = locationUtil.stripBaseFromUrl(folder.url); - - if (url !== location.pathname) { - getLocationSrv().update({ path: url }); - } - - return folder.id; - }); - } else { - return Promise.resolve(undefined); + if (!uid) { + return Promise.resolve({ pageNavModel: navModel }); } + return loadFolderPage(uid, 'manage-folder-dashboards').then(({ folder, model }) => { + const url = locationUtil.stripBaseFromUrl(folder.url); + + if (url !== location.pathname) { + getLocationSrv().update({ path: url }); + } + + return { id: folder.id, pageNavModel: { ...navModel, ...model } }; + }); }, [uid]); return ( - + - + ); diff --git a/public/app/features/search/loaders.ts b/public/app/features/search/loaders.ts new file mode 100644 index 00000000000..b5bf28d7cb2 --- /dev/null +++ b/public/app/features/search/loaders.ts @@ -0,0 +1,58 @@ +import { backendSrv } from 'app/core/services/backend_srv'; + +export const loadFolderPage = (uid: string, activeChildId: string) => { + const navModel = { + main: { + icon: 'folder-open', + id: 'manage-folder', + subTitle: 'Manage folder dashboards & permissions', + url: '', + text: '', + breadcrumbs: [{ title: 'Dashboards', url: 'dashboards' }], + children: [ + { + active: activeChildId === 'manage-folder-dashboards', + icon: 'th-large', + id: 'manage-folder-dashboards', + text: 'Dashboards', + url: 'dashboards', + }, + { + active: activeChildId === 'manage-folder-permissions', + icon: 'lock', + id: 'manage-folder-permissions', + text: 'Permissions', + url: 'dashboards/permissions', + }, + { + active: activeChildId === 'manage-folder-settings', + icon: 'cog', + id: 'manage-folder-settings', + text: 'Settings', + url: 'dashboards/settings', + }, + ], + }, + }; + + return backendSrv.getFolderByUid(uid).then((folder: any) => { + const folderTitle = folder.title; + const folderUrl = folder.url; + navModel.main.text = folderTitle; + + const dashTab = navModel.main.children.find((child: any) => child.id === 'manage-folder-dashboards'); + dashTab.url = folderUrl; + + if (folder.canAdmin) { + const permTab = navModel.main.children.find((child: any) => child.id === 'manage-folder-permissions'); + permTab.url = folderUrl + '/permissions'; + + const settingsTab = navModel.main.children.find((child: any) => child.id === 'manage-folder-settings'); + settingsTab.url = folderUrl + '/settings'; + } else { + navModel.main.children = [dashTab]; + } + + return { folder, model: navModel }; + }); +};