37 lines
750 B
TypeScript
37 lines
750 B
TypeScript
'use client';
|
|
|
|
import { useEffect, useRef, useState } from 'react';
|
|
const MODE_DURATION_MS = 2000;
|
|
|
|
export const useRestart30s = () => {
|
|
const [isBreatheMode, setBreatheMode] = useState(false);
|
|
const resetTimerRef = useRef<number | null>(null);
|
|
|
|
const clearTimers = () => {
|
|
if (resetTimerRef.current !== null) {
|
|
window.clearTimeout(resetTimerRef.current);
|
|
resetTimerRef.current = null;
|
|
}
|
|
};
|
|
|
|
useEffect(() => {
|
|
return () => {
|
|
clearTimers();
|
|
};
|
|
}, []);
|
|
|
|
const triggerRestart = () => {
|
|
clearTimers();
|
|
setBreatheMode(true);
|
|
|
|
resetTimerRef.current = window.setTimeout(() => {
|
|
setBreatheMode(false);
|
|
}, MODE_DURATION_MS);
|
|
};
|
|
|
|
return {
|
|
isBreatheMode,
|
|
triggerRestart,
|
|
};
|
|
};
|