From b5e1248d5853b0ddbc843668d77cc36b46f82454 Mon Sep 17 00:00:00 2001 From: MacielG1 Date: Mon, 23 Sep 2024 15:32:50 -0300 Subject: [PATCH] update useScreenWake functionality --- src/store/useStore.ts | 10 ++++++++- src/utils/useScreenWake.ts | 46 ++++++++++++++++++-------------------- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/store/useStore.ts b/src/store/useStore.ts index 20129d3..36080b8 100644 --- a/src/store/useStore.ts +++ b/src/store/useStore.ts @@ -10,7 +10,12 @@ import storageSlice, { localStorageType } from "./slices/localStorage.js"; type Slices = currentTimerType & timerStatusType & roundsType & workType & restType & prepareType & progressBarType & localStorageType; -const useStore = create()((...args) => ({ +type WakeLockSlice = { + wakeLock: WakeLockSentinel | null; + setWakeLock: (wakeLock: WakeLockSentinel | null) => void; +}; + +const useStore = create()((...args) => ({ ...roundsSlice(...args), ...workSlice(...args), ...restSlice(...args), @@ -19,5 +24,8 @@ const useStore = create()((...args) => ({ ...progressBarSlice(...args), ...currentTimerOptionsSlice(...args), ...storageSlice(...args), + wakeLock: null, + setWakeLock: (wakeLock) => args[0]({ wakeLock }), })); + export default useStore; diff --git a/src/utils/useScreenWake.ts b/src/utils/useScreenWake.ts index 99143cd..a539993 100644 --- a/src/utils/useScreenWake.ts +++ b/src/utils/useScreenWake.ts @@ -1,34 +1,32 @@ -import { useEffect } from "react"; +import { useCallback } from "react"; +import useStore from "../store/useStore"; export default function useScreenWake() { - let wakeLock: WakeLockSentinel | null = null; + const [wakeLock, setWakeLock] = useStore((state) => [state.wakeLock, state.setWakeLock]); - async function enableScreenWake() { - try { - wakeLock = await navigator.wakeLock.request("screen"); - console.log("Screen wake lock activated"); - } catch (error) { - console.error("Error requesting screen wake lock:", error); + const enableScreenWake = useCallback(async () => { + if (!wakeLock) { + try { + const newWakeLock = await navigator.wakeLock.request("screen"); + setWakeLock(newWakeLock); + } catch (error) { + console.error("Error requesting screen wake lock:", error); + } } - } + }, [wakeLock, setWakeLock]); - function releaseScreenWake() { + const releaseScreenWake = useCallback(() => { if (wakeLock) { - wakeLock.release(); - console.log("Screen wake lock released"); + wakeLock + .release() + .then(() => { + setWakeLock(null); + }) + .catch((error) => { + console.error("Error releasing screen wake lock:", error); + }); } - } + }, [wakeLock, setWakeLock]); - useEffect(() => { - // Request wake lock when the component mounts - enableScreenWake(); - - // Release wake lock when the component unmounts - return () => { - releaseScreenWake(); - }; - }, []); // Empty dependency array ensures the effect runs only once - - // Return both functions for external use return { enableScreenWake, releaseScreenWake }; }