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 f7aa003e8b2d..30cd42b507f0 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 eddccd4103e6..faf783865812 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)} /> + ); };