1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, '__esModule', { value: true });
|
4 |
|
5 | require('./chunk/constants.js');
|
6 | var utils = require('./chunk/utils.js');
|
7 | var core = require('./core.js');
|
8 |
|
9 | let def = "default";
|
10 |
|
11 | let typeLoading = "loading";
|
12 |
|
13 | let typeResolve = "resolve";
|
14 |
|
15 | let typeReject = "reject";
|
16 |
|
17 | let defMsLoading = 100;
|
18 |
|
19 | let WhenLoading = () => ({ loading, ...props }) =>
|
20 | utils.isFunction(loading) ? loading(props) : loading;
|
21 |
|
22 | let WhenError = () => ({ error = "", ...props }) =>
|
23 | utils.isFunction(error) ? error(props) : error;
|
24 |
|
25 | let WhenEmpty = () => () => "";
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 | function useLazy(callback, args = [], msLoading = defMsLoading) {
|
35 | let [Component, setComponent] = core.useState(WhenEmpty);
|
36 | core.useEffect(() => {
|
37 | let cancel;
|
38 | let ready;
|
39 |
|
40 | callback()
|
41 | .then(data => {
|
42 | ready = true;
|
43 | if (!cancel) {
|
44 | let value = def in data ? data[def] : data;
|
45 | setComponent(() => props =>
|
46 | utils.isFunction(value) ? value(props) : value
|
47 | );
|
48 | }
|
49 | })
|
50 | .catch(() => {
|
51 | ready = true;
|
52 | if (!cancel) setComponent(WhenError);
|
53 | });
|
54 |
|
55 | setTimeout(
|
56 | () => !cancel && !ready && setComponent(WhenLoading),
|
57 | msLoading
|
58 | );
|
59 | return () => {
|
60 | cancel = true;
|
61 | if (ready) setComponent(() => WhenEmpty);
|
62 | };
|
63 | }, args);
|
64 |
|
65 | return Component;
|
66 | }
|
67 |
|
68 | function useLazyNode(callback, msLoading = defMsLoading) {
|
69 | let [prevent, setPrevent] = core.useState(true);
|
70 | let [status, setStatus] = core.useState();
|
71 | let [Component, setComponent] = core.useState(WhenEmpty);
|
72 |
|
73 | function CaseProxy(props) {
|
74 | if (prevent) setPrevent(prevent => (prevent ? false : prevent));
|
75 | return status == typeLoading
|
76 | ? WhenLoading()(props)
|
77 | : status == typeResolve
|
78 | ? Component(props)
|
79 | : status == typeReject
|
80 | ? WhenError()(props)
|
81 | : WhenEmpty()();
|
82 | }
|
83 |
|
84 | core.useEffect(() => {
|
85 | if (!prevent) {
|
86 | callback()
|
87 | .then(md => {
|
88 | setStatus(typeResolve);
|
89 | setComponent(() => (def in md ? md[def] : md));
|
90 | })
|
91 | .catch(e => setStatus(typeReject));
|
92 | setTimeout(
|
93 | () =>
|
94 | setStatus(status =>
|
95 | [typeLoading, typeReject, typeResolve].includes(status)
|
96 | ? status
|
97 | : typeLoading
|
98 | ),
|
99 | msLoading
|
100 | );
|
101 | }
|
102 | }, [prevent]);
|
103 |
|
104 | return CaseProxy;
|
105 | }
|
106 |
|
107 | exports.useLazy = useLazy;
|
108 | exports.useLazyNode = useLazyNode;
|
109 |
|