mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-16 16:30:15 +01:00
* 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>
31 lines
1.1 KiB
TypeScript
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;
|