From fd96edaef763ce6ba236e07c99684570efff2c98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Fern=C3=A1ndez?= Date: Tue, 25 Jun 2024 09:42:18 +0200 Subject: [PATCH] POC: Disable `ConfirmButton` (#89539) --- .../ConfirmModal/ConfirmContent.tsx | 23 +++++++++++-------- .../components/ConfirmModal/ConfirmModal.tsx | 4 ++++ .../components/BrowseActions/DeleteModal.tsx | 3 ++- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/packages/grafana-ui/src/components/ConfirmModal/ConfirmContent.tsx b/packages/grafana-ui/src/components/ConfirmModal/ConfirmContent.tsx index 016df971c2b..c55b8db959d 100644 --- a/packages/grafana-ui/src/components/ConfirmModal/ConfirmContent.tsx +++ b/packages/grafana-ui/src/components/ConfirmModal/ConfirmContent.tsx @@ -7,8 +7,8 @@ import { selectors } from '@grafana/e2e-selectors'; import { useStyles2 } from '../../themes'; import { Button, ButtonVariant } from '../Button'; +import { Field } from '../Forms/Field'; import { Input } from '../Input/Input'; -import { Box } from '../Layout/Box/Box'; import { Stack } from '../Layout/Stack/Stack'; import { JustifyContent } from '../Layout/types'; import { ResponsiveProp } from '../Layout/utils/responsiveness'; @@ -40,6 +40,8 @@ export interface ConfirmContentProps { onDismiss(): void; /** Alternative action callback */ onAlternative?(): void; + /** Disable the confirm button and the confirm text input if needed */ + disabled?: boolean; } export const ConfirmContent = ({ @@ -55,13 +57,14 @@ export const ConfirmContent = ({ alternativeButtonLabel, description, justifyButtons = 'flex-end', + disabled, }: ConfirmContentProps) => { - const [disabled, setDisabled] = useState(Boolean(confirmPromptText)); + const [isDisabled, setIsDisabled] = useState(disabled); const styles = useStyles2(getStyles); const buttonRef = useRef(null); const onConfirmationTextChange = (event: React.FormEvent) => { - setDisabled(confirmPromptText?.toLowerCase().localeCompare(event.currentTarget.value.toLowerCase()) !== 0); + setIsDisabled(confirmPromptText?.toLowerCase().localeCompare(event.currentTarget.value.toLowerCase()) !== 0); }; useEffect(() => { @@ -69,15 +72,15 @@ export const ConfirmContent = ({ }, []); useEffect(() => { - setDisabled(Boolean(confirmPromptText)); - }, [confirmPromptText]); + setIsDisabled(disabled ? true : Boolean(confirmPromptText)); + }, [confirmPromptText, disabled]); const onConfirmClick = async () => { - setDisabled(true); + setIsDisabled(true); try { await onConfirm(); } finally { - setDisabled(false); + setIsDisabled(false); } }; @@ -91,9 +94,9 @@ export const ConfirmContent = ({ {confirmPromptText ? (
- + - +
) : null} @@ -106,7 +109,7 @@ export const ConfirmContent = ({