import { ConfirmationAlertDialog, Text } from '@invoke-ai/ui-library'; import { useStore } from '@nanostores/react'; import { useAssertSingleton } from 'common/hooks/useAssertSingleton'; import { toast } from 'features/toast/toast'; import { atom } from 'nanostores'; import { memo, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import type { StylePresetRecordWithImage } from 'services/api/endpoints/stylePresets'; import { useDeleteStylePresetMutation } from 'services/api/endpoints/stylePresets'; const $presetToDelete = atom(null); const clearPresetToDelete = () => $presetToDelete.set(null); export const useDeleteStylePreset = () => { const deletePreset = useCallback((preset: StylePresetRecordWithImage) => { $presetToDelete.set(preset); }, []); return deletePreset; }; export const DeleteStylePresetDialog = memo(() => { useAssertSingleton('DeleteStylePresetDialog'); const { t } = useTranslation(); const presetToDelete = useStore($presetToDelete); const [_deleteStylePreset] = useDeleteStylePresetMutation(); const deleteStylePreset = useCallback(async () => { if (!presetToDelete) { return; } try { await _deleteStylePreset(presetToDelete.id).unwrap(); toast({ status: 'success', title: t('stylePresets.templateDeleted'), }); } catch (error) { toast({ status: 'error', title: t('stylePresets.unableToDeleteTemplate'), }); } }, [presetToDelete, _deleteStylePreset, t]); return ( {t('stylePresets.deleteTemplate2')} ); }); DeleteStylePresetDialog.displayName = 'DeleteStylePresetDialog';