@based/react 4.2.7 → 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 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 [checksum, update] = (0, react_1.useState)(cache?.checksum);
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
- return cache
63
- ? { loading: false, data: cache.value, checksum }
64
- : { loading: true };
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
103
  return { loading: true };
70
104
  };
71
105
  exports.useQuery = useQuery;
72
106
  const useClient = () => {
73
- const client = (0, react_1.useContext)(Ctx);
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iCAQc;AAId,MAAM,GAAG,GAAG,IAAA,qBAAa,EAAc,IAAI,CAAC,CAAA;AAErC,MAAM,QAAQ,GAGhB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC5B,OAAO,IAAA,qBAAa,EAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAA;AACjE,CAAC,CAAA;AALY,QAAA,QAAQ,YAKpB;AAEM,MAAM,YAAY,GAAG,GAAc,EAAE;IAC1C,MAAM,MAAM,GAAgB,IAAA,kBAAU,EAAC,GAAG,CAAC,CAAA;IAC3C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAY,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC,CAAA;IAEtE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,MAAM,EAAE;YACV,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;YAC1B,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,EAAE;gBAC7B,QAAQ,CAAC,SAAS,CAAC,CAAA;YACrB,CAAC,CAAA;YACD,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAA;YACvC,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAA;SACtD;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAEZ,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAhBY,QAAA,YAAY,gBAgBxB;AAED,MAAM,mBAAmB,GAAkB,IAAI,GAAG,EAAE,CAAA;AACpD,MAAM,YAAY,GAAgB,IAAI,GAAG,EAAE,CAAA;AAEpC,MAAM,UAAU,GAAG,GAAG,EAAE;IAC7B,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;IAC/D,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACnC,OAAO,GAAG,EAAE;YACV,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QACxC,CAAC,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IACN,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AATY,QAAA,UAAU,cAStB;AAEM,MAAM,YAAY,GAAG,GAAG,EAAE;IAC/B,MAAM,MAAM,GAAgB,IAAA,kBAAU,EAAC,GAAG,CAAC,CAAA;IAC3C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAE5D,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,MAAM,EAAE;YACV,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;YAC9B,MAAM,QAAQ,GAAG,GAAG,EAAE;gBACpB,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;YAChC,CAAC,CAAA;YACD,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;YACjC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YAChC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YAC9B,OAAO,GAAG,EAAE;gBACV,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;gBAClC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;gBACjC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACjC,CAAC,CAAA;SACF;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAEZ,OAAO,EAAE,SAAS,EAAE,CAAA;AACtB,CAAC,CAAA;AAtBY,QAAA,YAAY,gBAsBxB;AAEM,MAAM,QAAQ,GAAG,CACtB,IAAa,EACb,OAAa,EACb,IAEC,EAMD,EAAE;IACF,MAAM,MAAM,GAAgB,IAAA,kBAAU,EAAC,GAAG,CAAC,CAAA;IAE3C,IAAI,MAAM,IAAI,IAAI,EAAE;QAClB,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAC3C,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QACvB,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,IAAA,gBAAQ,EACxC,KAAK,EAAE,QAAQ,CAChB,CAAA;QAED,IAAA,iBAAS,EAAC,GAAG,EAAE;YACb,MAAM,WAAW,GAAG,CAAC,CAAC,SAAS,CAC7B,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE;gBACd,MAAM,CAAC,QAAQ,CAAC,CAAA;YAClB,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;gBACN,MAAM,CAAC,GAAG,CAAC,CAAA;YACb,CAAC,CACF,CAAA;YAED,OAAO,GAAG,EAAE;gBACV,WAAW,EAAE,CAAA;YACf,CAAC,CAAA;QACH,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAER,IAAI,eAAe,EAAE;YACnB,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,CAAA;YACvC,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;gBAC3B,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE;oBAC1C,mBAAmB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;wBACjC,EAAE,CAAC,KAAK,CAAC,CAAA;oBACX,CAAC,CAAC,CAAA;iBACH;aACF;YAED,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE;gBACvC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAA;aACxE;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,CAAA;SAClD;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,CAAA;QACvC,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACxB,IAAI,CAAC,SAAS,EAAE;gBACd,mBAAmB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;oBACjC,EAAE,CAAC,IAAI,CAAC,CAAA;gBACV,CAAC,CAAC,CAAA;aACH;SACF;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;KACzB;IAED,IAAA,gBAAQ,GAAE,CAAA;IACV,IAAA,iBAAS,EAAC,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAE3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AAC1B,CAAC,CAAA;AApEY,QAAA,QAAQ,YAoEpB;AAEM,MAAM,SAAS,GAAG,GAAgB,EAAE;IACzC,OAAO,IAAA,kBAAU,EAAC,GAAG,CAAC,CAAA;AACxB,CAAC,CAAA;AAFY,QAAA,SAAS,aAErB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@based/react",
3
- "version": "4.2.7",
3
+ "version": "4.3.0",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
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,24 +92,53 @@ 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 [checksum, update] = useState(cache?.checksum)
95
+ const [checksumOrError, update] = useState<number | BasedError>(
96
+ cache?.checksum
97
+ )
80
98
 
81
99
  useEffect(() => {
82
- const unsubscribe = q.subscribe((_, checksum) => {
83
- update(checksum)
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
- return cache
92
- ? { loading: false, data: cache.value, checksum }
93
- : { loading: true }
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
 
@@ -101,6 +146,5 @@ export const useQuery = <T = any>(
101
146
  }
102
147
 
103
148
  export const useClient = (): BasedClient => {
104
- const client = useContext(Ctx)
105
- return client
149
+ return useContext(Ctx)
106
150
  }