1 | "use strict";
|
2 |
|
3 | exports.__esModule = true;
|
4 | exports.default = useTimeout;
|
5 |
|
6 | var _react = require("react");
|
7 |
|
8 | var _useMounted = _interopRequireDefault(require("./useMounted"));
|
9 |
|
10 | var _useWillUnmount = _interopRequireDefault(require("./useWillUnmount"));
|
11 |
|
12 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 | var MAX_DELAY_MS = Math.pow(2, 31) - 1;
|
23 |
|
24 | function setChainedTimeout(handleRef, fn, timeoutAtMs) {
|
25 | var delayMs = timeoutAtMs - Date.now();
|
26 | handleRef.current = delayMs <= MAX_DELAY_MS ? setTimeout(fn, delayMs) : setTimeout(function () {
|
27 | return setChainedTimeout(handleRef, fn, timeoutAtMs);
|
28 | }, MAX_DELAY_MS);
|
29 | }
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 | function useTimeout() {
|
51 | var isMounted = (0, _useMounted.default)();
|
52 |
|
53 | var handleRef = (0, _react.useRef)();
|
54 | (0, _useWillUnmount.default)(function () {
|
55 | return clearTimeout(handleRef.current);
|
56 | });
|
57 | return (0, _react.useMemo)(function () {
|
58 | var clear = function clear() {
|
59 | return clearTimeout(handleRef.current);
|
60 | };
|
61 |
|
62 | function set(fn, delayMs) {
|
63 | if (delayMs === void 0) {
|
64 | delayMs = 0;
|
65 | }
|
66 |
|
67 | if (!isMounted()) return;
|
68 | clear();
|
69 |
|
70 | if (delayMs <= MAX_DELAY_MS) {
|
71 |
|
72 | handleRef.current = setTimeout(fn, delayMs);
|
73 | } else {
|
74 | setChainedTimeout(handleRef, fn, Date.now() + delayMs);
|
75 | }
|
76 | }
|
77 |
|
78 | return {
|
79 | set: set,
|
80 | clear: clear
|
81 | };
|
82 | }, []);
|
83 | } |
\ | No newline at end of file |