@based/react 2.5.2 → 3.0.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/README.md +49 -25
- package/dist/clients.js +2 -1
- package/dist/clients.js.map +1 -1
- package/dist/components/InfiniteList/index.d.ts +11 -0
- package/dist/components/InfiniteList/index.js +160 -0
- package/dist/components/InfiniteList/index.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +8 -6
- package/src/clients.ts +1 -0
- package/src/components/InfiniteList/index.tsx +182 -0
- package/src/index.ts +9 -3
package/README.md
CHANGED
|
@@ -1,40 +1,64 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @based/react
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
React hooks for the based data platform
|
|
4
|
+
|
|
5
|
+
> [Example react project here](https://github.com/atelier-saulx/based-react-sample)
|
|
6
|
+
|
|
7
|
+
> Read more about [based](https://github.com/atelier-saulx/based/blob/main/packages/client/README.md)
|
|
5
8
|
|
|
6
9
|
---
|
|
7
10
|
|
|
8
|
-
|
|
11
|
+
```js
|
|
12
|
+
import based from "@based/client"
|
|
13
|
+
import { Provider, useData, useClient } from "@based/react"
|
|
14
|
+
import React from "react"
|
|
15
|
+
import ReactDom from "react-dom"
|
|
9
16
|
|
|
10
|
-
|
|
11
|
-
const unsubscribe = await b.subscribe({
|
|
12
|
-
$id: 'sp1',
|
|
13
|
-
title: true
|
|
14
|
-
}, (data) => {
|
|
17
|
+
const client = based({ env: "prod", project: "someproject", org: "a-org" })
|
|
15
18
|
|
|
16
|
-
|
|
19
|
+
const Things = () => {
|
|
20
|
+
const client = useClient()
|
|
17
21
|
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
// automatically observes data when components get rendered
|
|
23
|
+
const { data, loading, error } = useData({
|
|
24
|
+
things: {
|
|
25
|
+
id: true,
|
|
26
|
+
name: true,
|
|
27
|
+
$list: true,
|
|
28
|
+
},
|
|
29
|
+
})
|
|
20
30
|
|
|
21
|
-
|
|
31
|
+
if (loading) {
|
|
32
|
+
return <div>loading...</div>
|
|
33
|
+
}
|
|
22
34
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
|
|
35
|
+
return (
|
|
36
|
+
<div>
|
|
37
|
+
{data.things.map((thing) => (
|
|
38
|
+
<div
|
|
39
|
+
key={thing.id}
|
|
40
|
+
onClick={(e) => {
|
|
41
|
+
client.set({ $id: thing.id, name: "Some random name!" })
|
|
42
|
+
}}
|
|
43
|
+
>
|
|
44
|
+
{thing.name}
|
|
45
|
+
</div>
|
|
46
|
+
))}
|
|
47
|
+
</div>
|
|
48
|
+
)
|
|
49
|
+
}
|
|
29
50
|
|
|
30
|
-
|
|
51
|
+
const App = () => {
|
|
52
|
+
return (
|
|
53
|
+
<Provider client={client}>
|
|
54
|
+
<Things />
|
|
55
|
+
</Provider>
|
|
56
|
+
)
|
|
57
|
+
}
|
|
31
58
|
|
|
59
|
+
ReactDom.render(<App />, document.body)
|
|
32
60
|
```
|
|
33
|
-
|
|
34
|
-
$id: 'sp1',
|
|
35
|
-
title: 'Yes, the best'
|
|
36
|
-
})
|
|
37
|
-
```
|
|
61
|
+
|
|
38
62
|
|
|
39
63
|
---
|
|
40
64
|
|
package/dist/clients.js
CHANGED
|
@@ -35,7 +35,8 @@ exports.BasedContext = (0, react_1.createContext)({
|
|
|
35
35
|
});
|
|
36
36
|
const defaultCreateClient = (selector) => {
|
|
37
37
|
if (typeof selector === 'object') {
|
|
38
|
-
if (process
|
|
38
|
+
if (typeof process !== 'undefined' &&
|
|
39
|
+
process.env.CLUSTER &&
|
|
39
40
|
process.env.CLUSTER.startsWith('local') &&
|
|
40
41
|
!selector.cluster) {
|
|
41
42
|
selector.cluster = process.env.CLUSTER;
|
package/dist/clients.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clients.js","sourceRoot":"","sources":["../src/clients.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAOc;AAEd,wDAAuD;AAEvD,2CAAuC;AAMvC,MAAM,kBAAkB,GAAoB,IAAI,GAAG,EAAE,CAAA;AAUxC,QAAA,YAAY,GAAG,IAAA,qBAAa,EAAmB;IAC1D,OAAO,EAAE,EAAE;IACX,2BAA2B;IAC3B,YAAY,EAAE,CAAC,GAAG,IAAS,EAAE,EAAE,GAAE,CAAC;CACnC,CAAC,CAAA;AAEK,MAAM,mBAAmB,GAAiB,CAAC,QAAQ,EAAE,EAAE;IAC5D,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;QAChC,IACE,OAAO,CAAC,GAAG,CAAC,OAAO;YACnB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;YACvC,CAAC,QAAQ,CAAC,OAAO,EACjB;YACA,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAA;SACvC;QACD,OAAO,IAAA,gBAAK,EAAC,QAAQ,CAAC,CAAA;KACvB;SAAM;QACL,UAAU;QACV,OAAO,CAAC,KAAK,CAAC,4BAA4B,GAAG,QAAQ,CAAC,CAAA;KACvD;AACH,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"clients.js","sourceRoot":"","sources":["../src/clients.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare function InfiniteList({ query, delay, itemSize, height, limit, treshold, target, ...props }: {
|
|
3
|
+
[x: string]: any;
|
|
4
|
+
query: any;
|
|
5
|
+
delay?: number;
|
|
6
|
+
itemSize?: number;
|
|
7
|
+
height?: number;
|
|
8
|
+
limit?: number;
|
|
9
|
+
treshold?: number;
|
|
10
|
+
target?: string;
|
|
11
|
+
}): JSX.Element;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.InfiniteList = void 0;
|
|
27
|
+
const client_1 = require("@based/client");
|
|
28
|
+
const react_1 = __importStar(require("react"));
|
|
29
|
+
const react_window_1 = require("react-window");
|
|
30
|
+
const __1 = require("../..");
|
|
31
|
+
const addScrollSub = (client, subId, payload, offset, current, setChecksum) => {
|
|
32
|
+
const [, subscriberId] = (0, client_1.addSubscriber)(client.client, payload, ({ items }, checksum) => {
|
|
33
|
+
for (let i = 0; i < items.length; i++) {
|
|
34
|
+
current.items[i + offset] = items[i];
|
|
35
|
+
}
|
|
36
|
+
setChecksum(`${offset}-${checksum}`);
|
|
37
|
+
}, (err) => err && console.error(err), console.error, subId);
|
|
38
|
+
return subscriberId;
|
|
39
|
+
};
|
|
40
|
+
function InfiniteList({ query, delay = 100, itemSize = 50, height = 400, limit = Math.ceil(height / itemSize), treshold = 0, target = 'root', ...props }) {
|
|
41
|
+
const blockHeight = itemSize * limit;
|
|
42
|
+
const client = (0, __1.useClient)();
|
|
43
|
+
const [offset, setOffset] = (0, react_1.useState)(0);
|
|
44
|
+
const [blocks, setBlocks] = (0, react_1.useState)(() => {
|
|
45
|
+
let blocks = Math.ceil(height / blockHeight);
|
|
46
|
+
if (treshold) {
|
|
47
|
+
blocks += Math.ceil((height / itemSize + treshold - blocks * limit) / limit);
|
|
48
|
+
}
|
|
49
|
+
return blocks;
|
|
50
|
+
});
|
|
51
|
+
const [, setChecksum] = (0, react_1.useState)();
|
|
52
|
+
const { current } = (0, react_1.useRef)({
|
|
53
|
+
offset,
|
|
54
|
+
blocks,
|
|
55
|
+
scroll: 0,
|
|
56
|
+
items: [],
|
|
57
|
+
timer: null,
|
|
58
|
+
subs: {},
|
|
59
|
+
});
|
|
60
|
+
const { data: { itemCount }, } = (0, __1.useData)({
|
|
61
|
+
itemCount: {
|
|
62
|
+
$aggregate: {
|
|
63
|
+
$function: 'count',
|
|
64
|
+
...query().$list.$find,
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
(0, react_1.useEffect)(() => {
|
|
69
|
+
if (client) {
|
|
70
|
+
return () => {
|
|
71
|
+
const { subs } = current;
|
|
72
|
+
current.subs = {};
|
|
73
|
+
setTimeout(() => {
|
|
74
|
+
for (const subId in subs) {
|
|
75
|
+
const subscriberId = current.subs[subId];
|
|
76
|
+
(0, client_1.removeSubscriber)(client.client, Number(subId), subscriberId);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}, [client, current]);
|
|
82
|
+
(0, react_1.useEffect)(() => {
|
|
83
|
+
if (client) {
|
|
84
|
+
const subs = {};
|
|
85
|
+
let i = blocks;
|
|
86
|
+
while (i--) {
|
|
87
|
+
const start = offset + limit * i;
|
|
88
|
+
const payload = {
|
|
89
|
+
$id: target,
|
|
90
|
+
items: query(start, limit),
|
|
91
|
+
};
|
|
92
|
+
const subId = (0, client_1.generateSubscriptionId)(payload);
|
|
93
|
+
subs[subId] =
|
|
94
|
+
current.subs[subId] ||
|
|
95
|
+
addScrollSub(client, subId, payload, start, current, setChecksum);
|
|
96
|
+
}
|
|
97
|
+
for (const subId in current.subs) {
|
|
98
|
+
if (!(subId in subs)) {
|
|
99
|
+
const subscriberId = current.subs[subId];
|
|
100
|
+
(0, client_1.removeSubscriber)(client.client, Number(subId), subscriberId);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
current.subs = subs;
|
|
104
|
+
}
|
|
105
|
+
}, [target, client, offset, blocks, query, current]); // dont include limit
|
|
106
|
+
(0, react_1.useEffect)(update, [
|
|
107
|
+
blockHeight,
|
|
108
|
+
delay,
|
|
109
|
+
height,
|
|
110
|
+
itemSize,
|
|
111
|
+
current,
|
|
112
|
+
limit,
|
|
113
|
+
treshold,
|
|
114
|
+
]);
|
|
115
|
+
if (!itemCount || !current.items.length) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
return (react_1.default.createElement(react_window_1.FixedSizeList, { ...props, height: height, itemSize: itemSize, itemData: current.items, itemCount: itemCount, onScroll: ({ scrollOffset }) => {
|
|
119
|
+
current.scroll = scrollOffset;
|
|
120
|
+
update();
|
|
121
|
+
} }));
|
|
122
|
+
function update() {
|
|
123
|
+
const start = Math.max(0, current.scroll / itemSize - treshold);
|
|
124
|
+
const end = (current.scroll + height) / itemSize;
|
|
125
|
+
const newOffset = start - (start % limit);
|
|
126
|
+
let newBlocks = Math.ceil(height / blockHeight + (current.scroll % blockHeight) / blockHeight);
|
|
127
|
+
if (treshold) {
|
|
128
|
+
const newLength = newOffset + limit * newBlocks;
|
|
129
|
+
newBlocks += Math.max(0, Math.ceil((end + treshold - newLength) / limit));
|
|
130
|
+
}
|
|
131
|
+
if (newOffset !== current.offset || newBlocks !== current.blocks) {
|
|
132
|
+
current.offset = newOffset;
|
|
133
|
+
current.blocks = newBlocks;
|
|
134
|
+
const set = () => {
|
|
135
|
+
setOffset(current.offset);
|
|
136
|
+
setBlocks(current.blocks);
|
|
137
|
+
};
|
|
138
|
+
if (current.timer) {
|
|
139
|
+
clearTimeout(current.timer);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
set();
|
|
143
|
+
}
|
|
144
|
+
current.timer = setTimeout(() => {
|
|
145
|
+
current.timer = null;
|
|
146
|
+
set();
|
|
147
|
+
}, delay);
|
|
148
|
+
}
|
|
149
|
+
else if (current.timer) {
|
|
150
|
+
clearTimeout(current.timer);
|
|
151
|
+
current.timer = setTimeout(() => {
|
|
152
|
+
current.timer = null;
|
|
153
|
+
setOffset(current.offset);
|
|
154
|
+
setBlocks(current.blocks);
|
|
155
|
+
}, delay);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
exports.InfiniteList = InfiniteList;
|
|
160
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/InfiniteList/index.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,9 +3,13 @@ import { Loading, Data } from './types';
|
|
|
3
3
|
export * from './meta';
|
|
4
4
|
export * from './clients';
|
|
5
5
|
export * from './gql';
|
|
6
|
+
export { InfiniteList } from './components/InfiniteList';
|
|
6
7
|
export declare function useAuth(clientSelector?: string | (BasedOpts & {
|
|
7
8
|
key?: string;
|
|
8
|
-
})):
|
|
9
|
+
})): {
|
|
10
|
+
id: string | false;
|
|
11
|
+
token: string;
|
|
12
|
+
} | false;
|
|
9
13
|
export declare function useSchema(name?: string | null | false, clientSelector?: string | (BasedOpts & {
|
|
10
14
|
key?: string;
|
|
11
15
|
})): {
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var me=Object.create;var F=Object.defineProperty,ge=Object.defineProperties,pe=Object.getOwnPropertyDescriptor,be=Object.getOwnPropertyDescriptors,ke=Object.getOwnPropertyNames,P=Object.getOwnPropertySymbols,ye=Object.getPrototypeOf,Z=Object.prototype.hasOwnProperty,se=Object.prototype.propertyIsEnumerable;var ne=(e,t,r)=>t in e?F(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Q=(e,t)=>{for(var r in t||(t={}))Z.call(t,r)&&ne(e,r,t[r]);if(P)for(var r of P(t))se.call(t,r)&&ne(e,r,t[r]);return e},oe=(e,t)=>ge(e,be(t));var ie=(e,t)=>{var r={};for(var n in e)Z.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&P)for(var n of P(e))t.indexOf(n)<0&&se.call(e,n)&&(r[n]=e[n]);return r};var he=(e,t)=>{for(var r in t)F(e,r,{get:t[r],enumerable:!0})},ae=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of ke(t))!Z.call(e,s)&&s!==r&&F(e,s,{get:()=>t[s],enumerable:!(n=pe(t,s))||n.enumerable});return e};var z=(e,t,r)=>(r=e!=null?me(ye(e)):{},ae(t||!e||!e.__esModule?F(r,"default",{value:e,enumerable:!0}):r,e)),Ce=e=>ae(F({},"__esModule",{value:!0}),e);var $e={};he($e,{BasedContext:()=>W,InfiniteList:()=>de,Provider:()=>xe,defaultCreateClient:()=>ce,updateMeta:()=>C,useAnalytics:()=>Re,useAuth:()=>ve,useBasedContext:()=>ue,useClient:()=>B,useClients:()=>Be,useData:()=>Y,useError:()=>Ee,useLoading:()=>Le,useQuery:()=>Ie,useSchema:()=>De,useTrack:()=>Te});module.exports=Ce($e);var g=require("react"),v=require("@based/client");function N(e,t){return t.error&&(e.error=t.error),t.data&&(e.checksum=t.checksum||0,e.data=t.data,e.loading=!1,e.error&&delete e.error),t.merge&&(e.checksum=t.checksum||0,e.data?Object.assign(e.data,t.merge):e.data=t.merge,e.loading=!1,e.error&&delete e.error),t.loading&&(e.loading=t.loading),Q({},e)}var $=e=>{if(!!e)return e.key?e.key:`${e.env}_${e.project}_${e.org}_${e.cluster||""}_${e.name||""}`};var E=z(require("react")),V=z(require("@based/client"));var K=new Set,W=(0,E.createContext)({clients:{},removeClient:(...e)=>{}}),ce=e=>{if(typeof e=="object")return typeof process!="undefined"&&process.env.CLUSTER&&process.env.CLUSTER.startsWith("local")&&!e.cluster&&(e.cluster=process.env.CLUSTER),(0,V.default)(e);console.error("Cannot create client from "+e)},xe=({client:e,children:t,clients:r,createClient:n})=>(!r&&e?r={default:e}:r&&e&&(r.default=e),E.default.createElement(W.Provider,{value:{clients:r,createClient:n||ce,removeClient:o=>{if(o instanceof V.Based){for(let m in r)if(r[m]===o){o=m;break}if(typeof o!="string"){console.error("Cannot find client to remove from ctx",o);return}}else typeof o!="string"&&(o=$(o));r[o]&&(r[o].disconnect(),delete r[o],K.forEach(m=>m()))}}},t)),ue=()=>(0,E.useContext)(W);function Oe(e){return e+1}var Be=()=>{let e=ue(),[,t]=(0,E.useReducer)(Oe,0);return(0,E.useEffect)(()=>{let r,n=()=>{r=setTimeout(t,0)};return K.add(n),()=>{K.delete(n),clearTimeout(r)}},[]),Object.values(e.clients)},B=(e="default")=>{let t=(0,E.useContext)(W);if(typeof e=="object"&&!(e.env&&e.project&&e.org))return;let r;typeof e=="string"?r=e:r=e.key||$(e);let n=t.clients[r];return!n&&t.createClient&&(n=t.createClient(e),n&&(t.clients[r]=n,K.forEach(s=>s()))),n};var A=require("react"),j={},te=new Set,ee=new Set,re=new Set,G=!1,J="",H=0,q=H+J;function C(e,t,r){r?(J=r,e in j?j[e]=r:(j[e]=r,H++)):e in j&&(H--,delete j[e]);let n=H+J;n!==q&&(q=n,te.forEach(o=>o(q))),t?ee.add(e):ee.delete(e);let s=!!ee.size;s!==G&&(G=s,re.forEach(o=>o(G)))}function Le(){let[,e]=(0,A.useState)(G);return re.add(e),(0,A.useEffect)(()=>()=>{re.delete(e)},[]),{loading:G}}function Ee(){let[,e]=(0,A.useState)(q);return te.add(e),(0,A.useEffect)(()=>()=>{te.delete(e)},[]),{error:H?J:null,errors:Object.values(j)}}var l=require("react"),x=require("@based/client");var X=require("@saulx/hash"),le=(0,x.generateSubscriptionId)({$subscribe_schema:"default"});function Ie(e,t={},r){let[n,s]=(0,l.useReducer)(N,{loading:!0,data:{},checksum:0}),o=(0,l.useRef)({checksum:0,fns:{}}),m=r||"default",a=B(m);if(e){let[p,y]=(0,l.useState)(0);if((0,l.useEffect)(()=>{let[,c]=(0,x.addSubscriber)(a.client,{$subscribe_schema:"default"},(u,f)=>{a.client.configuration||(a.client.configuration={dbs:[],schema:{},functions:{}}),a.client.configuration.schema.default=u,y(f)},u=>{u&&console.error(u)},u=>{console.error(u)},le);return()=>{(0,x.removeSubscriber)(a.client,le,c)}},[]),p){let c;typeof e=="string"?c=a.gql(e):c=e,c=(0,x.handleGraphqlVariables)(c,c,t);let u={},f={};for(let h in c.ops){if(c.ops[h].fnObserve){let{name:i,payload:d}=c.ops[h].fnObserve;u[h]={name:i,payload:d,key:h};continue}f[h]=c.ops[h].get}let w=(0,l.useMemo)(()=>(0,X.hashObjectIgnoreKeyOrder)(u),[u]),D=(0,l.useMemo)(()=>(0,x.generateSubscriptionId)(f),[f]),_=typeof m=="string"?m:$(m);if(a){let h=_+D;(0,l.useEffect)(()=>{let i=[];for(let d in u)i.push((0,x.addSubscriber)(a.client,u[d].payload,(b,k)=>{C(h,!1,!1),o.current.fns[d]!==k&&(o.current.fns[d]=k,s({merge:{[d]:b},checksum:(0,X.hashObjectIgnoreKeyOrder)(o.current)}))},b=>{b&&(console.error(b),s({error:b,loading:!1}))},b=>{console.error(b),C(h,!1,b),s({error:b})},void 0,u[d].name));return()=>{for(let[d,b]of i)(0,x.removeSubscriber)(a.client,d,b)}},[w]),(0,l.useEffect)(()=>{if(!p)return;C(h,!0,!1);let[,i]=(0,x.addSubscriber)(a.client,f,(d,b)=>{C(h,!1,!1),o.current.checksum!==b&&(o.current.checksum=b,s({merge:d,checksum:(0,X.hashObjectIgnoreKeyOrder)(o.current)}))},d=>{d&&(console.error(d),C(h,!1,d),s({error:d,loading:!1}))},d=>{console.error(d),C(h,!1,d),s({error:d})},D);return()=>{C(h,!1,!1),(0,x.removeSubscriber)(a.client,D,i)}},[D,_,p])}else(0,l.useEffect)(I,[null,null])}else(0,l.useMemo)(I,[null]),(0,l.useMemo)(I,[null]),(0,l.useEffect)(I,[null]),(0,l.useEffect)(I,[null,null,null])}else(0,l.useState)(null),(0,l.useEffect)(I,[null]),(0,l.useMemo)(I,[null]),(0,l.useMemo)(I,[null]),(0,l.useEffect)(I,[null]),(0,l.useEffect)(I,[null,null,null]);return n}function I(){}var M=require("@based/client"),L=z(require("react")),fe=require("react-window");var Se=(e,t,r,n,s,o)=>{let[,m]=(0,M.addSubscriber)(e.client,r,({items:a},p)=>{for(let y=0;y<a.length;y++)s.items[y+n]=a[y];o(`${n}-${p}`)},a=>a&&console.error(a),console.error,t);return m};function de(p){var y=p,{query:e,delay:t=100,itemSize:r=50,height:n=400,limit:s=Math.ceil(n/r),treshold:o=0,target:m="root"}=y,a=ie(y,["query","delay","itemSize","height","limit","treshold","target"]);let c=r*s,u=B(),[f,w]=(0,L.useState)(0),[D,_]=(0,L.useState)(()=>{let k=Math.ceil(n/c);return o&&(k+=Math.ceil((n/r+o-k*s)/s)),k}),[,h]=(0,L.useState)(),{current:i}=(0,L.useRef)({offset:f,blocks:D,scroll:0,items:[],timer:null,subs:{}}),{data:{itemCount:d}}=Y({itemCount:{$aggregate:Q({$function:"count"},e().$list.$find)}});if((0,L.useEffect)(()=>{if(u)return()=>{let{subs:k}=i;i.subs={},setTimeout(()=>{for(let R in k){let O=i.subs[R];(0,M.removeSubscriber)(u.client,Number(R),O)}})}},[u,i]),(0,L.useEffect)(()=>{if(u){let k={},R=D;for(;R--;){let O=f+s*R,S={$id:m,items:e(O,s)},T=(0,M.generateSubscriptionId)(S);k[T]=i.subs[T]||Se(u,T,S,O,i,h)}for(let O in i.subs)if(!(O in k)){let S=i.subs[O];(0,M.removeSubscriber)(u.client,Number(O),S)}i.subs=k}},[m,u,f,D,e,i]),(0,L.useEffect)(b,[c,t,n,r,i,s,o]),!d||!i.items.length)return null;return L.default.createElement(fe.FixedSizeList,oe(Q({},a),{height:n,itemSize:r,itemData:i.items,itemCount:d,onScroll:({scrollOffset:k})=>{i.scroll=k,b()}}));function b(){let k=Math.max(0,i.scroll/r-o),R=(i.scroll+n)/r,O=k-k%s,S=Math.ceil(n/c+i.scroll%c/c);if(o){let T=O+s*S;S+=Math.max(0,Math.ceil((R+o-T)/s))}if(O!==i.offset||S!==i.blocks){i.offset=O,i.blocks=S;let T=()=>{w(i.offset),_(i.blocks)};i.timer?clearTimeout(i.timer):T(),i.timer=setTimeout(()=>{i.timer=null,T()},t)}else i.timer&&(clearTimeout(i.timer),i.timer=setTimeout(()=>{i.timer=null,w(i.offset),_(i.blocks)},t))}}function ve(e){let t=B(e),[r,n]=(0,g.useState)(!1),[s,o]=(0,g.useState)("");return(0,g.useEffect)(()=>{let m=()=>{o(t.client.user),n(t.getToken())};return t.on("auth",m),()=>{t.removeListener("auth",m)}},[]),r?{token:r,id:s}:!1}function De(e="default",t){let r=Y(e?{$subscribe_schema:e}:null,t);return{loading:r.loading,error:r.error,schema:r.data}}function Te(e,t,r){if(e){let s=B(r||"default"),o=(0,g.useMemo)(()=>(0,v.generateSubscriptionId)(t,e),[e,t]);(0,g.useEffect)(()=>(s.track(e,t),()=>{s.untrack(e,t)}),[o])}else B(r),(0,g.useMemo)(()=>{},[]),(0,g.useEffect)(U,[null,null])}function Y(e,t,r){let[n,s]=(0,g.useReducer)(N,{loading:!0,data:{},checksum:0});if(e){let o=(0,g.useMemo)(()=>(0,v.generateSubscriptionId)(typeof e=="string"?[e,t]:e),[t,e]),m=typeof e=="string",a=r||(m?"default":t),p=B(a),y=typeof a=="string"?a:$(a);if(p){let c=y+o;(0,g.useEffect)(()=>{C(c,!0,!1),s({error:null,loading:!0,data:{}});let[,u]=(0,v.addSubscriber)(p.client,m?t:e,(f,w)=>{C(c,!1,!1),s({data:f,checksum:w})},f=>{f&&(console.error(f),C(c,!1,f),s({error:f,loading:!1}))},f=>{console.error(f),C(c,!1,f),s({error:f})},o,typeof e=="string"?e:void 0);return()=>{C(c,!1,!1),(0,v.removeSubscriber)(p.client,o,u)}},[o,y])}else(0,g.useEffect)(U,[null,null])}else(0,g.useMemo)(U,[t,e]),B(r),(0,g.useEffect)(U,[null,null]);return n}function Re(e,t){let[r,n]=(0,g.useReducer)(N,{loading:!0,data:{},checksum:0}),s,o,a=B(t||"default");return a&&e?(0,g.useEffect)(()=>(n({error:null,loading:!0,data:{}}),(0,v.addSubscriber)(a.client,e,(p,y)=>{n({data:p,checksum:y})},(p,y,c,u,f)=>{s=y,o=c,(p||f)&&(console.error(p),n({error:p,loading:!1}))},p=>{console.error(p),n({error:p})},void 0,"analytics"),()=>{(0,v.removeSubscriber)(a.client,s,o)}),[]):(0,g.useEffect)(U,[]),r}function U(){}0&&(module.exports={BasedContext,InfiniteList,Provider,defaultCreateClient,updateMeta,useAnalytics,useAuth,useBasedContext,useClient,useClients,useData,useError,useLoading,useQuery,useSchema,useTrack});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iCAAgE;AAEhE,0CASsB;AAEtB,uCAAyC;AAIzC,2CAAuC;AAEvC,uCAAqC;AAErC,iCAAmC;AAEnC,yCAAsB;AACtB,4CAAyB;AACzB,wCAAqB;AAErB,SAAgB,OAAO,CACrB,cAAwD;IAExD,MAAM,MAAM,GAAG,IAAA,mBAAS,EAAC,cAAc,CAAC,CAAA;IACxC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAiB,KAAK,CAAC,CAAA;IACzD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@based/react",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"source": "src/index.tsx",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -12,17 +12,19 @@
|
|
|
12
12
|
},
|
|
13
13
|
"sideEffects": false,
|
|
14
14
|
"peerDependencies": {
|
|
15
|
-
"
|
|
16
|
-
"
|
|
15
|
+
"@based/client": "^3.0.0",
|
|
16
|
+
"react": "17||18||16"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@saulx/hash": "^1.1.0"
|
|
19
|
+
"@saulx/hash": "^1.1.0",
|
|
20
|
+
"react-window": "^1.8.7"
|
|
20
21
|
},
|
|
21
22
|
"devDependencies": {
|
|
23
|
+
"@based/client": "^3.0.0",
|
|
22
24
|
"@types/react": "^17.0.14",
|
|
23
25
|
"esbuild": "^0.14.29",
|
|
26
|
+
"rimraf": "^3.0.2",
|
|
24
27
|
"ts-node": "^10.1.0",
|
|
25
|
-
"typescript": "^4.3.5"
|
|
26
|
-
"rimraf": "^3.0.2"
|
|
28
|
+
"typescript": "^4.3.5"
|
|
27
29
|
}
|
|
28
30
|
}
|
package/src/clients.ts
CHANGED
|
@@ -34,6 +34,7 @@ export const BasedContext = createContext<BasedContextType>({
|
|
|
34
34
|
export const defaultCreateClient: CreateClient = (selector) => {
|
|
35
35
|
if (typeof selector === 'object') {
|
|
36
36
|
if (
|
|
37
|
+
typeof process !== 'undefined' &&
|
|
37
38
|
process.env.CLUSTER &&
|
|
38
39
|
process.env.CLUSTER.startsWith('local') &&
|
|
39
40
|
!selector.cluster
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import {
|
|
2
|
+
addSubscriber,
|
|
3
|
+
removeSubscriber,
|
|
4
|
+
generateSubscriptionId,
|
|
5
|
+
} from '@based/client'
|
|
6
|
+
import React, { useRef, useState, useEffect } from 'react'
|
|
7
|
+
import { FixedSizeList as List } from 'react-window'
|
|
8
|
+
import { useData, useClient } from '../..'
|
|
9
|
+
|
|
10
|
+
const addScrollSub = (client, subId, payload, offset, current, setChecksum) => {
|
|
11
|
+
const [, subscriberId] = addSubscriber(
|
|
12
|
+
client.client,
|
|
13
|
+
payload,
|
|
14
|
+
({ items }, checksum) => {
|
|
15
|
+
for (let i = 0; i < items.length; i++) {
|
|
16
|
+
current.items[i + offset] = items[i]
|
|
17
|
+
}
|
|
18
|
+
setChecksum(`${offset}-${checksum}`)
|
|
19
|
+
},
|
|
20
|
+
(err) => err && console.error(err),
|
|
21
|
+
console.error,
|
|
22
|
+
subId
|
|
23
|
+
)
|
|
24
|
+
return subscriberId
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function InfiniteList({
|
|
28
|
+
query,
|
|
29
|
+
delay = 100,
|
|
30
|
+
itemSize = 50,
|
|
31
|
+
height = 400,
|
|
32
|
+
limit = Math.ceil(height / itemSize),
|
|
33
|
+
treshold = 0,
|
|
34
|
+
target = 'root',
|
|
35
|
+
...props
|
|
36
|
+
}) {
|
|
37
|
+
const blockHeight = itemSize * limit
|
|
38
|
+
const client = useClient()
|
|
39
|
+
const [offset, setOffset] = useState(0)
|
|
40
|
+
const [blocks, setBlocks] = useState(() => {
|
|
41
|
+
let blocks = Math.ceil(height / blockHeight)
|
|
42
|
+
if (treshold) {
|
|
43
|
+
blocks += Math.ceil(
|
|
44
|
+
(height / itemSize + treshold - blocks * limit) / limit
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
return blocks
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
const [, setChecksum] = useState()
|
|
51
|
+
const { current } = useRef({
|
|
52
|
+
offset,
|
|
53
|
+
blocks,
|
|
54
|
+
scroll: 0,
|
|
55
|
+
items: [],
|
|
56
|
+
timer: null,
|
|
57
|
+
subs: {},
|
|
58
|
+
})
|
|
59
|
+
const {
|
|
60
|
+
data: { itemCount },
|
|
61
|
+
} = useData({
|
|
62
|
+
itemCount: {
|
|
63
|
+
$aggregate: {
|
|
64
|
+
$function: 'count',
|
|
65
|
+
...query().$list.$find,
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
if (client) {
|
|
72
|
+
return () => {
|
|
73
|
+
const { subs } = current
|
|
74
|
+
current.subs = {}
|
|
75
|
+
setTimeout(() => {
|
|
76
|
+
for (const subId in subs) {
|
|
77
|
+
const subscriberId = current.subs[subId]
|
|
78
|
+
removeSubscriber(client.client, Number(subId), subscriberId)
|
|
79
|
+
}
|
|
80
|
+
})
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}, [client, current])
|
|
84
|
+
|
|
85
|
+
useEffect(() => {
|
|
86
|
+
if (client) {
|
|
87
|
+
const subs = {}
|
|
88
|
+
let i = blocks
|
|
89
|
+
|
|
90
|
+
while (i--) {
|
|
91
|
+
const start = offset + limit * i
|
|
92
|
+
const payload = {
|
|
93
|
+
$id: target,
|
|
94
|
+
items: query(start, limit),
|
|
95
|
+
}
|
|
96
|
+
const subId = generateSubscriptionId(payload)
|
|
97
|
+
subs[subId] =
|
|
98
|
+
current.subs[subId] ||
|
|
99
|
+
addScrollSub(client, subId, payload, start, current, setChecksum)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
for (const subId in current.subs) {
|
|
103
|
+
if (!(subId in subs)) {
|
|
104
|
+
const subscriberId = current.subs[subId]
|
|
105
|
+
removeSubscriber(client.client, Number(subId), subscriberId)
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
current.subs = subs
|
|
110
|
+
}
|
|
111
|
+
}, [target, client, offset, blocks, query, current]) // dont include limit
|
|
112
|
+
|
|
113
|
+
useEffect(update, [
|
|
114
|
+
blockHeight,
|
|
115
|
+
delay,
|
|
116
|
+
height,
|
|
117
|
+
itemSize,
|
|
118
|
+
current,
|
|
119
|
+
limit,
|
|
120
|
+
treshold,
|
|
121
|
+
])
|
|
122
|
+
|
|
123
|
+
if (!itemCount || !current.items.length) {
|
|
124
|
+
return null
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return (
|
|
128
|
+
<List
|
|
129
|
+
{...props}
|
|
130
|
+
height={height}
|
|
131
|
+
itemSize={itemSize}
|
|
132
|
+
itemData={current.items}
|
|
133
|
+
itemCount={itemCount}
|
|
134
|
+
onScroll={({ scrollOffset }) => {
|
|
135
|
+
current.scroll = scrollOffset
|
|
136
|
+
update()
|
|
137
|
+
}}
|
|
138
|
+
/>
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
function update() {
|
|
142
|
+
const start = Math.max(0, current.scroll / itemSize - treshold)
|
|
143
|
+
const end = (current.scroll + height) / itemSize
|
|
144
|
+
const newOffset = start - (start % limit)
|
|
145
|
+
let newBlocks = Math.ceil(
|
|
146
|
+
height / blockHeight + (current.scroll % blockHeight) / blockHeight
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
if (treshold) {
|
|
150
|
+
const newLength = newOffset + limit * newBlocks
|
|
151
|
+
newBlocks += Math.max(0, Math.ceil((end + treshold - newLength) / limit))
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (newOffset !== current.offset || newBlocks !== current.blocks) {
|
|
155
|
+
current.offset = newOffset
|
|
156
|
+
current.blocks = newBlocks
|
|
157
|
+
|
|
158
|
+
const set = () => {
|
|
159
|
+
setOffset(current.offset)
|
|
160
|
+
setBlocks(current.blocks)
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if (current.timer) {
|
|
164
|
+
clearTimeout(current.timer)
|
|
165
|
+
} else {
|
|
166
|
+
set()
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
current.timer = setTimeout(() => {
|
|
170
|
+
current.timer = null
|
|
171
|
+
set()
|
|
172
|
+
}, delay)
|
|
173
|
+
} else if (current.timer) {
|
|
174
|
+
clearTimeout(current.timer)
|
|
175
|
+
current.timer = setTimeout(() => {
|
|
176
|
+
current.timer = null
|
|
177
|
+
setOffset(current.offset)
|
|
178
|
+
setBlocks(current.blocks)
|
|
179
|
+
}, delay)
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -25,19 +25,25 @@ export * from './meta'
|
|
|
25
25
|
export * from './clients'
|
|
26
26
|
export * from './gql'
|
|
27
27
|
|
|
28
|
+
export { InfiniteList } from './components/InfiniteList'
|
|
29
|
+
|
|
28
30
|
export function useAuth(
|
|
29
31
|
clientSelector?: string | (BasedOpts & { key?: string })
|
|
30
|
-
): string | false {
|
|
32
|
+
): { id: string | false; token: string } | false {
|
|
31
33
|
const client = useClient(clientSelector)
|
|
32
34
|
const [token, setToken] = useState<false | string>(false)
|
|
35
|
+
const [id, setId] = useState<false | string>('')
|
|
33
36
|
useEffect(() => {
|
|
34
|
-
const t = () =>
|
|
37
|
+
const t = () => {
|
|
38
|
+
setId(client.client.user)
|
|
39
|
+
setToken(client.getToken())
|
|
40
|
+
}
|
|
35
41
|
client.on('auth', t)
|
|
36
42
|
return () => {
|
|
37
43
|
client.removeListener('auth', t)
|
|
38
44
|
}
|
|
39
45
|
}, [])
|
|
40
|
-
return token
|
|
46
|
+
return token ? { token, id } : false
|
|
41
47
|
}
|
|
42
48
|
|
|
43
49
|
export function useSchema(
|