mirror of
https://github.com/grafana/grafana.git
synced 2025-08-01 21:32:14 +08:00
57 lines
1.7 KiB
TypeScript
57 lines
1.7 KiB
TypeScript
import { getBackendSrv } from '@grafana/runtime';
|
|
import { GENERAL_FOLDER_UID } from 'app/features/search/constants';
|
|
import { getGrafanaSearcher, NestedFolderDTO } from 'app/features/search/service';
|
|
import { queryResultToViewItem } from 'app/features/search/service/utils';
|
|
import { DashboardViewItem } from 'app/features/search/types';
|
|
|
|
export const ROOT_PAGE_SIZE = 50;
|
|
export const PAGE_SIZE = 999;
|
|
|
|
export async function listFolders(
|
|
parentUID?: string,
|
|
parentTitle?: string, // TODO: remove this when old UI is gone
|
|
page = 1,
|
|
pageSize = PAGE_SIZE
|
|
): Promise<DashboardViewItem[]> {
|
|
const backendSrv = getBackendSrv();
|
|
|
|
const folders = await backendSrv.get<NestedFolderDTO[]>('/api/folders', {
|
|
parentUid: parentUID,
|
|
page,
|
|
limit: pageSize,
|
|
});
|
|
|
|
return folders.map((item) => ({
|
|
kind: 'folder',
|
|
uid: item.uid,
|
|
title: item.title,
|
|
parentTitle,
|
|
parentUID,
|
|
url: `/dashboards/f/${item.uid}/`,
|
|
}));
|
|
}
|
|
|
|
export async function listDashboards(parentUID?: string, page = 1, pageSize = PAGE_SIZE): Promise<DashboardViewItem[]> {
|
|
const searcher = getGrafanaSearcher();
|
|
|
|
const dashboardsResults = await searcher.search({
|
|
kind: ['dashboard'],
|
|
query: '*',
|
|
location: parentUID || 'general',
|
|
from: (page - 1) * pageSize, // our pages are 1-indexed, so we need to -1 to convert that to correct value to skip
|
|
limit: pageSize,
|
|
});
|
|
|
|
return dashboardsResults.view.map((item) => {
|
|
const viewItem = queryResultToViewItem(item, dashboardsResults.view);
|
|
|
|
// TODO: Once we remove nestedFolders feature flag, undo this and prevent the 'general'
|
|
// parentUID from being set in searcher
|
|
if (viewItem.parentUID === GENERAL_FOLDER_UID) {
|
|
viewItem.parentUID = undefined;
|
|
}
|
|
|
|
return viewItem;
|
|
});
|
|
}
|