mirror of
https://github.com/grafana/grafana.git
synced 2025-09-23 05:23:15 +08:00

* refactor: tooltip is required * refactor: add tooltips * refactor: add tooltips * refactor: add tooltips * refactor: add tooltips * refactor: add tooltips * refactor: add tooltips * refactor: adjust tests * refactor: apply changes from code review * refactor: adjust component for e2e test * refactor: adjust fallback * refactor: apply changes from code review * refactor: apply changes from code review * refactor: set IconButton default as type=button and remove from use cases * refactor: remove aria-labels when duplicated and type=button from use cases * refactor: clean up * refactor: fix tests * refactor: fix type errors * refactor: remove changes in order in order to add them to a separate PR * refactor: set IconButton default as type=button * refactor: remove tooltip * refactor: apply changes requested in review
66 lines
2.3 KiB
TypeScript
66 lines
2.3 KiB
TypeScript
import React, { useState } from 'react';
|
|
|
|
import { Button, HorizontalGroup, IconButton, useStyles2 } from '@grafana/ui';
|
|
import { contextSrv } from 'app/core/services/context_srv';
|
|
import { FolderDTO } from 'app/types';
|
|
|
|
import { GENERAL_FOLDER_UID } from '../../constants';
|
|
import { OnMoveOrDeleleSelectedItems } from '../../types';
|
|
|
|
import { getStyles } from './ActionRow';
|
|
import { ConfirmDeleteModal } from './ConfirmDeleteModal';
|
|
import { MoveToFolderModal } from './MoveToFolderModal';
|
|
|
|
type Props = {
|
|
items: Map<string, Set<string>>;
|
|
folder?: FolderDTO; // when we are loading in folder page
|
|
onChange: OnMoveOrDeleleSelectedItems;
|
|
clearSelection: () => void;
|
|
};
|
|
|
|
export function ManageActions({ items, folder, onChange, clearSelection }: Props) {
|
|
const styles = useStyles2(getStyles);
|
|
|
|
const canSave = folder?.canSave;
|
|
const hasEditPermissionInFolders = folder ? canSave : contextSrv.hasEditPermissionInFolders;
|
|
|
|
const canMove = hasEditPermissionInFolders;
|
|
|
|
const selectedFolders = Array.from(items.get('folder') ?? []);
|
|
const includesGeneralFolder = selectedFolders.find((result) => result === GENERAL_FOLDER_UID);
|
|
|
|
const canDelete = hasEditPermissionInFolders && !includesGeneralFolder;
|
|
const [isMoveModalOpen, setIsMoveModalOpen] = useState(false);
|
|
const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);
|
|
|
|
const onMove = () => {
|
|
setIsMoveModalOpen(true);
|
|
};
|
|
|
|
const onDelete = () => {
|
|
setIsDeleteModalOpen(true);
|
|
};
|
|
|
|
return (
|
|
<div className={styles.actionRow} data-testid="manage-actions">
|
|
<HorizontalGroup spacing="md" width="auto">
|
|
<IconButton name="check-square" onClick={clearSelection} tooltip="Uncheck everything" />
|
|
<Button disabled={!canMove} onClick={onMove} icon="exchange-alt" variant="secondary">
|
|
Move
|
|
</Button>
|
|
<Button disabled={!canDelete} onClick={onDelete} icon="trash-alt" variant="destructive">
|
|
Delete
|
|
</Button>
|
|
</HorizontalGroup>
|
|
|
|
{isDeleteModalOpen && (
|
|
<ConfirmDeleteModal onDeleteItems={onChange} results={items} onDismiss={() => setIsDeleteModalOpen(false)} />
|
|
)}
|
|
|
|
{isMoveModalOpen && (
|
|
<MoveToFolderModal onMoveItems={onChange} results={items} onDismiss={() => setIsMoveModalOpen(false)} />
|
|
)}
|
|
</div>
|
|
);
|
|
}
|