import { ConfirmationAlertDialog, Text } from '@invoke-ai/ui-library'; import { useStore } from '@nanostores/react'; import { useAppDispatch } from 'app/store/storeHooks'; import { useAssertSingleton } from 'common/hooks/useAssertSingleton'; import { buildUseBoolean } from 'common/hooks/useBoolean'; import { listCursorChanged, listPriorityChanged } from 'features/queue/store/queueSlice'; import { toast } from 'features/toast/toast'; import { memo, useCallback, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { useClearQueueMutation, useGetQueueStatusQuery } from 'services/api/endpoints/queue'; import { $isConnected } from 'services/events/stores'; const [useClearQueueConfirmationAlertDialog] = buildUseBoolean(false); export const useClearQueue = () => { const { t } = useTranslation(); const dispatch = useAppDispatch(); const dialog = useClearQueueConfirmationAlertDialog(); const { data: queueStatus } = useGetQueueStatusQuery(); const isConnected = useStore($isConnected); const [trigger, { isLoading }] = useClearQueueMutation({ fixedCacheKey: 'clearQueue', }); const clearQueue = useCallback(async () => { if (!queueStatus?.queue.total) { return; } try { await trigger().unwrap(); toast({ id: 'QUEUE_CLEAR_SUCCEEDED', title: t('queue.clearSucceeded'), status: 'success', }); dispatch(listCursorChanged(undefined)); dispatch(listPriorityChanged(undefined)); } catch { toast({ id: 'QUEUE_CLEAR_FAILED', title: t('queue.clearFailed'), status: 'error', }); } }, [queueStatus?.queue.total, trigger, dispatch, t]); const isDisabled = useMemo(() => !isConnected || !queueStatus?.queue.total, [isConnected, queueStatus?.queue.total]); return { clearQueue, isOpen: dialog.isTrue, openDialog: dialog.setTrue, closeDialog: dialog.setFalse, isLoading, queueStatus, isDisabled, }; }; export const ClearQueueConfirmationsAlertDialog = memo(() => { useAssertSingleton('ClearQueueConfirmationsAlertDialog'); const { t } = useTranslation(); const clearQueue = useClearQueue(); return ( {t('queue.clearQueueAlertDialog')}
{t('queue.clearQueueAlertDialog2')}
); }); ClearQueueConfirmationsAlertDialog.displayName = 'ClearQueueConfirmationsAlertDialog';