LibreChat/client/src/components/System/WakeLockManager.tsx
michnovka 040d083088
feat: Prevent Screen Sleep During Response Generation (#10597)
* feat: prevent screen sleep during response generation

* refactor: screen wake lock functionality during response generation

* chore: import order

* chore: reorder import statements in WakeLockManager component

---------

Co-authored-by: Danny Avila <danny@librechat.ai>
2025-11-21 09:14:32 -05:00

31 lines
1.1 KiB
TypeScript

import { useRecoilValue } from 'recoil';
import useWakeLock from '~/hooks/useWakeLock';
import store from '~/store';
/**
* WakeLockManager Component
*
* Manages the Screen Wake Lock during AI response generation to prevent
* device screens from sleeping or dimming during long-running operations.
*
* The wake lock is only active when:
* 1. Any conversation is currently generating a response (anySubmittingSelector)
* 2. User has not disabled the feature in settings (keepScreenAwake preference)
*
* This component is rendered at the root level of the application
* to ensure wake lock state persists across all conversations and routes.
*
* @see useWakeLock - The hook that manages the actual wake lock implementation
* @see anySubmittingSelector - Recoil selector tracking if any conversation is generating
*/
const WakeLockManager = () => {
const isSubmitting = useRecoilValue(store.anySubmittingSelector);
const keepScreenAwake = useRecoilValue(store.keepScreenAwake);
const shouldPreventSleep = isSubmitting && keepScreenAwake;
useWakeLock(shouldPreventSleep);
return null;
};
export default WakeLockManager;