@aiszlab/relax 2.1.3-beta.3 → 2.1.3-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,7 +5,6 @@ var react = require('react');
5
5
  var debounce = require('../utils/debounce.cjs');
6
6
  var useEvent = require('./use-event.cjs');
7
7
  var isFunction = require('../is/is-function.cjs');
8
- var useDefault = require('./use-default.cjs');
9
8
 
10
9
  var useDebouncer = function useDebouncer(debouncer) {
11
10
  var _debouncer = react.useMemo(function () {
@@ -34,41 +33,22 @@ var useDebouncer = function useDebouncer(debouncer) {
34
33
  };
35
34
  function useDebounceCallback(debouncer) {
36
35
  var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;
37
- var debounced = react.useRef(null);
38
36
  var _useDebouncer = useDebouncer(debouncer),
39
37
  callback = _useDebouncer.callback,
40
38
  pipe = _useDebouncer.pipe;
41
- react.useEffect(function () {
42
- var _debounced = debounce.debounce({
39
+ var _debounced = react.useMemo(function () {
40
+ return debounce.debounce({
43
41
  callback: callback,
44
42
  pipe: pipe
45
43
  }, wait);
46
- debounced.current = _debounced;
44
+ }, [wait]);
45
+ react.useEffect(function () {
47
46
  // dispose
48
47
  return function () {
49
48
  _debounced.abort();
50
- debounced.current = null;
51
49
  };
52
- }, [wait]);
53
- return useDefault.useDefault(function () {
54
- return {
55
- next: function next() {
56
- var _debounced$current;
57
- for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
58
- args[_key2] = arguments[_key2];
59
- }
60
- return (_debounced$current = debounced.current) === null || _debounced$current === void 0 ? void 0 : _debounced$current.next.apply(_debounced$current, args);
61
- },
62
- flush: function flush() {
63
- var _debounced$current2;
64
- return (_debounced$current2 = debounced.current) === null || _debounced$current2 === void 0 ? void 0 : _debounced$current2.flush();
65
- },
66
- abort: function abort() {
67
- var _debounced$current3;
68
- return (_debounced$current3 = debounced.current) === null || _debounced$current3 === void 0 ? void 0 : _debounced$current3.abort();
69
- }
70
- };
71
- });
50
+ }, [_debounced]);
51
+ return _debounced;
72
52
  }
73
53
 
74
54
  exports.useDebounceCallback = useDebounceCallback;
@@ -1,9 +1,8 @@
1
1
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
2
- import { useRef, useEffect, useMemo } from 'react';
2
+ import { useMemo, useEffect } from 'react';
3
3
  import { debounce } from '../utils/debounce.mjs';
4
4
  import { useEvent } from './use-event.mjs';
5
5
  import { isFunction } from '../is/is-function.mjs';
6
- import { useDefault } from './use-default.mjs';
7
6
 
8
7
  var useDebouncer = function useDebouncer(debouncer) {
9
8
  var _debouncer = useMemo(function () {
@@ -32,41 +31,22 @@ var useDebouncer = function useDebouncer(debouncer) {
32
31
  };
33
32
  function useDebounceCallback(debouncer) {
34
33
  var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;
35
- var debounced = useRef(null);
36
34
  var _useDebouncer = useDebouncer(debouncer),
37
35
  callback = _useDebouncer.callback,
38
36
  pipe = _useDebouncer.pipe;
39
- useEffect(function () {
40
- var _debounced = debounce({
37
+ var _debounced = useMemo(function () {
38
+ return debounce({
41
39
  callback: callback,
42
40
  pipe: pipe
43
41
  }, wait);
44
- debounced.current = _debounced;
42
+ }, [wait]);
43
+ useEffect(function () {
45
44
  // dispose
46
45
  return function () {
47
46
  _debounced.abort();
48
- debounced.current = null;
49
47
  };
50
- }, [wait]);
51
- return useDefault(function () {
52
- return {
53
- next: function next() {
54
- var _debounced$current;
55
- for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
56
- args[_key2] = arguments[_key2];
57
- }
58
- return (_debounced$current = debounced.current) === null || _debounced$current === void 0 ? void 0 : _debounced$current.next.apply(_debounced$current, args);
59
- },
60
- flush: function flush() {
61
- var _debounced$current2;
62
- return (_debounced$current2 = debounced.current) === null || _debounced$current2 === void 0 ? void 0 : _debounced$current2.flush();
63
- },
64
- abort: function abort() {
65
- var _debounced$current3;
66
- return (_debounced$current3 = debounced.current) === null || _debounced$current3 === void 0 ? void 0 : _debounced$current3.abort();
67
- }
68
- };
69
- });
48
+ }, [_debounced]);
49
+ return _debounced;
70
50
  }
71
51
 
72
52
  export { useDebounceCallback };
@@ -5,14 +5,15 @@ var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
5
5
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
6
6
  var react = require('react');
7
7
  var useEvent = require('./use-event.cjs');
8
- var useMounted = require('./use-mounted.cjs');
8
+ var useDebounceCallback = require('./use-debounce-callback.cjs');
9
9
 
10
10
  /**
11
11
  * @author murukal
12
12
  *
13
- * @description
14
13
  * wraps an async request function, tracking loading / error / data state.
15
14
  * when `auto` is true the request fires automatically on mount.
15
+ *
16
+ * supports debounce via `debounceWait` option which accepts dynamic updates.
16
17
  */
17
18
  var useRequest = function useRequest(request) {
18
19
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
@@ -20,7 +21,9 @@ var useRequest = function useRequest(request) {
20
21
  auto = _ref$auto === void 0 ? false : _ref$auto,
21
22
  thenCallback = _ref.then,
22
23
  catchCallback = _ref["catch"],
23
- finallyCallback = _ref["finally"];
24
+ finallyCallback = _ref["finally"],
25
+ debounceWait = _ref.debounceWait,
26
+ deps = _ref.deps;
24
27
  var _useState = react.useState(null),
25
28
  _useState2 = _slicedToArray(_useState, 2),
26
29
  data = _useState2[0],
@@ -47,7 +50,8 @@ var useRequest = function useRequest(request) {
47
50
  var _finally = useEvent.useEvent(function () {
48
51
  finallyCallback === null || finallyCallback === void 0 || finallyCallback();
49
52
  });
50
- var run = react.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
53
+ // ---- core execution (always stable) ----
54
+ var _execute = useEvent.useEvent(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
51
55
  var result,
52
56
  _args = arguments;
53
57
  return _regenerator().w(function (_context) {
@@ -65,13 +69,23 @@ var useRequest = function useRequest(request) {
65
69
  return _context.a(2);
66
70
  }
67
71
  }, _callee);
68
- })), []);
69
- useMounted.useMounted(function () {
70
- if (isMountedRef.current) return;
71
- if (!auto) return;
72
- isMountedRef.current = true;
73
- run();
72
+ })));
73
+ var debounced = useDebounceCallback.useDebounceCallback(_execute, debounceWait);
74
+ var run = useEvent.useEvent(function () {
75
+ if (!debounceWait) {
76
+ return _execute.apply(void 0, arguments);
77
+ }
78
+ return Promise.resolve(debounced.next.apply(debounced, arguments));
74
79
  });
80
+ react.useEffect(function () {
81
+ if (!isMountedRef.current) {
82
+ isMountedRef.current = true;
83
+ if (!auto) return;
84
+ _execute();
85
+ return;
86
+ }
87
+ _execute();
88
+ }, deps !== null && deps !== void 0 ? deps : []);
75
89
  return {
76
90
  data: data,
77
91
  error: error,
@@ -1,53 +1,65 @@
1
+ import { type DependencyList } from "react";
1
2
  type UsingRequest<T> = {
2
3
  /**
3
- * @description
4
4
  * auto request when component mounts
5
5
  */
6
6
  auto?: boolean;
7
7
  /**
8
- * @description
9
8
  * called when the request succeeds, like Promise.then
10
9
  */
11
10
  then?: (data: T) => void;
12
11
  /**
13
- * @description
14
12
  * called when the request fails, like Promise.catch
15
13
  */
16
14
  catch?: (error: Error) => void;
17
15
  /**
18
- * @description
19
16
  * called when the request completes (success or failure), like Promise.finally
20
17
  */
21
18
  finally?: () => void;
19
+ /**
20
+ * debounce delay in milliseconds. setting this enables debounce mode —
21
+ * rapid calls to `run` will be coalesced and only the last call within
22
+ * the window will execute.
23
+ *
24
+ * @zh 防抖延迟时间(毫秒)。设置后启用防抖模式——对 `run` 的快速调用
25
+ * 会被合并,在时间窗口内仅执行最后一次调用。
26
+ */
27
+ debounceWait?: number;
28
+ /**
29
+ * dependency list. when any value in this array changes (after initial
30
+ * mount), the request is automatically re-executed.
31
+ *
32
+ * @zh 依赖项列表。数组中的任意值发生变化时(首次挂载后),自动重新请求数据。
33
+ */
34
+ deps?: DependencyList;
22
35
  };
23
36
  type UsedRequest<T> = {
24
37
  /**
25
- * @description
26
38
  * response data
27
39
  */
28
40
  data: T | null;
29
41
  /**
30
- * @description
31
42
  * error caught from the request
32
43
  */
33
44
  error: Error | null;
34
45
  /**
35
- * @description
36
46
  * whether the request is in progress
37
47
  */
38
48
  loading: boolean;
39
49
  /**
40
- * @description
41
- * manually trigger the request with the same arguments as the source function
50
+ * manually trigger the request with the same arguments as the source function.
51
+ * when `debounceWait` is set calls are debounced the returned Promise
52
+ * resolves only when the call is actually executed.
42
53
  */
43
54
  run: (...args: any[]) => Promise<void>;
44
55
  };
45
56
  /**
46
57
  * @author murukal
47
58
  *
48
- * @description
49
59
  * wraps an async request function, tracking loading / error / data state.
50
60
  * when `auto` is true the request fires automatically on mount.
61
+ *
62
+ * supports debounce via `debounceWait` option which accepts dynamic updates.
51
63
  */
52
- export declare const useRequest: <T>(request: (...args: any[]) => Promise<T>, { auto, then: thenCallback, catch: catchCallback, finally: finallyCallback, }?: UsingRequest<T>) => UsedRequest<T>;
64
+ export declare const useRequest: <T>(request: (...args: any[]) => Promise<T>, { auto, then: thenCallback, catch: catchCallback, finally: finallyCallback, debounceWait, deps, }?: UsingRequest<T>) => UsedRequest<T>;
53
65
  export {};
@@ -1,16 +1,17 @@
1
1
  import _regenerator from '@babel/runtime/helpers/regenerator';
2
2
  import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
3
3
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
4
- import { useState, useRef, useCallback } from 'react';
4
+ import { useState, useRef, useEffect } from 'react';
5
5
  import { useEvent } from './use-event.mjs';
6
- import { useMounted } from './use-mounted.mjs';
6
+ import { useDebounceCallback } from './use-debounce-callback.mjs';
7
7
 
8
8
  /**
9
9
  * @author murukal
10
10
  *
11
- * @description
12
11
  * wraps an async request function, tracking loading / error / data state.
13
12
  * when `auto` is true the request fires automatically on mount.
13
+ *
14
+ * supports debounce via `debounceWait` option which accepts dynamic updates.
14
15
  */
15
16
  var useRequest = function useRequest(request) {
16
17
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
@@ -18,7 +19,9 @@ var useRequest = function useRequest(request) {
18
19
  auto = _ref$auto === void 0 ? false : _ref$auto,
19
20
  thenCallback = _ref.then,
20
21
  catchCallback = _ref["catch"],
21
- finallyCallback = _ref["finally"];
22
+ finallyCallback = _ref["finally"],
23
+ debounceWait = _ref.debounceWait,
24
+ deps = _ref.deps;
22
25
  var _useState = useState(null),
23
26
  _useState2 = _slicedToArray(_useState, 2),
24
27
  data = _useState2[0],
@@ -45,7 +48,8 @@ var useRequest = function useRequest(request) {
45
48
  var _finally = useEvent(function () {
46
49
  finallyCallback === null || finallyCallback === void 0 || finallyCallback();
47
50
  });
48
- var run = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
51
+ // ---- core execution (always stable) ----
52
+ var _execute = useEvent(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
49
53
  var result,
50
54
  _args = arguments;
51
55
  return _regenerator().w(function (_context) {
@@ -63,13 +67,23 @@ var useRequest = function useRequest(request) {
63
67
  return _context.a(2);
64
68
  }
65
69
  }, _callee);
66
- })), []);
67
- useMounted(function () {
68
- if (isMountedRef.current) return;
69
- if (!auto) return;
70
- isMountedRef.current = true;
71
- run();
70
+ })));
71
+ var debounced = useDebounceCallback(_execute, debounceWait);
72
+ var run = useEvent(function () {
73
+ if (!debounceWait) {
74
+ return _execute.apply(void 0, arguments);
75
+ }
76
+ return Promise.resolve(debounced.next.apply(debounced, arguments));
72
77
  });
78
+ useEffect(function () {
79
+ if (!isMountedRef.current) {
80
+ isMountedRef.current = true;
81
+ if (!auto) return;
82
+ _execute();
83
+ return;
84
+ }
85
+ _execute();
86
+ }, deps !== null && deps !== void 0 ? deps : []);
73
87
  return {
74
88
  data: data,
75
89
  error: error,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiszlab/relax",
3
- "version": "2.1.3-beta.3",
3
+ "version": "2.1.3-beta.5",
4
4
  "description": "react utils collection",
5
5
  "exports": {
6
6
  ".": {