expo-running-kit
Version:
Expo native module for tracking running and walking workouts — GPS, pace, cadence, auto-pause, and laps.
43 lines • 1.54 kB
JavaScript
import { useEffect, useRef, useState } from "react";
import { useEvent } from "expo";
import RunningKit from "../RunningKitModule";
export function useSession() {
const [sessionState, setSessionState] = useState("idle");
const [duration, setDuration] = useState(0);
const sessionStateRef = useRef("idle");
const timerRef = useRef(null);
const durationRef = useRef(0);
const sessionStatePayload = useEvent(RunningKit, "onSessionStateChange");
useEffect(() => {
if (!sessionStatePayload?.state)
return;
sessionStateRef.current = sessionStatePayload.state;
setSessionState(sessionStatePayload.state);
}, [sessionStatePayload]);
useEffect(() => {
if (sessionState === "active") {
timerRef.current = setInterval(() => {
setDuration((d) => {
const next = d + 1;
durationRef.current = next; // ← add this line
return next;
});
}, 1000);
}
else {
if (timerRef.current)
clearInterval(timerRef.current);
}
return () => {
if (timerRef.current)
clearInterval(timerRef.current);
};
}, [sessionState]);
function resetSession() {
setDuration(0);
setSessionState("idle");
sessionStateRef.current = "idle";
}
return { sessionState, sessionStateRef, duration, durationRef, resetSession };
}
//# sourceMappingURL=useSession.js.map