FolderActionsButton: Move folder action set up for provisioned folders (#111913)
This commit is contained in:
@@ -7,7 +7,9 @@ import { Button, Drawer, Dropdown, Icon, Menu, MenuItem } from '@grafana/ui';
|
||||
import { Permissions } from 'app/core/components/AccessControl';
|
||||
import { appEvents } from 'app/core/core';
|
||||
import { RepoType } from 'app/features/provisioning/Wizard/types';
|
||||
import { BulkMoveProvisionedResource } from 'app/features/provisioning/components/BulkActions/BulkMoveProvisionedResource';
|
||||
import { DeleteProvisionedFolderForm } from 'app/features/provisioning/components/Folders/DeleteProvisionedFolderForm';
|
||||
import { useIsProvisionedInstance } from 'app/features/provisioning/hooks/useIsProvisionedInstance';
|
||||
import { getReadOnlyTooltipText } from 'app/features/provisioning/utils/repository';
|
||||
import { ShowModalReactEvent } from 'app/types/events';
|
||||
import { FolderDTO } from 'app/types/folders';
|
||||
@@ -29,14 +31,18 @@ export function FolderActionsButton({ folder, repoType, isReadOnlyRepo }: Props)
|
||||
const [isOpen, setIsOpen] = useState(false);
|
||||
const [showPermissionsDrawer, setShowPermissionsDrawer] = useState(false);
|
||||
const [showDeleteProvisionedFolderDrawer, setShowDeleteProvisionedFolderDrawer] = useState(false);
|
||||
const [showMoveProvisionedFolderDrawer, setShowMoveProvisionedFolderDrawer] = useState(false);
|
||||
const [moveFolder] = useMoveFolderMutationFacade();
|
||||
const isProvisionedInstance = useIsProvisionedInstance();
|
||||
|
||||
const deleteFolder = useDeleteFolderMutationFacade();
|
||||
|
||||
const { canEditFolders, canDeleteFolders, canViewPermissions, canSetPermissions } = getFolderPermissions(folder);
|
||||
const isProvisionedFolder = folder.managedBy === ManagerKind.Repo;
|
||||
// When its single provisioned folder, cannot move the root repository folder
|
||||
const isProvisionedRootFolder = isProvisionedFolder && !isProvisionedInstance && folder.parentUid === undefined;
|
||||
// Can only move folders when the folder is not provisioned
|
||||
const canMoveFolder = canEditFolders && !isProvisionedFolder;
|
||||
const canMoveFolder = canEditFolders && !isProvisionedRootFolder;
|
||||
|
||||
const onMove = async (destinationUID: string) => {
|
||||
await moveFolder({ folderUID: folder.uid, destinationUID: destinationUID });
|
||||
@@ -115,6 +121,10 @@ export function FolderActionsButton({ folder, repoType, isReadOnlyRepo }: Props)
|
||||
setShowDeleteProvisionedFolderDrawer(true);
|
||||
};
|
||||
|
||||
const handleShowMoveProvisionedFolderDrawer = () => {
|
||||
setShowMoveProvisionedFolderDrawer(true);
|
||||
};
|
||||
|
||||
const managePermissionsLabel = t('browse-dashboards.folder-actions-button.manage-permissions', 'Manage permissions');
|
||||
const moveLabel = t('browse-dashboards.folder-actions-button.move', 'Move');
|
||||
const deleteLabel = t('browse-dashboards.folder-actions-button.delete', 'Delete');
|
||||
@@ -122,7 +132,12 @@ export function FolderActionsButton({ folder, repoType, isReadOnlyRepo }: Props)
|
||||
const menu = (
|
||||
<Menu>
|
||||
{canViewPermissions && <MenuItem onClick={() => setShowPermissionsDrawer(true)} label={managePermissionsLabel} />}
|
||||
{canMoveFolder && !isReadOnlyRepo && <MenuItem onClick={showMoveModal} label={moveLabel} />}
|
||||
{canMoveFolder && !isReadOnlyRepo && (
|
||||
<MenuItem
|
||||
onClick={isProvisionedFolder ? handleShowMoveProvisionedFolderDrawer : showMoveModal}
|
||||
label={moveLabel}
|
||||
/>
|
||||
)}
|
||||
{canDeleteFolders && !isReadOnlyRepo && (
|
||||
<MenuItem
|
||||
destructive
|
||||
@@ -175,6 +190,19 @@ export function FolderActionsButton({ folder, repoType, isReadOnlyRepo }: Props)
|
||||
/>
|
||||
</Drawer>
|
||||
)}
|
||||
{showMoveProvisionedFolderDrawer && (
|
||||
<Drawer
|
||||
title={t('browse-dashboards.action.move-provisioned-folder', 'Move provisioned folder')}
|
||||
subtitle={folder.title}
|
||||
onClose={() => setShowMoveProvisionedFolderDrawer(false)}
|
||||
>
|
||||
<BulkMoveProvisionedResource
|
||||
folderUid={folder.uid}
|
||||
selectedItems={{ dashboard: {}, folder: { [folder.uid]: true } }}
|
||||
onDismiss={() => setShowMoveProvisionedFolderDrawer(false)}
|
||||
/>
|
||||
</Drawer>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -3496,6 +3496,7 @@
|
||||
"move-modal-field-label": "Folder name",
|
||||
"move-modal-text": "This action will move the following content:",
|
||||
"move-modal-title": "Move",
|
||||
"move-provisioned-folder": "Move provisioned folder",
|
||||
"moving": "Moving...",
|
||||
"new-folder-name-required-phrase": "Folder name is required.",
|
||||
"selected-mix-resources-modal-text": "You have selected both provisioned and non-provisioned resources. These cannot be processed together. Please select only provisioned resources or only non-provisioned resources and try again.",
|
||||
|
||||
Reference in New Issue
Block a user