From dc9c83714d31de9557ec633c6e9c264876a588fd Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 23 Feb 2026 02:54:45 +0000 Subject: [PATCH] fix: queue pause/resume buttons disabled in single-user mode In single-user mode, currentUser is never populated (no auth), so `currentUser?.is_admin ?? false` always returns false, disabling the buttons. Follow the same pattern as useIsModelManagerEnabled: treat as admin when multiuser mode is disabled, and check is_admin flag when enabled. Co-authored-by: lstein <111189+lstein@users.noreply.github.com> --- invokeai/app/api/routers/session_queue.py | 2 +- .../web/src/features/queue/hooks/usePauseProcessor.ts | 11 +++++++++-- .../src/features/queue/hooks/useResumeProcessor.ts | 11 +++++++++-- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/invokeai/app/api/routers/session_queue.py b/invokeai/app/api/routers/session_queue.py index 4127f6ce3fe..403e7727cb4 100644 --- a/invokeai/app/api/routers/session_queue.py +++ b/invokeai/app/api/routers/session_queue.py @@ -192,7 +192,7 @@ async def resume( operation_id="pause", responses={200: {"model": SessionProcessorStatus}}, ) -async def Pause( +async def pause( current_user: AdminUserOrDefault, queue_id: str = Path(description="The queue id to perform this operation on"), ) -> SessionProcessorStatus: diff --git a/invokeai/frontend/web/src/features/queue/hooks/usePauseProcessor.ts b/invokeai/frontend/web/src/features/queue/hooks/usePauseProcessor.ts index bc0a95d7bb2..4b1ce0839ae 100644 --- a/invokeai/frontend/web/src/features/queue/hooks/usePauseProcessor.ts +++ b/invokeai/frontend/web/src/features/queue/hooks/usePauseProcessor.ts @@ -4,6 +4,7 @@ import { selectCurrentUser } from 'features/auth/store/authSlice'; import { toast } from 'features/toast/toast'; import { useCallback, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; +import { useGetSetupStatusQuery } from 'services/api/endpoints/auth'; import { useGetQueueStatusQuery, usePauseProcessorMutation } from 'services/api/endpoints/queue'; import { $isConnected } from 'services/events/stores'; @@ -12,12 +13,18 @@ export const usePauseProcessor = () => { const isConnected = useStore($isConnected); const { data: queueStatus } = useGetQueueStatusQuery(); const currentUser = useAppSelector(selectCurrentUser); + const { data: setupStatus } = useGetSetupStatusQuery(); const [_trigger, { isLoading }] = usePauseProcessorMutation({ fixedCacheKey: 'pauseProcessor', }); - // Only admin users can pause the processor - const isAdmin = useMemo(() => currentUser?.is_admin ?? false, [currentUser]); + // In single-user mode, treat as admin. In multiuser mode, check is_admin flag. + const isAdmin = useMemo(() => { + if (setupStatus && !setupStatus.multiuser_enabled) { + return true; + } + return currentUser?.is_admin ?? false; + }, [setupStatus, currentUser]); const trigger = useCallback(async () => { try { diff --git a/invokeai/frontend/web/src/features/queue/hooks/useResumeProcessor.ts b/invokeai/frontend/web/src/features/queue/hooks/useResumeProcessor.ts index 10961abde0c..3248097cec6 100644 --- a/invokeai/frontend/web/src/features/queue/hooks/useResumeProcessor.ts +++ b/invokeai/frontend/web/src/features/queue/hooks/useResumeProcessor.ts @@ -4,6 +4,7 @@ import { selectCurrentUser } from 'features/auth/store/authSlice'; import { toast } from 'features/toast/toast'; import { useCallback, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; +import { useGetSetupStatusQuery } from 'services/api/endpoints/auth'; import { useGetQueueStatusQuery, useResumeProcessorMutation } from 'services/api/endpoints/queue'; import { $isConnected } from 'services/events/stores'; @@ -12,12 +13,18 @@ export const useResumeProcessor = () => { const { data: queueStatus } = useGetQueueStatusQuery(); const { t } = useTranslation(); const currentUser = useAppSelector(selectCurrentUser); + const { data: setupStatus } = useGetSetupStatusQuery(); const [_trigger, { isLoading }] = useResumeProcessorMutation({ fixedCacheKey: 'resumeProcessor', }); - // Only admin users can resume the processor - const isAdmin = useMemo(() => currentUser?.is_admin ?? false, [currentUser]); + // In single-user mode, treat as admin. In multiuser mode, check is_admin flag. + const isAdmin = useMemo(() => { + if (setupStatus && !setupStatus.multiuser_enabled) { + return true; + } + return currentUser?.is_admin ?? false; + }, [setupStatus, currentUser]); const trigger = useCallback(async () => { try {