1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import { css } from '@emotion/css';
- import React, { FC } from 'react';
- import { GrafanaTheme } from '@grafana/data';
- import { ConfirmModal, stylesFactory, useTheme } from '@grafana/ui';
- import { deleteFoldersAndDashboards } from 'app/features/manage-dashboards/state/actions';
- import { OnMoveOrDeleleSelectedItems } from '../../types';
- interface Props {
- onDeleteItems: OnMoveOrDeleleSelectedItems;
- results: Map<string, Set<string>>;
- isOpen: boolean;
- onDismiss: () => void;
- }
- export const ConfirmDeleteModal: FC<Props> = ({ results, onDeleteItems, isOpen, onDismiss }) => {
- const theme = useTheme();
- const styles = getStyles(theme);
- const dashboards = Array.from(results.get('dashboard') ?? []);
- const folders = Array.from(results.get('folder') ?? []);
- const folderCount = folders.length;
- const dashCount = dashboards.length;
- let text = 'Do you want to delete the ';
- let subtitle;
- const dashEnding = dashCount === 1 ? '' : 's';
- const folderEnding = folderCount === 1 ? '' : 's';
- if (folderCount > 0 && dashCount > 0) {
- text += `selected folder${folderEnding} and dashboard${dashEnding}?\n`;
- subtitle = `All dashboards and alerts of the selected folder${folderEnding} will also be deleted`;
- } else if (folderCount > 0) {
- text += `selected folder${folderEnding} and all ${folderCount === 1 ? 'its' : 'their'} dashboards and alerts?`;
- } else {
- text += `${dashCount} selected dashboard${dashEnding}?`;
- }
- const deleteItems = () => {
- deleteFoldersAndDashboards(folders, dashboards).then(() => {
- onDeleteItems();
- onDismiss();
- });
- };
- return isOpen ? (
- <ConfirmModal
- isOpen={isOpen}
- title="Delete"
- body={
- <>
- {text} {subtitle && <div className={styles.subtitle}>{subtitle}</div>}
- </>
- }
- confirmText="Delete"
- onConfirm={deleteItems}
- onDismiss={onDismiss}
- />
- ) : null;
- };
- const getStyles = stylesFactory((theme: GrafanaTheme) => {
- return {
- subtitle: css`
- font-size: ${theme.typography.size.base};
- padding-top: ${theme.spacing.md};
- `,
- };
- });
|