diff --git a/invokeai/frontend/web/src/features/nodes/components/ui/ClearNodesButton.tsx b/invokeai/frontend/web/src/features/nodes/components/ui/ClearNodesButton.tsx index f9824268b9..29e8ca3a20 100644 --- a/invokeai/frontend/web/src/features/nodes/components/ui/ClearNodesButton.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/ui/ClearNodesButton.tsx @@ -1,3 +1,15 @@ +import { useState } from 'react'; +import { + AlertDialog, + AlertDialogBody, + AlertDialogContent, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogOverlay, + Divider, + Text, + Button, +} from '@chakra-ui/react'; import { useAppDispatch } from 'app/store/storeHooks'; import { clearNodes } from 'features/nodes/store/nodesSlice'; import { makeToast } from 'app/components/Toaster'; @@ -10,31 +22,68 @@ import IAIIconButton from 'common/components/IAIIconButton'; const ClearNodesButton = () => { const { t } = useTranslation(); const dispatch = useAppDispatch(); + const [isDialogOpen, setIsDialogOpen] = useState(false); const handleClearNodes = () => { - const confirmed = window.confirm(t('common.clearNodes')); + setIsDialogOpen(true); + }; - if (confirmed) { - dispatch(clearNodes()); + const handleConfirmClear = () => { + dispatch(clearNodes()); - dispatch( - addToast( - makeToast({ - title: t('toast.nodesCleared'), - status: 'success', - }) - ) - ); - } + dispatch( + addToast( + makeToast({ + title: t('toast.nodesCleared'), + status: 'success', + }) + ) + ); + + setIsDialogOpen(false); + }; + + const handleCancelClear = () => { + setIsDialogOpen(false); }; return ( - } - tooltip={t('nodes.clearNodes')} - aria-label={t('nodes.clearNodes')} - onClick={handleClearNodes} - /> + <> + } + tooltip={t('nodes.clearNodes')} + aria-label={t('nodes.clearNodes')} + onClick={handleClearNodes} + /> + + + + + + + {t('nodes.clearNodes')} + + + + {t('common.clearNodes')} + + + + + + + + + + + ); };