| 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; | |