🏷️ Search for custom tailnet name offers with keywords.
at master 35 lines 1.1 kB view raw
1import { useCallback, useEffect, useState } from 'react'; 2 3export const useTimer = () => { 4 const [status, setStatus] = useState<'Running' | 'Stopped'>('Stopped'); 5 const [timer, setTimer] = useState<number | null>(null); 6 const [loading, setLoading] = useState(true); 7 8 const fetchAndSetTimer = useCallback(() => { 9 browser.runtime.sendMessage({ action: 'getNextAlarm' }, (resp) => { 10 setTimer(resp?.timeRemaining ?? null); 11 }); 12 }, []); 13 14 useEffect(() => { 15 browser.runtime.sendMessage({ action: 'getStatus' }, (response) => { 16 setStatus(response?.status || 'Stopped'); 17 setLoading(false); 18 if (response?.status === 'Running') { 19 fetchAndSetTimer(); 20 } 21 }); 22 }, [fetchAndSetTimer]); 23 24 useEffect(() => { 25 if (status === 'Running') { 26 fetchAndSetTimer(); // Ensure timer is set immediately on status change 27 const interval = setInterval(fetchAndSetTimer, 1000); 28 return () => clearInterval(interval); 29 } else { 30 setTimer(null); 31 } 32 }, [status, fetchAndSetTimer]); 33 34 return { status, setStatus, timer, loading, setLoading }; 35};