|
1 | 1 | import { useState, useEffect, useRef } from 'react'; |
2 | 2 |
|
3 | | -export default function deprecatedUseTimer(settings) { |
4 | | - // didMount effect |
5 | | - useEffect(() => { |
6 | | - console.warn('react-timer-hook: default export useTimer is deprecated, use named exports { useTimer, useStopwatch } instead'); |
7 | | - },[]); |
8 | | - |
9 | | - if(settings.expiryTimestamp) { |
10 | | - const values = useTimer(settings); |
11 | | - return { ...values, startTimer: values.start, stopTimer: values.pause, resetTimer: () => {} }; |
12 | | - } else { |
13 | | - const values = useStopwatch(settings); |
14 | | - return { ...values, startTimer: values.start, stopTimer: values.pause, resetTimer: values.reset }; |
15 | | - } |
16 | | -} |
17 | | - |
18 | | -/* --------------------- useStopwatch ----------------------- */ |
19 | | - |
20 | | -export function useStopwatch(settings) { |
21 | | - const { autoStart } = settings || {}; |
22 | | - |
23 | | - // Seconds |
24 | | - const [seconds, setSeconds] = useState(0); |
25 | | - function addSecond() { |
26 | | - setSeconds(prevSeconds => { |
27 | | - if(prevSeconds === 59) { |
28 | | - addMinute(); |
29 | | - return 0; |
30 | | - } |
31 | | - return prevSeconds + 1; |
32 | | - }); |
33 | | - } |
34 | | - |
35 | | - // Minutes |
36 | | - const [minutes, setMinutes] = useState(0); |
37 | | - function addMinute() { |
38 | | - setMinutes(prevMinutes => { |
39 | | - if (prevMinutes === 59) { |
40 | | - addHour(); |
41 | | - return 0; |
42 | | - } |
43 | | - return prevMinutes + 1; |
44 | | - }); |
45 | | - } |
46 | | - |
47 | | - // Hours |
48 | | - const [hours, setHours] = useState(0); |
49 | | - function addHour() { |
50 | | - setHours(prevHours => { |
51 | | - if (prevHours === 23) { |
52 | | - addDay(); |
53 | | - return 0; |
54 | | - } |
55 | | - return prevHours + 1; |
56 | | - }); |
57 | | - } |
58 | | - |
59 | | - // Days |
60 | | - const [days, setDays] = useState(0); |
61 | | - function addDay() { |
62 | | - setDays(prevDays => { |
63 | | - return prevDays + 1; |
64 | | - }); |
65 | | - } |
66 | | - |
67 | | - // Control functions |
68 | | - const intervalRef = useRef(); |
69 | | - |
70 | | - function start() { |
71 | | - if(!intervalRef.current) { |
72 | | - intervalRef.current = setInterval(() => addSecond(), 1000); |
73 | | - } |
74 | | - } |
75 | | - |
76 | | - function pause() { |
77 | | - if(intervalRef.current) { |
78 | | - clearInterval(intervalRef.current); |
79 | | - intervalRef.current = undefined; |
80 | | - } |
81 | | - } |
82 | | - |
83 | | - function reset() { |
84 | | - if (intervalRef.current) { |
85 | | - clearInterval(intervalRef.current); |
86 | | - intervalRef.current = undefined; |
87 | | - } |
88 | | - setSeconds(0); |
89 | | - setMinutes(0); |
90 | | - setHours(0); |
91 | | - setDays(0); |
92 | | - } |
93 | | - |
94 | | - // didMount effect |
95 | | - useEffect(() => { |
96 | | - if(autoStart) { |
97 | | - start(); |
98 | | - } |
99 | | - return reset; |
100 | | - },[]); |
101 | | - |
102 | | - return { seconds, minutes, hours, days, start, pause, reset }; |
103 | | -} |
104 | | - |
105 | 3 | /* ---------------------- useTimer --------------------- */ |
106 | 4 |
|
107 | | -export function useTimer(settings) { |
| 5 | +export default function useTimer(settings) { |
108 | 6 | const { expiryTimestamp: expiry, onExpire } = settings || {}; |
109 | 7 | const [expiryTimestamp, setExpiryTimestamp] = useState(expiry); |
110 | 8 |
|
@@ -245,66 +143,3 @@ export function useTimer(settings) { |
245 | 143 |
|
246 | 144 | return { seconds, minutes, hours, days, start, pause, resume, restart }; |
247 | 145 | } |
248 | | - |
249 | | - |
250 | | -/* ---------------------- useTime --------------------- */ |
251 | | - |
252 | | -export function useTime(settings) { |
253 | | - const { format } = settings || {}; |
254 | | - const [seconds, setSeconds] = useState(0); |
255 | | - const [minutes, setMinutes] = useState(0); |
256 | | - const [hours, setHours] = useState(0); |
257 | | - const [ampm, setAmPm] = useState(''); |
258 | | - |
259 | | - const intervalRef = useRef(); |
260 | | - function start() { |
261 | | - if(!intervalRef.current) { |
262 | | - setCurrentTime(); |
263 | | - intervalRef.current = setInterval(() => setCurrentTime(), 1000); |
264 | | - } |
265 | | - } |
266 | | - |
267 | | - function reset() { |
268 | | - if (intervalRef.current) { |
269 | | - clearInterval(intervalRef.current); |
270 | | - intervalRef.current = undefined; |
271 | | - } |
272 | | - setSeconds(0); |
273 | | - setMinutes(0); |
274 | | - setHours(0); |
275 | | - setAmPm(''); |
276 | | - } |
277 | | - |
278 | | - function formatHours(hours) { |
279 | | - if (format === '12-hour') { |
280 | | - const ampm = hours >= 12 ? 'pm' : 'am'; |
281 | | - var formattedHours = hours % 12; |
282 | | - formattedHours = formattedHours || 12; |
283 | | - return { hours: formattedHours, ampm }; |
284 | | - } |
285 | | - return { hours, ampm: '' }; |
286 | | - } |
287 | | - |
288 | | - |
289 | | - function setCurrentTime() { |
290 | | - var now = new Date(); |
291 | | - const seconds = now.getSeconds(); |
292 | | - const minutes = now.getMinutes(); |
293 | | - const { hours, ampm } = formatHours(now.getHours()); |
294 | | - |
295 | | - |
296 | | - setSeconds(seconds); |
297 | | - setMinutes(minutes); |
298 | | - setHours(hours); |
299 | | - setAmPm(ampm); |
300 | | - } |
301 | | - |
302 | | - // didMount effect |
303 | | - useEffect(() => { |
304 | | - start(); |
305 | | - return reset; |
306 | | - },[]); |
307 | | - |
308 | | - |
309 | | - return { seconds, minutes, hours, ampm }; |
310 | | -} |
0 commit comments