From 4c3adeff7c72fdce60a5752ad66a6624d67480d6 Mon Sep 17 00:00:00 2001 From: Joao Silva <100691367+JoaoSilvaGrafana@users.noreply.github.com> Date: Tue, 22 Nov 2022 17:45:52 +0100 Subject: [PATCH] [v9.3.x] Preferences: Add confirmation modal when saving org preferences (#59119) (#59141) --- .../ConfirmModal/ConfirmModal.story.tsx | 7 ++-- .../components/ConfirmModal/ConfirmModal.tsx | 7 ++-- .../SharedPreferences/SharedPreferences.tsx | 11 +++++-- public/app/core/services/ModalManager.ts | 8 ++++- .../app/features/org/OrgDetailsPage.test.tsx | 33 +++++++++++++++++-- public/app/features/org/OrgDetailsPage.tsx | 22 +++++++++++-- public/app/types/events.ts | 4 ++- 7 files changed, 79 insertions(+), 13 deletions(-) diff --git a/packages/grafana-ui/src/components/ConfirmModal/ConfirmModal.story.tsx b/packages/grafana-ui/src/components/ConfirmModal/ConfirmModal.story.tsx index 2255b431718c..4135e314a1fa 100644 --- a/packages/grafana-ui/src/components/ConfirmModal/ConfirmModal.story.tsx +++ b/packages/grafana-ui/src/components/ConfirmModal/ConfirmModal.story.tsx @@ -46,6 +46,7 @@ export const Basic: ComponentStory = ({ body, description, confirmText, + confirmButtonVariant, dismissText, icon, isOpen, @@ -58,6 +59,7 @@ export const Basic: ComponentStory = ({ body={body} description={description} confirmText={confirmText} + confirmButtonVariant={confirmButtonVariant} dismissText={dismissText} icon={icon} onConfirm={onConfirm} @@ -77,6 +79,7 @@ Basic.args = { body: 'Are you sure you want to delete this user?', description: 'Removing the user will not remove any dashboards the user has created', confirmText: 'Delete', + confirmButtonVariant: 'destructive', dismissText: 'Cancel', icon: 'exclamation-triangle', isOpen: true, @@ -112,7 +115,7 @@ export const AlternativeAction: ComponentStory = ({ AlternativeAction.parameters = { controls: { - exclude: [...defaultExcludes, 'confirmationText'], + exclude: [...defaultExcludes, 'confirmationText', 'confirmButtonVariant'], }, }; @@ -155,7 +158,7 @@ export const WithConfirmation: ComponentStory = ({ WithConfirmation.parameters = { controls: { - exclude: [...defaultExcludes, 'alternativeText'], + exclude: [...defaultExcludes, 'alternativeText', 'confirmButtonVariant'], }, }; diff --git a/packages/grafana-ui/src/components/ConfirmModal/ConfirmModal.tsx b/packages/grafana-ui/src/components/ConfirmModal/ConfirmModal.tsx index 0251fbcfd0c0..86058fa945f7 100644 --- a/packages/grafana-ui/src/components/ConfirmModal/ConfirmModal.tsx +++ b/packages/grafana-ui/src/components/ConfirmModal/ConfirmModal.tsx @@ -7,7 +7,7 @@ import { selectors } from '@grafana/e2e-selectors'; import { HorizontalGroup, Input } from '..'; import { useStyles2 } from '../../themes'; import { IconName } from '../../types/icon'; -import { Button } from '../Button'; +import { Button, ButtonVariant } from '../Button'; import { Modal } from '../Modal/Modal'; export interface ConfirmModalProps { @@ -31,6 +31,8 @@ export interface ConfirmModalProps { confirmationText?: string; /** Text for alternative button */ alternativeText?: string; + /** Confirm button variant */ + confirmButtonVariant?: ButtonVariant; /** Confirm action callback */ onConfirm(): void; /** Dismiss action callback */ @@ -53,6 +55,7 @@ export const ConfirmModal = ({ onConfirm, onDismiss, onAlternative, + confirmButtonVariant = 'destructive', }: ConfirmModalProps): JSX.Element => { const [disabled, setDisabled] = useState(Boolean(confirmationText)); const styles = useStyles2(getStyles); @@ -86,7 +89,7 @@ export const ConfirmModal = ({ {dismissText}