import { useAsyncFn, useToggle } from 'react-use'; import { selectors } from '@grafana/e2e-selectors'; import { config, reportInteraction } from '@grafana/runtime'; import { Button, ConfirmModal, Modal, Space, Text } from '@grafana/ui'; import { t, Trans } from 'app/core/internationalization'; import { useDeleteItemsMutation } from '../../browse-dashboards/api/browseDashboardsAPI'; import { DashboardScene } from '../scene/DashboardScene'; interface ButtonProps { dashboard: DashboardScene; } interface ProvisionedDeleteModalProps { dashboardId: string | undefined; onClose: () => void; } interface DeleteModalProps { dashboardTitle: string; onConfirm: () => void; onClose: () => void; } export function DeleteDashboardButton({ dashboard }: ButtonProps) { const [showModal, toggleModal] = useToggle(false); const [deleteItems] = useDeleteItemsMutation(); const [, onConfirm] = useAsyncFn(async () => { reportInteraction('grafana_manage_dashboards_delete_clicked', { item_counts: { dashboard: 1, }, source: 'dashboard_scene_settings', restore_enabled: Boolean(config.featureToggles.dashboardRestore), }); toggleModal(); if (dashboard.state.uid) { await deleteItems({ selectedItems: { dashboard: { [dashboard.state.uid]: true, }, folder: {}, }, }); } await dashboard.onDashboardDelete(); }, [dashboard, toggleModal]); if (dashboard.state.meta.provisioned && showModal) { return ; } return ( <> {showModal && ( )} ); } export function DeleteDashboardModal({ dashboardTitle, onConfirm, onClose }: DeleteModalProps) { return ( {config.featureToggles.dashboardRestore && ( <> This action will mark the dashboard for deletion in 30 days. Your organization administrator can restore it anytime before the 30 days expire. )} Do you want to delete this dashboard? {dashboardTitle} } onConfirm={onConfirm} onDismiss={onClose} title={t('dashboard-settings.delete-modal.title', 'Delete')} icon="trash-alt" confirmText={t('dashboard-settings.delete-modal.delete-button', 'Delete')} confirmationText={t('dashboard-settings.delete-modal.confirmation-text', 'Delete')} /> ); } function ProvisionedDeleteModal({ dashboardId, onClose }: ProvisionedDeleteModalProps) { return (

This dashboard is managed by Grafana provisioning and cannot be deleted. Remove the dashboard from the config file to delete it.

See{' '} documentation {' '} for more information about provisioning.
File path: {dashboardId}

); }