@based/react 4.2.6 → 4.3.0
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.
- package/dist/index.d.ts +3 -0
- package/dist/index.js +42 -9
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +55 -11
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { FC, ReactNode } from 'react';
|
|
2
2
|
import { BasedClient, AuthState } from '@based/client';
|
|
3
|
+
import { BasedError } from '@based/client';
|
|
3
4
|
export declare const Provider: FC<{
|
|
4
5
|
client: BasedClient;
|
|
5
6
|
children: ReactNode;
|
|
6
7
|
}>;
|
|
7
8
|
export declare const useAuthState: () => AuthState;
|
|
9
|
+
export declare const useLoading: () => boolean;
|
|
8
10
|
export declare const useConnected: () => {
|
|
9
11
|
connected: boolean;
|
|
10
12
|
};
|
|
@@ -13,6 +15,7 @@ export declare const useQuery: <T = any>(name?: string, payload?: any, opts?: {
|
|
|
13
15
|
}) => {
|
|
14
16
|
loading: boolean;
|
|
15
17
|
data?: T;
|
|
18
|
+
error?: BasedError;
|
|
16
19
|
checksum?: number;
|
|
17
20
|
};
|
|
18
21
|
export declare const useClient: () => BasedClient;
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useClient = exports.useQuery = exports.useConnected = exports.useAuthState = exports.Provider = void 0;
|
|
3
|
+
exports.useClient = exports.useQuery = exports.useConnected = exports.useLoading = exports.useAuthState = exports.Provider = void 0;
|
|
4
4
|
const react_1 = require("react");
|
|
5
5
|
const Ctx = (0, react_1.createContext)(null);
|
|
6
6
|
const Provider = ({ client, children }) => {
|
|
@@ -23,6 +23,19 @@ const useAuthState = () => {
|
|
|
23
23
|
return state;
|
|
24
24
|
};
|
|
25
25
|
exports.useAuthState = useAuthState;
|
|
26
|
+
const useLoadingListeners = new Set();
|
|
27
|
+
const hooksLoading = new Set();
|
|
28
|
+
const useLoading = () => {
|
|
29
|
+
const [isLoading, setLoading] = (0, react_1.useState)(hooksLoading.size > 0);
|
|
30
|
+
(0, react_1.useEffect)(() => {
|
|
31
|
+
useLoadingListeners.add(setLoading);
|
|
32
|
+
return () => {
|
|
33
|
+
useLoadingListeners.delete(setLoading);
|
|
34
|
+
};
|
|
35
|
+
}, []);
|
|
36
|
+
return isLoading;
|
|
37
|
+
};
|
|
38
|
+
exports.useLoading = useLoading;
|
|
26
39
|
const useConnected = () => {
|
|
27
40
|
const client = (0, react_1.useContext)(Ctx);
|
|
28
41
|
const [connected, setConnected] = (0, react_1.useState)(client.connected);
|
|
@@ -50,28 +63,48 @@ const useQuery = (name, payload, opts) => {
|
|
|
50
63
|
if (client && name) {
|
|
51
64
|
const q = client.query(name, payload, opts);
|
|
52
65
|
const { id, cache } = q;
|
|
53
|
-
const [
|
|
66
|
+
const [checksumOrError, update] = (0, react_1.useState)(cache?.checksum);
|
|
54
67
|
(0, react_1.useEffect)(() => {
|
|
55
68
|
const unsubscribe = q.subscribe((_, checksum) => {
|
|
56
69
|
update(checksum);
|
|
70
|
+
}, (err) => {
|
|
71
|
+
update(err);
|
|
57
72
|
});
|
|
58
73
|
return () => {
|
|
59
74
|
unsubscribe();
|
|
60
75
|
};
|
|
61
76
|
}, [id]);
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
77
|
+
if (checksumOrError) {
|
|
78
|
+
const isLoading = hooksLoading.size > 0;
|
|
79
|
+
if (hooksLoading.delete(id)) {
|
|
80
|
+
if (!(hooksLoading.size > 0) && !isLoading) {
|
|
81
|
+
useLoadingListeners.forEach((fn) => {
|
|
82
|
+
fn(false);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (typeof checksumOrError === 'number') {
|
|
87
|
+
return { loading: false, data: cache.value, checksum: checksumOrError };
|
|
88
|
+
}
|
|
89
|
+
return { loading: false, error: checksumOrError };
|
|
90
|
+
}
|
|
91
|
+
const isLoading = hooksLoading.size > 0;
|
|
92
|
+
if (hooksLoading.add(id)) {
|
|
93
|
+
if (!isLoading) {
|
|
94
|
+
useLoadingListeners.forEach((fn) => {
|
|
95
|
+
fn(true);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return { loading: true };
|
|
65
100
|
}
|
|
66
|
-
// stubs
|
|
67
101
|
(0, react_1.useState)();
|
|
68
102
|
(0, react_1.useEffect)(() => { }, [null]);
|
|
69
|
-
return { loading: true
|
|
103
|
+
return { loading: true };
|
|
70
104
|
};
|
|
71
105
|
exports.useQuery = useQuery;
|
|
72
106
|
const useClient = () => {
|
|
73
|
-
|
|
74
|
-
return client;
|
|
107
|
+
return (0, react_1.useContext)(Ctx);
|
|
75
108
|
};
|
|
76
109
|
exports.useClient = useClient;
|
|
77
110
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iCAQc;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
ReactNode,
|
|
9
9
|
} from 'react'
|
|
10
10
|
import { BasedClient, AuthState } from '@based/client'
|
|
11
|
+
import { BasedError } from '@based/client'
|
|
11
12
|
|
|
12
13
|
const Ctx = createContext<BasedClient>(null)
|
|
13
14
|
|
|
@@ -36,6 +37,20 @@ export const useAuthState = (): AuthState => {
|
|
|
36
37
|
return state
|
|
37
38
|
}
|
|
38
39
|
|
|
40
|
+
const useLoadingListeners: Set<Function> = new Set()
|
|
41
|
+
const hooksLoading: Set<number> = new Set()
|
|
42
|
+
|
|
43
|
+
export const useLoading = () => {
|
|
44
|
+
const [isLoading, setLoading] = useState(hooksLoading.size > 0)
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
useLoadingListeners.add(setLoading)
|
|
47
|
+
return () => {
|
|
48
|
+
useLoadingListeners.delete(setLoading)
|
|
49
|
+
}
|
|
50
|
+
}, [])
|
|
51
|
+
return isLoading
|
|
52
|
+
}
|
|
53
|
+
|
|
39
54
|
export const useConnected = () => {
|
|
40
55
|
const client: BasedClient = useContext(Ctx)
|
|
41
56
|
const [connected, setConnected] = useState(client.connected)
|
|
@@ -69,6 +84,7 @@ export const useQuery = <T = any>(
|
|
|
69
84
|
): {
|
|
70
85
|
loading: boolean
|
|
71
86
|
data?: T
|
|
87
|
+
error?: BasedError
|
|
72
88
|
checksum?: number
|
|
73
89
|
} => {
|
|
74
90
|
const client: BasedClient = useContext(Ctx)
|
|
@@ -76,31 +92,59 @@ export const useQuery = <T = any>(
|
|
|
76
92
|
if (client && name) {
|
|
77
93
|
const q = client.query(name, payload, opts)
|
|
78
94
|
const { id, cache } = q
|
|
79
|
-
const [
|
|
95
|
+
const [checksumOrError, update] = useState<number | BasedError>(
|
|
96
|
+
cache?.checksum
|
|
97
|
+
)
|
|
80
98
|
|
|
81
99
|
useEffect(() => {
|
|
82
|
-
const unsubscribe = q.subscribe(
|
|
83
|
-
|
|
84
|
-
|
|
100
|
+
const unsubscribe = q.subscribe(
|
|
101
|
+
(_, checksum) => {
|
|
102
|
+
update(checksum)
|
|
103
|
+
},
|
|
104
|
+
(err) => {
|
|
105
|
+
update(err)
|
|
106
|
+
}
|
|
107
|
+
)
|
|
85
108
|
|
|
86
109
|
return () => {
|
|
87
110
|
unsubscribe()
|
|
88
111
|
}
|
|
89
112
|
}, [id])
|
|
90
113
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
114
|
+
if (checksumOrError) {
|
|
115
|
+
const isLoading = hooksLoading.size > 0
|
|
116
|
+
if (hooksLoading.delete(id)) {
|
|
117
|
+
if (!(hooksLoading.size > 0) && !isLoading) {
|
|
118
|
+
useLoadingListeners.forEach((fn) => {
|
|
119
|
+
fn(false)
|
|
120
|
+
})
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (typeof checksumOrError === 'number') {
|
|
125
|
+
return { loading: false, data: cache.value, checksum: checksumOrError }
|
|
126
|
+
}
|
|
127
|
+
return { loading: false, error: checksumOrError }
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const isLoading = hooksLoading.size > 0
|
|
131
|
+
if (hooksLoading.add(id)) {
|
|
132
|
+
if (!isLoading) {
|
|
133
|
+
useLoadingListeners.forEach((fn) => {
|
|
134
|
+
fn(true)
|
|
135
|
+
})
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return { loading: true }
|
|
94
140
|
}
|
|
95
141
|
|
|
96
|
-
// stubs
|
|
97
142
|
useState()
|
|
98
143
|
useEffect(() => {}, [null])
|
|
99
144
|
|
|
100
|
-
return { loading: true
|
|
145
|
+
return { loading: true }
|
|
101
146
|
}
|
|
102
147
|
|
|
103
148
|
export const useClient = (): BasedClient => {
|
|
104
|
-
|
|
105
|
-
return client
|
|
149
|
+
return useContext(Ctx)
|
|
106
150
|
}
|