From 6eaab9e57d0f919c7221d68086aef83f2c43cc68 Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Tue, 12 Mar 2024 13:07:23 +0000 Subject: [PATCH] E2C: Use ConfirmModal for DisconnectModal (#84279) change disconnect modal to use confirmmodal --- .../onprem/DisconnectModal.tsx | 73 +++++++++++-------- .../admin/migrate-to-cloud/onprem/Page.tsx | 39 ++++------ 2 files changed, 58 insertions(+), 54 deletions(-) diff --git a/public/app/features/admin/migrate-to-cloud/onprem/DisconnectModal.tsx b/public/app/features/admin/migrate-to-cloud/onprem/DisconnectModal.tsx index f7aa003e8b2..30cd42b507f 100644 --- a/public/app/features/admin/migrate-to-cloud/onprem/DisconnectModal.tsx +++ b/public/app/features/admin/migrate-to-cloud/onprem/DisconnectModal.tsx @@ -1,45 +1,56 @@ -import React, { useState } from 'react'; +import React, { useCallback } from 'react'; -import { Modal, Button, Text } from '@grafana/ui'; +import { Alert, ConfirmModal, Stack } from '@grafana/ui'; import { Trans, t } from 'app/core/internationalization'; +import { useDisconnectStackMutation } from '../api'; + interface Props { - hideModal: () => void; - onConfirm: () => Promise<{ data: void } | { error: unknown }>; + isOpen: boolean; + onDismiss: () => void; } -export const DisconnectModal = ({ hideModal, onConfirm }: Props) => { - const [isDisconnecting, setIsDisconnecting] = useState(false); +export const DisconnectModal = ({ isOpen, onDismiss }: Props) => { + const [disconnectStack, { isLoading, isError }] = useDisconnectStackMutation(); - const onConfirmDisconnect = async () => { - setIsDisconnecting(true); - await onConfirm(); - setIsDisconnecting(false); - hideModal(); - }; + const handleConfirm = useCallback(async () => { + const resp = await disconnectStack(); + if (!('error' in resp)) { + onDismiss(); + } + }, [disconnectStack, onDismiss]); - return ( - - + const confirmBody = ( + + {isError && ( + + )} +
This will remove the migration token from this installation. If you wish to upload more resources in the future, you will need to enter a new migration token. - - - - - - +
+
+ ); + + return ( + } // body is mandatory prop, but i don't wanna + description={confirmBody} + confirmText={ + isLoading + ? t('migrate-to-cloud.disconnect-modal.disconnecting', 'Disconnecting...') + : t('migrate-to-cloud.disconnect-modal.disconnect', 'Disconnect') + } + dismissText={t('migrate-to-cloud.disconnect-modal.cancel', 'Cancel')} + onConfirm={handleConfirm} + onDismiss={onDismiss} + /> ); }; diff --git a/public/app/features/admin/migrate-to-cloud/onprem/Page.tsx b/public/app/features/admin/migrate-to-cloud/onprem/Page.tsx index eddccd4103e..faf78386581 100644 --- a/public/app/features/admin/migrate-to-cloud/onprem/Page.tsx +++ b/public/app/features/admin/migrate-to-cloud/onprem/Page.tsx @@ -1,39 +1,32 @@ -import React from 'react'; +import React, { useState } from 'react'; -import { Button, ModalsController, Stack, Text } from '@grafana/ui'; +import { Button, Stack, Text } from '@grafana/ui'; import { Trans } from 'app/core/internationalization'; -import { useDisconnectStackMutation, useGetStatusQuery } from '../api'; +import { useGetStatusQuery } from '../api'; import { DisconnectModal } from './DisconnectModal'; import { EmptyState } from './EmptyState/EmptyState'; export const Page = () => { const { data, isFetching } = useGetStatusQuery(); - const [disconnectStack, disconnectResponse] = useDisconnectStackMutation(); + const [isDisconnecting, setIsDisconnecting] = useState(false); + if (!data?.enabled) { return ; } return ( - - {({ showModal, hideModal }) => ( - - {data.stackURL && {data.stackURL}} - - - )} - + <> + + {data.stackURL && {data.stackURL}} + + + + + setIsDisconnecting(false)} /> + ); };