parsec-hooks 1.0.12 → 1.0.15

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  declare const _default: () => {
2
2
  countdown: number;
3
- clearCountdownTimer: () => void;
3
+ clearCountdownTimer: () => boolean;
4
4
  stopCountdownTimer: () => void;
5
5
  setCountdown: (s: number) => Promise<unknown>;
6
6
  countdownText: string;
@@ -19,9 +19,9 @@ var _default = function _default() {
19
19
  countdown = _useRefState2[0],
20
20
  setCountdown = _useRefState2[1];
21
21
 
22
- var timer = (0, _react.useRef)();
22
+ var stopRef = (0, _react.useRef)(false);
23
23
  var clearCountdownTimer = (0, _react.useCallback)(function () {
24
- return timer.current && clearInterval(timer.current);
24
+ return stopRef.current = true;
25
25
  }, []);
26
26
  var stopCountdownTimer = (0, _react.useCallback)(function () {
27
27
  clearCountdownTimer();
@@ -33,19 +33,40 @@ var _default = function _default() {
33
33
  stopCountdownTimer: stopCountdownTimer,
34
34
  setCountdown: (0, _react.useCallback)(function (s) {
35
35
  return new Promise(function (resolve) {
36
- clearCountdownTimer();
37
- var countdown = s;
38
- setCountdown(countdown);
39
- timer.current = setInterval(function () {
40
- setCountdown(--countdown);
41
-
42
- if (!countdown) {
43
- clearCountdownTimer();
44
- resolve();
36
+ stopRef.current = false;
37
+ setCountdown(s);
38
+ var startTime = +new Date();
39
+
40
+ var start = function start(prev) {
41
+ var now = +new Date();
42
+
43
+ if (stopRef.current) {
44
+ return;
45
+ }
46
+
47
+ if (now - prev > 1000) {
48
+ var count = s - Math.round((now - startTime) / 1000);
49
+ setCountdown(count);
50
+
51
+ if (count <= 0) {
52
+ resolve();
53
+ } else {
54
+ requestAnimationFrame(function () {
55
+ return start(now);
56
+ });
57
+ }
58
+ } else {
59
+ requestAnimationFrame(function () {
60
+ return start(prev);
61
+ });
45
62
  }
46
- }, 1000);
63
+ };
64
+
65
+ requestAnimationFrame(function () {
66
+ return start(startTime);
67
+ });
47
68
  });
48
- }, [clearCountdownTimer, setCountdown]),
69
+ }, [setCountdown]),
49
70
  countdownText: countdown ? "(".concat(countdown, " s)") : ''
50
71
  };
51
72
  };
@@ -35,13 +35,13 @@ var _default = function _default(name, initState) {
35
35
  (0, _react.useLayoutEffect)(function () {
36
36
  globalObj[name].sets.push(setGlobalState);
37
37
  }, [name]);
38
- return [globalState, function (state) {
38
+ return [globalState, (0, _react.useCallback)(function (state) {
39
39
  globalObj[name].state = state;
40
40
  setGlobalState(state);
41
41
  globalObj[name].sets.forEach(function (fn) {
42
42
  return fn(state);
43
43
  });
44
- }];
44
+ }, [name])];
45
45
  };
46
46
 
47
47
  exports.default = _default;
@@ -61,7 +61,7 @@ var _default = function _default(_ref) {
61
61
  }
62
62
 
63
63
  var firstStr = str.substr(0, newbeginLen);
64
- var lastStr = str.substr(newendLen);
64
+ var lastStr = str.substr(-newendLen);
65
65
  var middleStr = '*'.repeat(newendLen - newbeginLen + 1);
66
66
  var tempStr = firstStr + middleStr + lastStr;
67
67
  return tempStr;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parsec-hooks",
3
- "version": "1.0.12",
3
+ "version": "1.0.15",
4
4
  "description": "秒差距前端常用的hooks工具",
5
5
  "author": "mushan0x0",
6
6
  "license": "MIT",