@based/react 0.6.0 → 0.7.1

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/gql.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import { BasedGraphQL, GenericObject, BasedOpts } from '@based/client';
2
+ declare type Data = GenericObject;
3
+ declare type Loading = boolean;
4
+ export declare function useQuery(query: string | BasedGraphQL, variables?: Record<string, any>, clientSelector?: string | (BasedOpts & {
5
+ key?: string;
6
+ })): {
7
+ data: Data;
8
+ error?: Error;
9
+ loading: Loading;
10
+ };
11
+ export {};
package/dist/gql.js ADDED
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useQuery = void 0;
4
+ const react_1 = require("react");
5
+ const client_1 = require("@based/client");
6
+ function resultReducer(state, action) {
7
+ if (action.error) {
8
+ state.error = action.error;
9
+ }
10
+ if (action.data) {
11
+ state.checksum = action.checksum || 0;
12
+ state.data = action.data;
13
+ state.loading = false;
14
+ if (state.error) {
15
+ delete state.error;
16
+ }
17
+ }
18
+ if (action.loading) {
19
+ state.loading = action.loading;
20
+ }
21
+ return { ...state };
22
+ }
23
+ function useQuery(query, variables = {}, clientSelector) {
24
+ const [result, dispatch] = (0, react_1.useReducer)(resultReducer, {
25
+ loading: true,
26
+ data: {},
27
+ checksum: 0,
28
+ });
29
+ if (a) {
30
+ const subId = (0, react_1.useMemo)(() => {
31
+ return (0, client_1.generateSubscriptionId)(typeof a === 'string' ? [a, payload] : a);
32
+ }, [payload, a]);
33
+ const isNamed = typeof a === 'string';
34
+ const selector = clientSelector || (!isNamed ? payload : 'default');
35
+ const client = useClient(selector);
36
+ const clientKey = typeof selector === 'string' ? selector : genOptsId(selector);
37
+ if (client) {
38
+ const subKey = clientKey + subId;
39
+ (0, react_1.useEffect)(() => {
40
+ updateMeta(subKey, true, false);
41
+ dispatch({ error: null, loading: true, data: {} });
42
+ const [, subscriberId] = (0, client_1.addSubscriber)(client.client, isNamed ? payload : a, (d, checksum) => {
43
+ updateMeta(subKey, false, false);
44
+ dispatch({ data: d, checksum });
45
+ }, (err) => {
46
+ if (err) {
47
+ console.error(err);
48
+ updateMeta(subKey, false, err);
49
+ dispatch({ error: err, loading: false });
50
+ }
51
+ }, (err) => {
52
+ console.error(err);
53
+ updateMeta(subKey, false, err);
54
+ dispatch({ error: err });
55
+ }, subId, typeof a === 'string' ? a : undefined);
56
+ return () => {
57
+ updateMeta(subKey, false, false);
58
+ (0, client_1.removeSubscriber)(client.client, subId, subscriberId);
59
+ };
60
+ }, [subId, clientKey]);
61
+ }
62
+ else {
63
+ (0, react_1.useEffect)(stubFn, [null, null]);
64
+ }
65
+ }
66
+ else {
67
+ (0, react_1.useMemo)(stubFn, [payload, a]);
68
+ useClient(clientSelector);
69
+ (0, react_1.useEffect)(stubFn, [null, null]);
70
+ }
71
+ return result;
72
+ }
73
+ exports.useQuery = useQuery;
74
+ //# sourceMappingURL=gql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gql.js","sourceRoot":"","sources":["../src/gql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import React, { FunctionComponent, ReactNode } from 'react';
2
+ import { Based, GenericObject, Query, BasedGraphQL, BasedOpts } from '@based/client';
3
+ export declare type CreateClient = (selector: string | (BasedOpts & {
4
+ key?: string;
5
+ })) => Based;
6
+ interface BasedContextType {
7
+ clients: {
8
+ [key: string]: Based;
9
+ };
10
+ createClient?: CreateClient;
11
+ removeClient: (selector: string | (BasedOpts & {
12
+ key?: string;
13
+ }) | Based) => void;
14
+ }
15
+ export declare const BasedContext: React.Context<BasedContextType>;
16
+ export declare const defaultCreateClient: CreateClient;
17
+ export declare const Provider: FunctionComponent<{
18
+ client?: Based;
19
+ clients?: {
20
+ [key: string]: Based;
21
+ };
22
+ children: ReactNode;
23
+ createClient?: CreateClient;
24
+ }>;
25
+ export declare const useBasedContext: () => BasedContextType;
26
+ export declare const useClients: () => Based[];
27
+ export declare const useClient: (selector?: string | (BasedOpts & {
28
+ key?: string;
29
+ })) => Based;
30
+ declare type Data = GenericObject;
31
+ declare type Loading = boolean;
32
+ export declare function useAuth(clientSelector?: string | (BasedOpts & {
33
+ key?: string;
34
+ })): string | false;
35
+ export declare function useSchema(name?: string | null | false, clientSelector?: string | (BasedOpts & {
36
+ key?: string;
37
+ })): {
38
+ schema: Data;
39
+ error?: Error;
40
+ loading: Loading;
41
+ };
42
+ export declare function useTrack(type: string, params?: {
43
+ [key: string]: number | string | boolean;
44
+ }, clientSelector?: string | (BasedOpts & {
45
+ key?: string;
46
+ })): void;
47
+ export declare function useData(query: Query, clientSelector?: string | (BasedOpts & {
48
+ key?: string;
49
+ })): {
50
+ data: Data;
51
+ error?: Error;
52
+ loading: Loading;
53
+ checksum: number;
54
+ };
55
+ export declare function useData(name: string): {
56
+ data: Data;
57
+ error?: Error;
58
+ loading: Loading;
59
+ checksum: number;
60
+ };
61
+ export declare function useData(name: string, payload: any, clientSelector?: string | (BasedOpts & {
62
+ key?: string;
63
+ })): {
64
+ data: Data;
65
+ error?: Error;
66
+ loading: Loading;
67
+ checksum: number;
68
+ };
69
+ export declare function useLoading(): {
70
+ loading: boolean;
71
+ };
72
+ export declare function useError(): {
73
+ error: string;
74
+ errors: unknown[];
75
+ };
76
+ export declare function useQuery(query?: string | BasedGraphQL, variables?: Record<string, any>, clientSelector?: string | (BasedOpts & {
77
+ key?: string;
78
+ })): {
79
+ data: Data;
80
+ error?: Error;
81
+ loading: Loading;
82
+ };
83
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,444 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.useQuery = exports.useError = exports.useLoading = exports.useData = exports.useTrack = exports.useSchema = exports.useAuth = exports.useClient = exports.useClients = exports.useBasedContext = exports.Provider = exports.defaultCreateClient = exports.BasedContext = void 0;
23
+ const react_1 = __importStar(require("react"));
24
+ const client_1 = __importStar(require("@based/client"));
25
+ const schemaSubId = (0, client_1.generateSubscriptionId)({ $subscribe_schema: 'default' });
26
+ const genOptsId = (opts) => {
27
+ if (!opts) {
28
+ return;
29
+ }
30
+ if (opts.key) {
31
+ return opts.key;
32
+ }
33
+ return `${opts.env}_${opts.project}_${opts.org}_${opts.cluster || ''}_${opts.name || ''}`;
34
+ };
35
+ exports.BasedContext = (0, react_1.createContext)({
36
+ clients: {},
37
+ // eslint-disable-next-line
38
+ removeClient: (...args) => { },
39
+ });
40
+ const errors = {};
41
+ const errorListeners = new Set();
42
+ const loadings = new Set();
43
+ const loadingListeners = new Set();
44
+ const newClientListeners = new Set();
45
+ let isLoading = false;
46
+ let lastError = '';
47
+ let errorCnt = 0;
48
+ let errorKey = errorCnt + lastError;
49
+ const defaultCreateClient = (selector) => {
50
+ if (typeof selector === 'object') {
51
+ if (process.env.CLUSTER &&
52
+ process.env.CLUSTER.startsWith('local') &&
53
+ !selector.cluster) {
54
+ selector.cluster = process.env.CLUSTER;
55
+ }
56
+ return (0, client_1.default)(selector);
57
+ }
58
+ else {
59
+ // default
60
+ console.error('Cannot create client from ' + selector);
61
+ }
62
+ };
63
+ exports.defaultCreateClient = defaultCreateClient;
64
+ const Provider = ({ client, children, clients, createClient }) => {
65
+ if (!clients && client) {
66
+ clients = {
67
+ default: client,
68
+ };
69
+ }
70
+ else if (clients && client) {
71
+ clients.default = client;
72
+ }
73
+ const ctx = react_1.default.createElement(exports.BasedContext.Provider, {
74
+ value: {
75
+ clients,
76
+ createClient: createClient || exports.defaultCreateClient,
77
+ removeClient: (selector) => {
78
+ if (selector instanceof client_1.Based) {
79
+ for (const cl in clients) {
80
+ if (clients[cl] === selector) {
81
+ selector = cl;
82
+ break;
83
+ }
84
+ }
85
+ if (typeof selector !== 'string') {
86
+ console.error('Cannot find client to remove from ctx', selector);
87
+ return;
88
+ }
89
+ }
90
+ else if (typeof selector !== 'string') {
91
+ selector = genOptsId(selector);
92
+ }
93
+ // @ts-ignore
94
+ if (clients[selector]) {
95
+ // @ts-ignore
96
+ clients[selector].disconnect();
97
+ // @ts-ignore
98
+ delete clients[selector];
99
+ newClientListeners.forEach((fn) => fn());
100
+ }
101
+ },
102
+ },
103
+ }, children);
104
+ return ctx;
105
+ };
106
+ exports.Provider = Provider;
107
+ const useBasedContext = () => {
108
+ return (0, react_1.useContext)(exports.BasedContext);
109
+ };
110
+ exports.useBasedContext = useBasedContext;
111
+ function forceUpdate(state) {
112
+ return state + 1;
113
+ }
114
+ const useClients = () => {
115
+ const ctx = (0, exports.useBasedContext)();
116
+ const [, update] = (0, react_1.useReducer)(forceUpdate, 0);
117
+ (0, react_1.useEffect)(() => {
118
+ let timer;
119
+ const fn = () => {
120
+ timer = setTimeout(update, 0);
121
+ };
122
+ newClientListeners.add(fn);
123
+ return () => {
124
+ newClientListeners.delete(fn);
125
+ clearTimeout(timer);
126
+ };
127
+ }, []);
128
+ return Object.values(ctx.clients);
129
+ };
130
+ exports.useClients = useClients;
131
+ const useClient = (selector = 'default') => {
132
+ const basedCtx = (0, react_1.useContext)(exports.BasedContext);
133
+ if (typeof selector === 'object') {
134
+ if (!(selector.env && selector.project && selector.org)) {
135
+ return;
136
+ }
137
+ }
138
+ let key;
139
+ if (typeof selector === 'string') {
140
+ key = selector;
141
+ }
142
+ else {
143
+ key = selector.key || genOptsId(selector);
144
+ }
145
+ let client = basedCtx.clients[key];
146
+ if (!client && basedCtx.createClient) {
147
+ client = basedCtx.createClient(selector);
148
+ if (client) {
149
+ basedCtx.clients[key] = client;
150
+ newClientListeners.forEach((fn) => fn());
151
+ }
152
+ }
153
+ return client;
154
+ };
155
+ exports.useClient = useClient;
156
+ function resultReducer(state, action) {
157
+ if (action.error) {
158
+ state.error = action.error;
159
+ }
160
+ if (action.data) {
161
+ state.checksum = action.checksum || 0;
162
+ state.data = action.data;
163
+ state.loading = false;
164
+ if (state.error) {
165
+ delete state.error;
166
+ }
167
+ }
168
+ if (action.loading) {
169
+ state.loading = action.loading;
170
+ }
171
+ return { ...state };
172
+ }
173
+ function useAuth(clientSelector) {
174
+ const client = (0, exports.useClient)(clientSelector);
175
+ const [token, setToken] = (0, react_1.useState)(false);
176
+ (0, react_1.useEffect)(() => {
177
+ const t = () => setToken(client.getToken());
178
+ client.on('auth', t);
179
+ return () => {
180
+ client.removeListener('auth', t);
181
+ };
182
+ }, []);
183
+ return token;
184
+ }
185
+ exports.useAuth = useAuth;
186
+ function useSchema(name = 'default', clientSelector) {
187
+ const x = useData(name
188
+ ? {
189
+ $subscribe_schema: name,
190
+ }
191
+ : null, clientSelector);
192
+ return {
193
+ loading: x.loading,
194
+ error: x.error,
195
+ schema: x.data,
196
+ };
197
+ }
198
+ exports.useSchema = useSchema;
199
+ function useTrack(type, params, clientSelector) {
200
+ if (type) {
201
+ const selector = clientSelector || 'default';
202
+ const client = (0, exports.useClient)(selector);
203
+ const id = (0, react_1.useMemo)(() => {
204
+ return (0, client_1.generateSubscriptionId)(params, type);
205
+ }, [type, params]);
206
+ (0, react_1.useEffect)(() => {
207
+ client.track(type, params);
208
+ return () => {
209
+ client.untrack(type, params);
210
+ };
211
+ }, [id]);
212
+ }
213
+ else {
214
+ (0, exports.useClient)(clientSelector);
215
+ (0, react_1.useMemo)(() => { }, []);
216
+ (0, react_1.useEffect)(stubFn, [null, null]);
217
+ }
218
+ }
219
+ exports.useTrack = useTrack;
220
+ function useData(a, payload, clientSelector) {
221
+ const [result, dispatch] = (0, react_1.useReducer)(resultReducer, {
222
+ loading: true,
223
+ data: {},
224
+ checksum: 0,
225
+ });
226
+ if (a) {
227
+ const subId = (0, react_1.useMemo)(() => {
228
+ return (0, client_1.generateSubscriptionId)(typeof a === 'string' ? [a, payload] : a);
229
+ }, [payload, a]);
230
+ const isNamed = typeof a === 'string';
231
+ const selector = clientSelector || (!isNamed ? payload : 'default');
232
+ const client = (0, exports.useClient)(selector);
233
+ const clientKey = typeof selector === 'string' ? selector : genOptsId(selector);
234
+ if (client) {
235
+ const subKey = clientKey + subId;
236
+ (0, react_1.useEffect)(() => {
237
+ updateMeta(subKey, true, false);
238
+ dispatch({ error: null, loading: true, data: {} });
239
+ const [, subscriberId] = (0, client_1.addSubscriber)(client.client, isNamed ? payload : a, (d, checksum) => {
240
+ updateMeta(subKey, false, false);
241
+ dispatch({ data: d, checksum });
242
+ }, (err) => {
243
+ if (err) {
244
+ console.error(err);
245
+ updateMeta(subKey, false, err);
246
+ dispatch({ error: err, loading: false });
247
+ }
248
+ }, (err) => {
249
+ console.error(err);
250
+ updateMeta(subKey, false, err);
251
+ dispatch({ error: err });
252
+ }, subId, typeof a === 'string' ? a : undefined);
253
+ return () => {
254
+ updateMeta(subKey, false, false);
255
+ (0, client_1.removeSubscriber)(client.client, subId, subscriberId);
256
+ };
257
+ }, [subId, clientKey]);
258
+ }
259
+ else {
260
+ (0, react_1.useEffect)(stubFn, [null, null]);
261
+ }
262
+ }
263
+ else {
264
+ (0, react_1.useMemo)(stubFn, [payload, a]);
265
+ (0, exports.useClient)(clientSelector);
266
+ (0, react_1.useEffect)(stubFn, [null, null]);
267
+ }
268
+ return result;
269
+ }
270
+ exports.useData = useData;
271
+ function useLoading() {
272
+ const [, setLoading] = (0, react_1.useState)(isLoading);
273
+ loadingListeners.add(setLoading);
274
+ (0, react_1.useEffect)(() => {
275
+ return () => {
276
+ loadingListeners.delete(setLoading);
277
+ };
278
+ }, []);
279
+ return { loading: isLoading };
280
+ }
281
+ exports.useLoading = useLoading;
282
+ function useError() {
283
+ const [, setError] = (0, react_1.useState)(errorKey);
284
+ errorListeners.add(setError);
285
+ (0, react_1.useEffect)(() => {
286
+ return () => {
287
+ errorListeners.delete(setError);
288
+ };
289
+ }, []);
290
+ return { error: errorCnt ? lastError : null, errors: Object.values(errors) };
291
+ }
292
+ exports.useError = useError;
293
+ function updateMeta(subKey, loading, error) {
294
+ if (error) {
295
+ lastError = error;
296
+ if (subKey in errors) {
297
+ errors[subKey] = error;
298
+ }
299
+ else {
300
+ errors[subKey] = error;
301
+ errorCnt++;
302
+ }
303
+ }
304
+ else {
305
+ if (subKey in errors) {
306
+ errorCnt--;
307
+ delete errors[subKey];
308
+ }
309
+ }
310
+ const newErrorKey = errorCnt + lastError;
311
+ if (newErrorKey !== errorKey) {
312
+ errorKey = newErrorKey;
313
+ errorListeners.forEach((fn) => fn(errorKey));
314
+ }
315
+ if (loading) {
316
+ loadings.add(subKey);
317
+ }
318
+ else {
319
+ loadings.delete(subKey);
320
+ }
321
+ const newLoading = !!loadings.size;
322
+ if (newLoading !== isLoading) {
323
+ isLoading = newLoading;
324
+ loadingListeners.forEach((fn) => fn(isLoading));
325
+ }
326
+ }
327
+ function useQuery(query, variables = {}, clientSelector) {
328
+ const [result, dispatch] = (0, react_1.useReducer)(resultReducer, {
329
+ loading: true,
330
+ data: {},
331
+ checksum: 0,
332
+ });
333
+ const r = (0, react_1.useRef)({ checksum: 0, schemaChecksum: 0 });
334
+ if (query) {
335
+ const selector = clientSelector || 'default';
336
+ const client = (0, exports.useClient)(selector);
337
+ const [configState, updateConfigState] = (0, react_1.useState)(0);
338
+ (0, react_1.useEffect)(() => {
339
+ const [, subscriberId] = (0, client_1.addSubscriber)(client.client,
340
+ // FIXME
341
+ { $subscribe_schema: 'default' }, (d, checksum) => {
342
+ console.info('snurp', 'flx', checksum);
343
+ if (!client.client.configuration) {
344
+ client.client.configuration = { dbs: [], schema: {} };
345
+ }
346
+ client.client.configuration.schema.default = d;
347
+ updateConfigState(checksum);
348
+ }, (err) => {
349
+ if (err) {
350
+ console.error(err);
351
+ }
352
+ }, (err) => {
353
+ console.error(err);
354
+ }, schemaSubId);
355
+ return () => {
356
+ (0, client_1.removeSubscriber)(client.client, schemaSubId, subscriberId);
357
+ };
358
+ return () => { };
359
+ }, []);
360
+ if (configState) {
361
+ let op;
362
+ if (typeof query === 'string') {
363
+ op = client.gql(query);
364
+ }
365
+ else {
366
+ op = query;
367
+ }
368
+ op = (0, client_1.handleGraphqlVariables)(op, op, variables);
369
+ const fns = [];
370
+ const queryObj = {};
371
+ for (const key in op.ops) {
372
+ if (op.ops[key].fnObserve) {
373
+ const { name, payload } = op.ops[key].fnObserve;
374
+ fns.push({ name: name, payload });
375
+ continue;
376
+ }
377
+ queryObj[key] = op.ops[key].get;
378
+ }
379
+ // if (fns?.length) {
380
+ // console.log('HELLO OBSERVABLE FUNCTIONS', JSON.stringify(fns, null, 2))
381
+ // // TODO: create observables for these fns and combine with below
382
+ // return new Observable(this.client, { $db: op.db, data: queryObj })
383
+ // }
384
+ // return new Observable(this.client, { $db: op.db, data: queryObj })
385
+ // }
386
+ // op
387
+ const subId = (0, react_1.useMemo)(() => {
388
+ // fn?
389
+ return (0, client_1.generateSubscriptionId)(queryObj);
390
+ }, [queryObj]);
391
+ const clientKey = typeof selector === 'string' ? selector : genOptsId(selector);
392
+ if (client) {
393
+ const subKey = clientKey + subId;
394
+ (0, react_1.useEffect)(() => {
395
+ if (!configState) {
396
+ return;
397
+ }
398
+ updateMeta(subKey, true, false);
399
+ // dispatch({ error: null, loading: true, data: {} })
400
+ const [, subscriberId] = (0, client_1.addSubscriber)(client.client, queryObj, (d, checksum) => {
401
+ // updateMeta(subKey, false, false)
402
+ console.info(r.current.checksum);
403
+ if (r.current.checksum !== checksum) {
404
+ r.current.checksum = checksum;
405
+ dispatch({ data: d, checksum });
406
+ }
407
+ }, (err) => {
408
+ if (err) {
409
+ console.error(err);
410
+ // updateMeta(subKey, false, err)
411
+ dispatch({ error: err, loading: false });
412
+ }
413
+ }, (err) => {
414
+ console.error(err);
415
+ // updateMeta(subKey, false, err)
416
+ dispatch({ error: err });
417
+ }, subId);
418
+ return () => {
419
+ // updateMeta(subKey, false, false)
420
+ (0, client_1.removeSubscriber)(client.client, subId, subscriberId);
421
+ };
422
+ }, [subId, clientKey, configState]);
423
+ }
424
+ else {
425
+ (0, react_1.useEffect)(stubFn, [null, null]);
426
+ }
427
+ }
428
+ else {
429
+ (0, react_1.useMemo)(stubFn, [query]);
430
+ (0, react_1.useEffect)(stubFn, [null, null, null]);
431
+ }
432
+ }
433
+ else {
434
+ (0, exports.useClient)(clientSelector);
435
+ (0, react_1.useState)(null);
436
+ (0, react_1.useEffect)(stubFn, [null]);
437
+ (0, react_1.useMemo)(stubFn, [query]);
438
+ (0, react_1.useEffect)(stubFn, [null, null, null]);
439
+ }
440
+ return result;
441
+ }
442
+ exports.useQuery = useQuery;
443
+ function stubFn() { }
444
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,19 +1,18 @@
1
1
  {
2
2
  "name": "@based/react",
3
- "version": "0.6.0",
3
+ "version": "0.7.1",
4
4
  "source": "src/index.tsx",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
7
- "build": "yarn tsconfig && tsc -b",
8
- "watch": "yarn build -w"
7
+ "build": "npx tsc",
8
+ "watch": "npm run build -- --watch"
9
9
  },
