@aiszlab/relax 2.1.3-beta.3 → 2.1.3-beta.4
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.
|
|
42
|
-
|
|
39
|
+
var _debounced = react.useMemo(function () {
|
|
40
|
+
return debounce.debounce({
|
|
43
41
|
callback: callback,
|
|
44
42
|
pipe: pipe
|
|
45
43
|
}, wait);
|
|
46
|
-
|
|
44
|
+
}, [wait]);
|
|
45
|
+
react.useEffect(function () {
|
|
47
46
|
// dispose
|
|
48
47
|
return function () {
|
|
49
48
|
_debounced.abort();
|
|
50
|
-
debounced.current = null;
|
|
51
49
|
};
|
|
52
|
-
}, [
|
|
53
|
-
return
|
|
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 {
|
|
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
|
-
|
|
40
|
-
|
|
37
|
+
var _debounced = useMemo(function () {
|
|
38
|
+
return debounce({
|
|
41
39
|
callback: callback,
|
|
42
40
|
pipe: pipe
|
|
43
41
|
}, wait);
|
|
44
|
-
|
|
42
|
+
}, [wait]);
|
|
43
|
+
useEffect(function () {
|
|
45
44
|
// dispose
|
|
46
45
|
return function () {
|
|
47
46
|
_debounced.abort();
|
|
48
|
-
debounced.current = null;
|
|
49
47
|
};
|
|
50
|
-
}, [
|
|
51
|
-
return
|
|
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 };
|
|
@@ -6,13 +6,15 @@ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
|
6
6
|
var react = require('react');
|
|
7
7
|
var useEvent = require('./use-event.cjs');
|
|
8
8
|
var useMounted = require('./use-mounted.cjs');
|
|
9
|
+
var useDebounceCallback = require('./use-debounce-callback.cjs');
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* @author murukal
|
|
12
13
|
*
|
|
13
|
-
* @description
|
|
14
14
|
* wraps an async request function, tracking loading / error / data state.
|
|
15
15
|
* when `auto` is true the request fires automatically on mount.
|
|
16
|
+
*
|
|
17
|
+
* supports debounce via `debounceWait` option which accepts dynamic updates.
|
|
16
18
|
*/
|
|
17
19
|
var useRequest = function useRequest(request) {
|
|
18
20
|
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
@@ -20,7 +22,8 @@ var useRequest = function useRequest(request) {
|
|
|
20
22
|
auto = _ref$auto === void 0 ? false : _ref$auto,
|
|
21
23
|
thenCallback = _ref.then,
|
|
22
24
|
catchCallback = _ref["catch"],
|
|
23
|
-
finallyCallback = _ref["finally"]
|
|
25
|
+
finallyCallback = _ref["finally"],
|
|
26
|
+
debounceWait = _ref.debounceWait;
|
|
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
|
-
|
|
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,12 +69,21 @@ var useRequest = function useRequest(request) {
|
|
|
65
69
|
return _context.a(2);
|
|
66
70
|
}
|
|
67
71
|
}, _callee);
|
|
68
|
-
}))
|
|
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));
|
|
79
|
+
});
|
|
69
80
|
useMounted.useMounted(function () {
|
|
70
81
|
if (isMountedRef.current) return;
|
|
71
82
|
if (!auto) return;
|
|
72
83
|
isMountedRef.current = true;
|
|
73
|
-
run
|
|
84
|
+
// auto-run always fires immediately — debounce only applies to
|
|
85
|
+
// manual run() calls
|
|
86
|
+
_execute();
|
|
74
87
|
});
|
|
75
88
|
return {
|
|
76
89
|
data: data,
|
|
@@ -1,53 +1,57 @@
|
|
|
1
1
|
type UsingRequest<T> = {
|
|
2
2
|
/**
|
|
3
|
-
* @description
|
|
4
3
|
* auto request when component mounts
|
|
5
4
|
*/
|
|
6
5
|
auto?: boolean;
|
|
7
6
|
/**
|
|
8
|
-
* @description
|
|
9
7
|
* called when the request succeeds, like Promise.then
|
|
10
8
|
*/
|
|
11
9
|
then?: (data: T) => void;
|
|
12
10
|
/**
|
|
13
|
-
* @description
|
|
14
11
|
* called when the request fails, like Promise.catch
|
|
15
12
|
*/
|
|
16
13
|
catch?: (error: Error) => void;
|
|
17
14
|
/**
|
|
18
|
-
* @description
|
|
19
15
|
* called when the request completes (success or failure), like Promise.finally
|
|
20
16
|
*/
|
|
21
17
|
finally?: () => void;
|
|
18
|
+
/**
|
|
19
|
+
* debounce delay in milliseconds. setting this enables debounce mode —
|
|
20
|
+
* rapid calls to `run` will be coalesced and only the last call within
|
|
21
|
+
* the window will execute.
|
|
22
|
+
*
|
|
23
|
+
* @zh 防抖延迟时间(毫秒)。设置后启用防抖模式——对 `run` 的快速调用
|
|
24
|
+
* 会被合并,在时间窗口内仅执行最后一次调用。
|
|
25
|
+
*/
|
|
26
|
+
debounceWait?: number;
|
|
22
27
|
};
|
|
23
28
|
type UsedRequest<T> = {
|
|
24
29
|
/**
|
|
25
|
-
* @description
|
|
26
30
|
* response data
|
|
27
31
|
*/
|
|
28
32
|
data: T | null;
|
|
29
33
|
/**
|
|
30
|
-
* @description
|
|
31
34
|
* error caught from the request
|
|
32
35
|
*/
|
|
33
36
|
error: Error | null;
|
|
34
37
|
/**
|
|
35
|
-
* @description
|
|
36
38
|
* whether the request is in progress
|
|
37
39
|
*/
|
|
38
40
|
loading: boolean;
|
|
39
41
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
+
* manually trigger the request with the same arguments as the source function.
|
|
43
|
+
* when `debounceWait` is set calls are debounced — the returned Promise
|
|
44
|
+
* resolves only when the call is actually executed.
|
|
42
45
|
*/
|
|
43
46
|
run: (...args: any[]) => Promise<void>;
|
|
44
47
|
};
|
|
45
48
|
/**
|
|
46
49
|
* @author murukal
|
|
47
50
|
*
|
|
48
|
-
* @description
|
|
49
51
|
* wraps an async request function, tracking loading / error / data state.
|
|
50
52
|
* when `auto` is true the request fires automatically on mount.
|
|
53
|
+
*
|
|
54
|
+
* supports debounce via `debounceWait` option which accepts dynamic updates.
|
|
51
55
|
*/
|
|
52
|
-
export declare const useRequest: <T>(request: (...args: any[]) => Promise<T>, { auto, then: thenCallback, catch: catchCallback, finally: finallyCallback, }?: UsingRequest<T>) => UsedRequest<T>;
|
|
56
|
+
export declare const useRequest: <T>(request: (...args: any[]) => Promise<T>, { auto, then: thenCallback, catch: catchCallback, finally: finallyCallback, debounceWait, }?: UsingRequest<T>) => UsedRequest<T>;
|
|
53
57
|
export {};
|
|
@@ -1,16 +1,18 @@
|
|
|
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
|
|
4
|
+
import { useState, useRef } from 'react';
|
|
5
5
|
import { useEvent } from './use-event.mjs';
|
|
6
6
|
import { useMounted } from './use-mounted.mjs';
|
|
7
|
+
import { useDebounceCallback } from './use-debounce-callback.mjs';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* @author murukal
|
|
10
11
|
*
|
|
11
|
-
* @description
|
|
12
12
|
* wraps an async request function, tracking loading / error / data state.
|
|
13
13
|
* when `auto` is true the request fires automatically on mount.
|
|
14
|
+
*
|
|
15
|
+
* supports debounce via `debounceWait` option which accepts dynamic updates.
|
|
14
16
|
*/
|
|
15
17
|
var useRequest = function useRequest(request) {
|
|
16
18
|
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
@@ -18,7 +20,8 @@ var useRequest = function useRequest(request) {
|
|
|
18
20
|
auto = _ref$auto === void 0 ? false : _ref$auto,
|
|
19
21
|
thenCallback = _ref.then,
|
|
20
22
|
catchCallback = _ref["catch"],
|
|
21
|
-
finallyCallback = _ref["finally"]
|
|
23
|
+
finallyCallback = _ref["finally"],
|
|
24
|
+
debounceWait = _ref.debounceWait;
|
|
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
|
-
|
|
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,12 +67,21 @@ var useRequest = function useRequest(request) {
|
|
|
63
67
|
return _context.a(2);
|
|
64
68
|
}
|
|
65
69
|
}, _callee);
|
|
66
|
-
}))
|
|
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));
|
|
77
|
+
});
|
|
67
78
|
useMounted(function () {
|
|
68
79
|
if (isMountedRef.current) return;
|
|
69
80
|
if (!auto) return;
|
|
70
81
|
isMountedRef.current = true;
|
|
71
|
-
run
|
|
82
|
+
// auto-run always fires immediately — debounce only applies to
|
|
83
|
+
// manual run() calls
|
|
84
|
+
_execute();
|
|
72
85
|
});
|
|
73
86
|
return {
|
|
74
87
|
data: data,
|