mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-18 01:10:14 +01:00
32 lines
1.1 KiB
TypeScript
32 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;
|