diff --git a/public/app/features/search/components/DashboardActions.tsx b/public/app/features/search/components/DashboardActions.tsx index 52a1d52b8cd..5eacc48dcd2 100644 --- a/public/app/features/search/components/DashboardActions.tsx +++ b/public/app/features/search/components/DashboardActions.tsx @@ -1,16 +1,27 @@ -import React from 'react'; +import React, { useMemo, useState } from 'react'; import { config, reportInteraction } from '@grafana/runtime'; -import { Menu, Dropdown, Button, Icon } from '@grafana/ui'; +import { Menu, Dropdown, Button, Icon, HorizontalGroup } from '@grafana/ui'; import { t } from 'app/core/internationalization'; +import { FolderDTO } from 'app/types'; + +import { MoveToFolderModal } from '../page/components/MoveToFolderModal'; export interface Props { - folderUid?: string; + folder: FolderDTO | undefined; canCreateFolders?: boolean; canCreateDashboards?: boolean; } -export const DashboardActions = ({ folderUid, canCreateFolders = false, canCreateDashboards = false }: Props) => { +export const DashboardActions = ({ folder, canCreateFolders = false, canCreateDashboards = false }: Props) => { + const [isMoveModalOpen, setIsMoveModalOpen] = useState(false); + const canMove = config.featureToggles.nestedFolders && (folder?.canSave ?? false); + + const moveSelection = useMemo( + () => new Map>([['folder', new Set(folder?.uid ? [folder.uid] : [])]]), + [folder] + ); + const actionUrl = (type: string) => { let url = `dashboard/${type}`; const isTypeNewFolder = type === 'new_folder'; @@ -19,8 +30,8 @@ export const DashboardActions = ({ folderUid, canCreateFolders = false, canCreat url = `dashboards/folder/new/`; } - if (folderUid) { - url += `?folderUid=${folderUid}`; + if (folder?.uid) { + url += `?folderUid=${folder.uid}`; } return url; @@ -38,7 +49,7 @@ export const DashboardActions = ({ folderUid, canCreateFolders = false, canCreat } /> )} - {canCreateFolders && (config.featureToggles.nestedFolders || !folderUid) && ( + {canCreateFolders && (config.featureToggles.nestedFolders || !folder?.uid) && ( - - - - + <> +
+ + {canMove && ( + + )} + + + + +
+ + {canMove && isMoveModalOpen && ( + {}} + results={moveSelection} + isOpen={isMoveModalOpen} + onDismiss={() => setIsMoveModalOpen(false)} + /> + )} + ); }; diff --git a/public/app/features/search/components/ManageDashboardsNew.tsx b/public/app/features/search/components/ManageDashboardsNew.tsx index 353320d693d..68b61b1d729 100644 --- a/public/app/features/search/components/ManageDashboardsNew.tsx +++ b/public/app/features/search/components/ManageDashboardsNew.tsx @@ -61,7 +61,7 @@ export const ManageDashboardsNew = React.memo(({ folder }: Props) => { {viewActions && (