10
10
  "sideEffects": false,
11
11
  "peerDependencies": {
12
- "@based/client": "^0.9.0||^1",
12
+ "@based/client": "^1.1.0",
13
13
  "react": "^17.0.2"
14
14
  },
15
15
  "devDependencies": {
16
- "@based/tsconfig": "*",
17
16
  "@types/react": "^17.0.14",
18
17
  "ts-node": "^10.1.0",
19
18
  "typescript": "^4.3.5"
package/src/index.ts CHANGED
@@ -6,6 +6,7 @@ import React, {
6
6
  useEffect,
7
7
  useMemo,
8
8
  useReducer,
9
+ useRef,
9
10
  useState,
10
11
  } from 'react'
11
12
  import based, {
@@ -14,10 +15,14 @@ import based, {
14
15
  Query,
15
16
  addSubscriber,
16
17
  removeSubscriber,
18
+ handleGraphqlVariables,
19
+ BasedGraphQL,
17
20
  generateSubscriptionId,
18
21
  BasedOpts,
19
22
  } from '@based/client'
20
23
 
24
+ const schemaSubId = generateSubscriptionId({ $subscribe_schema: 'default' })
25
+
21
26
  const genOptsId = (opts: BasedOpts & { key?: string }): string => {
22
27
  if (!opts) {
23
28
  return
@@ -46,6 +51,7 @@ interface BasedContextType {
46
51
 
47
52
  export const BasedContext = createContext<BasedContextType>({
48
53
  clients: {},
54
+ // eslint-disable-next-line
49
55
  removeClient: (...args: any) => {},
50
56
  })
51
57
 
@@ -219,7 +225,7 @@ export function useAuth(
219
225
  const client = useClient(clientSelector)
220
226
  const [token, setToken] = useState<false | string>(false)
221
227
  useEffect(() => {
222
- const t = (v) => setToken(client.getToken())
228
+ const t = () => setToken(client.getToken())
223
229
  client.on('auth', t)
224
230
  return () => {
225
231
  client.removeListener('auth', t)
@@ -436,4 +442,159 @@ function updateMeta(subKey, loading, error) {
436
442
  }
437
443
  }
438
444
 
445
+ export function useQuery(
446
+ query?: string | BasedGraphQL,
447
+ variables: Record<string, any> = {},
448
+ clientSelector?: string | (BasedOpts & { key?: string })
449
+ ): {
450
+ data: Data
451
+ error?: Error
452
+ loading: Loading
453
+ } {
454
+ const [result, dispatch] = useReducer(resultReducer, {
455
+ loading: true,
456
+ data: {},
457
+ checksum: 0,
458
+ })
459
+
460
+ const r = useRef({ checksum: 0, schemaChecksum: 0 })
461
+
462
+ if (query) {
463
+ const selector = clientSelector || 'default'
464
+
465
+ const client = useClient(selector)
466
+
467
+ const [configState, updateConfigState] = useState(0)
468
+
469
+ useEffect(() => {
470
+ const [, subscriberId] = addSubscriber(
471
+ client.client,
472
+ // FIXME
473
+ { $subscribe_schema: 'default' },
474
+ (d, checksum) => {
475
+ console.info('snurp', 'flx', checksum)
476
+ if (!client.client.configuration) {
477
+ client.client.configuration = { dbs: [], schema: {} }
478
+ }
479
+ client.client.configuration.schema.default = d
480
+ updateConfigState(checksum)
481
+ },
482
+ (err) => {
483
+ if (err) {
484
+ console.error(err)
485
+ }
486
+ },
487
+ (err) => {
488
+ console.error(err)
489
+ },
490
+ schemaSubId
491
+ )
492
+ return () => {
493
+ removeSubscriber(client.client, schemaSubId, subscriberId)
494
+ }
495
+ return () => {}
496
+ }, [])
497
+
498
+ if (configState) {
499
+ let op: BasedGraphQL
500
+ if (typeof query === 'string') {
501
+ op = client.gql(query)
502
+ } else {
503
+ op = query
504
+ }
505
+
506
+ op = handleGraphqlVariables(op, op, variables)
507
+
508
+ const fns: { name: string; payload: any }[] = []
509
+ const queryObj: any = {}
510
+ for (const key in op.ops) {
511
+ if (op.ops[key].fnObserve) {
512
+ const { name, payload } = op.ops[key].fnObserve
513
+ fns.push({ name: <string>name, payload })
514
+ continue
515
+ }
516
+ queryObj[key] = op.ops[key].get
517
+ }
518
+
519
+ // if (fns?.length) {
520
+ // console.log('HELLO OBSERVABLE FUNCTIONS', JSON.stringify(fns, null, 2))
521
+
522
+ // // TODO: create observables for these fns and combine with below
523
+ // return new Observable(this.client, { $db: op.db, data: queryObj })
524
+ // }
525
+
526
+ // return new Observable(this.client, { $db: op.db, data: queryObj })
527
+ // }
528
+
529
+ // op
530
+
531
+ const subId = useMemo(() => {
532
+ // fn?
533
+ return generateSubscriptionId(queryObj)
534
+ }, [queryObj])
535
+
536
+ const clientKey =
537
+ typeof selector === 'string' ? selector : genOptsId(selector)
538
+
539
+ if (client) {
540
+ const subKey = clientKey + subId
541
+
542
+ useEffect(() => {
543
+ if (!configState) {
544
+ return
545
+ }
546
+ updateMeta(subKey, true, false)
547
+ // dispatch({ error: null, loading: true, data: {} })
548
+ const [, subscriberId] = addSubscriber(
549
+ client.client,
550
+ queryObj,
551
+ (d, checksum) => {
552
+ // updateMeta(subKey, false, false)
553
+
554
+ console.info(r.current.checksum)
555
+
556
+ if (r.current.checksum !== checksum) {
557
+ r.current.checksum = checksum
558
+ dispatch({ data: d, checksum })
559
+ }
560
+ },
561
+ (err) => {
562
+ if (err) {
563
+ console.error(err)
564
+ // updateMeta(subKey, false, err)
565
+ dispatch({ error: err, loading: false })
566
+ }
567
+ },
568
+ (err) => {
569
+ console.error(err)
570
+ // updateMeta(subKey, false, err)
571
+ dispatch({ error: err })
572
+ },
573
+ subId
574
+ )
575
+ return () => {
576
+ // updateMeta(subKey, false, false)
577
+ removeSubscriber(client.client, subId, subscriberId)
578
+ }
579
+ }, [subId, clientKey, configState])
580
+ } else {
581
+ useEffect(stubFn, [null, null])
582
+ }
583
+ } else {
584
+ useMemo(stubFn, [query])
585
+ useEffect(stubFn, [null, null, null])
586
+ }
587
+ } else {
588
+ useClient(clientSelector)
589
+ useState(null)
590
+ useEffect(stubFn, [null])
591
+
592
+ useMemo(stubFn, [query])
593
+
594
+ useEffect(stubFn, [null, null, null])
595
+ }
596
+
597
+ return result
598
+ }
599
+
439
600
  function stubFn() {}