stream-chat-react-native-core 7.0.1-beta.1 → 7.0.1-beta.2
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/lib/commonjs/hooks/useStateStore.js +27 -16
- package/lib/commonjs/hooks/useStateStore.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/hooks/useStateStore.js +27 -16
- package/lib/module/hooks/useStateStore.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/hooks/useStateStore.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/hooks/useStateStore.ts +42 -13
- package/src/version.json +1 -1
|
@@ -1,27 +1,38 @@
|
|
|
1
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
2
1
|
Object.defineProperty(exports, "__esModule", {
|
|
3
2
|
value: true
|
|
4
3
|
});
|
|
5
4
|
exports.useStateStore = useStateStore;
|
|
6
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
7
5
|
var _react = require("react");
|
|
6
|
+
var _shim = require("use-sync-external-store/shim");
|
|
7
|
+
var noop = function noop() {};
|
|
8
8
|
function useStateStore(store, selector) {
|
|
9
|
-
var
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
var wrappedSubscription = (0, _react.useCallback)(function (onStoreChange) {
|
|
10
|
+
var unsubscribe = store == null ? void 0 : store.subscribeWithSelector(selector, onStoreChange);
|
|
11
|
+
return unsubscribe != null ? unsubscribe : noop;
|
|
12
|
+
}, [store, selector]);
|
|
13
|
+
var wrappedSnapshot = (0, _react.useMemo)(function () {
|
|
14
|
+
var cachedTuple;
|
|
15
|
+
return function () {
|
|
16
|
+
var currentValue = store == null ? void 0 : store.getLatestValue();
|
|
17
|
+
if (!currentValue) return undefined;
|
|
18
|
+
if (cachedTuple && cachedTuple[0] === currentValue) {
|
|
19
|
+
return cachedTuple[1];
|
|
20
|
+
}
|
|
21
|
+
var newlySelected = selector(currentValue);
|
|
22
|
+
if (cachedTuple) {
|
|
23
|
+
var selectededAreEqualToCached = true;
|
|
24
|
+
for (var key in cachedTuple[1]) {
|
|
25
|
+
if (cachedTuple[1][key] === newlySelected[key]) continue;
|
|
26
|
+
selectededAreEqualToCached = false;
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
if (selectededAreEqualToCached) return cachedTuple[1];
|
|
12
30
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
state = _useState2[0],
|
|
17
|
-
setState = _useState2[1];
|
|
18
|
-
(0, _react.useEffect)(function () {
|
|
19
|
-
if (!store) {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
var unsubscribe = store.subscribeWithSelector(selector, setState);
|
|
23
|
-
return unsubscribe;
|
|
31
|
+
cachedTuple = [currentValue, newlySelected];
|
|
32
|
+
return cachedTuple[1];
|
|
33
|
+
};
|
|
24
34
|
}, [store, selector]);
|
|
35
|
+
var state = (0, _shim.useSyncExternalStore)(wrappedSubscription, wrappedSnapshot);
|
|
25
36
|
return state;
|
|
26
37
|
}
|
|
27
38
|
//# sourceMappingURL=useStateStore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","useStateStore","store","selector","
|
|
1
|
+
{"version":3,"names":["_react","require","_shim","noop","useStateStore","store","selector","wrappedSubscription","useCallback","onStoreChange","unsubscribe","subscribeWithSelector","wrappedSnapshot","useMemo","cachedTuple","currentValue","getLatestValue","undefined","newlySelected","selectededAreEqualToCached","key","state","useSyncExternalStore"],"sourceRoot":"../../../src","sources":["hooks/useStateStore.ts"],"mappings":";;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGA,IAAAC,KAAA,GAAAD,OAAA;AAEA,IAAME,IAAI,GAAG,SAAPA,IAAIA,CAAA,EAAS,CAAC,CAAC;AAUd,SAASC,aAAaA,CAG3BC,KAAgC,EAAEC,QAAqB,EAAE;EACzD,IAAMC,mBAAmB,GAAG,IAAAC,kBAAW,EACrC,UAACC,aAAyB,EAAK;IAC7B,IAAMC,WAAW,GAAGL,KAAK,oBAALA,KAAK,CAAEM,qBAAqB,CAACL,QAAQ,EAAEG,aAAa,CAAC;IACzE,OAAOC,WAAW,WAAXA,WAAW,GAAIP,IAAI;EAC5B,CAAC,EACD,CAACE,KAAK,EAAEC,QAAQ,CAClB,CAAC;EAED,IAAMM,eAAe,GAAG,IAAAC,cAAO,EAAC,YAAM;IACpC,IAAIC,WAAmB;IAEvB,OAAO,YAAM;MACX,IAAMC,YAAY,GAAGV,KAAK,oBAALA,KAAK,CAAEW,cAAc,CAAC,CAAC;MAE5C,IAAI,CAACD,YAAY,EAAE,OAAOE,SAAS;MAGnC,IAAIH,WAAW,IAAIA,WAAW,CAAC,CAAC,CAAC,KAAKC,YAAY,EAAE;QAClD,OAAOD,WAAW,CAAC,CAAC,CAAC;MACvB;MAEA,IAAMI,aAAa,GAAGZ,QAAQ,CAACS,YAAY,CAAC;MAG5C,IAAID,WAAW,EAAE;QACf,IAAIK,0BAA0B,GAAG,IAAI;QAErC,KAAK,IAAMC,GAAG,IAAIN,WAAW,CAAC,CAAC,CAAC,EAAE;UAChC,IAAIA,WAAW,CAAC,CAAC,CAAC,CAACM,GAAG,CAAC,KAAKF,aAAa,CAACE,GAAG,CAAC,EAAE;UAChDD,0BAA0B,GAAG,KAAK;UAClC;QACF;QAEA,IAAIA,0BAA0B,EAAE,OAAOL,WAAW,CAAC,CAAC,CAAC;MACvD;MAEAA,WAAW,GAAG,CAACC,YAAY,EAAEG,aAAa,CAAC;MAC3C,OAAOJ,WAAW,CAAC,CAAC,CAAC;IACvB,CAAC;EACH,CAAC,EAAE,CAACT,KAAK,EAAEC,QAAQ,CAAC,CAAC;EAErB,IAAMe,KAAK,GAAG,IAAAC,0BAAoB,EAACf,mBAAmB,EAAEK,eAAe,CAAC;EAExE,OAAOS,KAAK;AACd","ignoreList":[]}
|
|
@@ -1,27 +1,38 @@
|
|
|
1
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
2
1
|
Object.defineProperty(exports, "__esModule", {
|
|
3
2
|
value: true
|
|
4
3
|
});
|
|
5
4
|
exports.useStateStore = useStateStore;
|
|
6
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
7
5
|
var _react = require("react");
|
|
6
|
+
var _shim = require("use-sync-external-store/shim");
|
|
7
|
+
var noop = function noop() {};
|
|
8
8
|
function useStateStore(store, selector) {
|
|
9
|
-
var
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
var wrappedSubscription = (0, _react.useCallback)(function (onStoreChange) {
|
|
10
|
+
var unsubscribe = store == null ? void 0 : store.subscribeWithSelector(selector, onStoreChange);
|
|
11
|
+
return unsubscribe != null ? unsubscribe : noop;
|
|
12
|
+
}, [store, selector]);
|
|
13
|
+
var wrappedSnapshot = (0, _react.useMemo)(function () {
|
|
14
|
+
var cachedTuple;
|
|
15
|
+
return function () {
|
|
16
|
+
var currentValue = store == null ? void 0 : store.getLatestValue();
|
|
17
|
+
if (!currentValue) return undefined;
|
|
18
|
+
if (cachedTuple && cachedTuple[0] === currentValue) {
|
|
19
|
+
return cachedTuple[1];
|
|
20
|
+
}
|
|
21
|
+
var newlySelected = selector(currentValue);
|
|
22
|
+
if (cachedTuple) {
|
|
23
|
+
var selectededAreEqualToCached = true;
|
|
24
|
+
for (var key in cachedTuple[1]) {
|
|
25
|
+
if (cachedTuple[1][key] === newlySelected[key]) continue;
|
|
26
|
+
selectededAreEqualToCached = false;
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
if (selectededAreEqualToCached) return cachedTuple[1];
|
|
12
30
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
state = _useState2[0],
|
|
17
|
-
setState = _useState2[1];
|
|
18
|
-
(0, _react.useEffect)(function () {
|
|
19
|
-
if (!store) {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
var unsubscribe = store.subscribeWithSelector(selector, setState);
|
|
23
|
-
return unsubscribe;
|
|
31
|
+
cachedTuple = [currentValue, newlySelected];
|
|
32
|
+
return cachedTuple[1];
|
|
33
|
+
};
|
|
24
34
|
}, [store, selector]);
|
|
35
|
+
var state = (0, _shim.useSyncExternalStore)(wrappedSubscription, wrappedSnapshot);
|
|
25
36
|
return state;
|
|
26
37
|
}
|
|
27
38
|
//# sourceMappingURL=useStateStore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","useStateStore","store","selector","
|
|
1
|
+
{"version":3,"names":["_react","require","_shim","noop","useStateStore","store","selector","wrappedSubscription","useCallback","onStoreChange","unsubscribe","subscribeWithSelector","wrappedSnapshot","useMemo","cachedTuple","currentValue","getLatestValue","undefined","newlySelected","selectededAreEqualToCached","key","state","useSyncExternalStore"],"sourceRoot":"../../../src","sources":["hooks/useStateStore.ts"],"mappings":";;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGA,IAAAC,KAAA,GAAAD,OAAA;AAEA,IAAME,IAAI,GAAG,SAAPA,IAAIA,CAAA,EAAS,CAAC,CAAC;AAUd,SAASC,aAAaA,CAG3BC,KAAgC,EAAEC,QAAqB,EAAE;EACzD,IAAMC,mBAAmB,GAAG,IAAAC,kBAAW,EACrC,UAACC,aAAyB,EAAK;IAC7B,IAAMC,WAAW,GAAGL,KAAK,oBAALA,KAAK,CAAEM,qBAAqB,CAACL,QAAQ,EAAEG,aAAa,CAAC;IACzE,OAAOC,WAAW,WAAXA,WAAW,GAAIP,IAAI;EAC5B,CAAC,EACD,CAACE,KAAK,EAAEC,QAAQ,CAClB,CAAC;EAED,IAAMM,eAAe,GAAG,IAAAC,cAAO,EAAC,YAAM;IACpC,IAAIC,WAAmB;IAEvB,OAAO,YAAM;MACX,IAAMC,YAAY,GAAGV,KAAK,oBAALA,KAAK,CAAEW,cAAc,CAAC,CAAC;MAE5C,IAAI,CAACD,YAAY,EAAE,OAAOE,SAAS;MAGnC,IAAIH,WAAW,IAAIA,WAAW,CAAC,CAAC,CAAC,KAAKC,YAAY,EAAE;QAClD,OAAOD,WAAW,CAAC,CAAC,CAAC;MACvB;MAEA,IAAMI,aAAa,GAAGZ,QAAQ,CAACS,YAAY,CAAC;MAG5C,IAAID,WAAW,EAAE;QACf,IAAIK,0BAA0B,GAAG,IAAI;QAErC,KAAK,IAAMC,GAAG,IAAIN,WAAW,CAAC,CAAC,CAAC,EAAE;UAChC,IAAIA,WAAW,CAAC,CAAC,CAAC,CAACM,GAAG,CAAC,KAAKF,aAAa,CAACE,GAAG,CAAC,EAAE;UAChDD,0BAA0B,GAAG,KAAK;UAClC;QACF;QAEA,IAAIA,0BAA0B,EAAE,OAAOL,WAAW,CAAC,CAAC,CAAC;MACvD;MAEAA,WAAW,GAAG,CAACC,YAAY,EAAEG,aAAa,CAAC;MAC3C,OAAOJ,WAAW,CAAC,CAAC,CAAC;IACvB,CAAC;EACH,CAAC,EAAE,CAACT,KAAK,EAAEC,QAAQ,CAAC,CAAC;EAErB,IAAMe,KAAK,GAAG,IAAAC,0BAAoB,EAACf,mBAAmB,EAAEK,eAAe,CAAC;EAExE,OAAOS,KAAK;AACd","ignoreList":[]}
|
package/lib/module/version.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStateStore.d.ts","sourceRoot":"","sources":["../../../src/hooks/useStateStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"useStateStore.d.ts","sourceRoot":"","sources":["../../../src/hooks/useStateStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAK9C,wBAAgB,aAAa,CAC3B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EACjE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClD,wBAAgB,aAAa,CAC3B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EACjE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stream-chat-react-native-core",
|
|
3
3
|
"description": "The official React Native and Expo components for Stream Chat, a service for building chat applications",
|
|
4
|
-
"version": "7.0.1-beta.
|
|
4
|
+
"version": "7.0.1-beta.2",
|
|
5
5
|
"author": {
|
|
6
6
|
"company": "Stream.io Inc",
|
|
7
7
|
"name": "Stream.io Inc"
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useCallback, useMemo } from 'react';
|
|
2
2
|
|
|
3
3
|
import type { StateStore } from 'stream-chat';
|
|
4
|
+
import { useSyncExternalStore } from 'use-sync-external-store/shim';
|
|
5
|
+
|
|
6
|
+
const noop = () => {};
|
|
4
7
|
|
|
5
8
|
export function useStateStore<
|
|
6
9
|
T extends Record<string, unknown>,
|
|
@@ -14,22 +17,48 @@ export function useStateStore<
|
|
|
14
17
|
T extends Record<string, unknown>,
|
|
15
18
|
O extends Readonly<Record<string, unknown> | Readonly<unknown[]>>,
|
|
16
19
|
>(store: StateStore<T> | undefined, selector: (v: T) => O) {
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
const wrappedSubscription = useCallback(
|
|
21
|
+
(onStoreChange: () => void) => {
|
|
22
|
+
const unsubscribe = store?.subscribeWithSelector(selector, onStoreChange);
|
|
23
|
+
return unsubscribe ?? noop;
|
|
24
|
+
},
|
|
25
|
+
[store, selector],
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
const wrappedSnapshot = useMemo(() => {
|
|
29
|
+
let cachedTuple: [T, O];
|
|
30
|
+
|
|
31
|
+
return () => {
|
|
32
|
+
const currentValue = store?.getLatestValue();
|
|
33
|
+
|
|
34
|
+
if (!currentValue) return undefined;
|
|
23
35
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
36
|
+
// store value hasn't changed, no need to compare individual values
|
|
37
|
+
if (cachedTuple && cachedTuple[0] === currentValue) {
|
|
38
|
+
return cachedTuple[1];
|
|
39
|
+
}
|
|
28
40
|
|
|
29
|
-
|
|
41
|
+
const newlySelected = selector(currentValue);
|
|
30
42
|
|
|
31
|
-
|
|
43
|
+
// store value changed but selected values wouldn't have to, double-check selected
|
|
44
|
+
if (cachedTuple) {
|
|
45
|
+
let selectededAreEqualToCached = true;
|
|
46
|
+
|
|
47
|
+
for (const key in cachedTuple[1]) {
|
|
48
|
+
if (cachedTuple[1][key] === newlySelected[key]) continue;
|
|
49
|
+
selectededAreEqualToCached = false;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (selectededAreEqualToCached) return cachedTuple[1];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
cachedTuple = [currentValue, newlySelected];
|
|
57
|
+
return cachedTuple[1];
|
|
58
|
+
};
|
|
32
59
|
}, [store, selector]);
|
|
33
60
|
|
|
61
|
+
const state = useSyncExternalStore(wrappedSubscription, wrappedSnapshot);
|
|
62
|
+
|
|
34
63
|
return state;
|
|
35
64
|
}
|
package/src/version.json
CHANGED