From bc08e9cb4cd5e322754651f916babf7594ca68f3 Mon Sep 17 00:00:00 2001 From: Oscar Kilhed Date: Wed, 9 Apr 2025 19:01:43 +0200 Subject: [PATCH] Dynamic dashboards: Extra confirmation before deleting tab or row with content (#103589) * Extra confirmation before deleting tab with content * also confirm rows * make i18n-extract * remake how the confirm works * reset panel menu behavior * update i18n, fix missing event * fix lint --- .../edit-pane/EditPaneHeader.tsx | 28 +++++++--------- .../MultiSelectedObjectsEditableElement.tsx | 15 +++++++++ .../MultiSelectedVizPanelsEditableElement.tsx | 15 +++++++++ .../edit-pane/VizPanelEditableElement.tsx | 18 +++++++++++ .../scene/layout-rows/RowItem.tsx | 28 ++++++++++++++++ .../scene/layout-rows/RowsLayoutManager.tsx | 6 +++- .../scene/layout-tabs/TabItem.tsx | 32 ++++++++++++++++++- .../scene/layout-tabs/TabsLayoutManager.tsx | 7 +++- .../scene/types/EditableDashboardElement.ts | 5 +++ public/locales/en-US/grafana.json | 13 ++++++++ 10 files changed, 147 insertions(+), 20 deletions(-) diff --git a/public/app/features/dashboard-scene/edit-pane/EditPaneHeader.tsx b/public/app/features/dashboard-scene/edit-pane/EditPaneHeader.tsx index 9605d479df9..e7aa01f9ede 100644 --- a/public/app/features/dashboard-scene/edit-pane/EditPaneHeader.tsx +++ b/public/app/features/dashboard-scene/edit-pane/EditPaneHeader.tsx @@ -1,7 +1,7 @@ import { css } from '@emotion/css'; import { GrafanaTheme2 } from '@grafana/data'; -import { Button, Menu, Stack, Text, useStyles2, ConfirmButton, Dropdown, Icon, IconButton } from '@grafana/ui'; +import { Button, Menu, Stack, Text, useStyles2, Dropdown, Icon, IconButton } from '@grafana/ui'; import { t } from 'app/core/internationalization'; import { EditableDashboardElement } from '../scene/types/EditableDashboardElement'; @@ -20,6 +20,7 @@ export function EditPaneHeader({ element, editPane }: EditPaneHeaderProps) { const onCopy = element.onCopy?.bind(element); const onDuplicate = element.onDuplicate?.bind(element); const onDelete = element.onDelete?.bind(element); + const onConfirmDelete = element.onConfirmDelete?.bind(element); // temporary simple solution, should select parent element const onGoBack = () => editPane.clearSelection(); const canGoBack = editPane.state.selection; @@ -40,7 +41,7 @@ export function EditPaneHeader({ element, editPane }: EditPaneHeaderProps) { {element.renderActions && element.renderActions()} - {(onCopy || onDelete) && ( + {(onCopy || onDuplicate) && ( @@ -69,22 +70,15 @@ export function EditPaneHeader({ element, editPane }: EditPaneHeaderProps) { )} - {onDelete && ( - -