@webkrafters/react-observable-context 4.0.0-alpha.1 → 4.0.0-alpha.3
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/constants.d.ts +1 -1
- package/dist/constants.js +7 -4
- package/dist/main/hooks/use-render-key-provider/index.d.ts +1 -0
- package/dist/main/hooks/use-render-key-provider/index.js +34 -0
- package/dist/main/hooks/use-state-manager/index.d.ts +1 -1
- package/dist/main/hooks/use-store/index.d.ts +1 -1
- package/dist/main/hooks/use-store/index.js +2 -2
- package/dist/main/index.d.ts +1 -1
- package/dist/main/index.js +77 -23
- package/dist/main/set-state/index.js +1 -1
- package/dist/model/accessor/index.d.ts +1 -1
- package/dist/model/accessor/index.js +66 -135
- package/dist/model/accessor-cache/index.d.ts +1 -1
- package/dist/model/accessor-cache/index.js +27 -31
- package/dist/model/atom/index.d.ts +1 -1
- package/dist/model/atom/index.js +5 -3
- package/dist/types.d.ts +1 -1
- package/package.json +114 -112
- package/dist/main/hooks/use-render-keys-manager/index.d.ts +0 -1
- package/dist/main/hooks/use-render-keys-manager/index.js +0 -34
package/dist/constants.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
/** @type {
|
|
1
|
+
/** @type {"@@STATE"} */
|
package/dist/constants.js
CHANGED
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
exports.
|
|
6
|
-
/** @type {
|
|
7
|
-
var
|
|
8
|
-
exports.
|
|
5
|
+
exports.NULL_STATE_SELECTOR = exports.FULL_STATE_SELECTOR = void 0;
|
|
6
|
+
/** @type {"@@STATE"} */
|
|
7
|
+
var FULL_STATE_SELECTOR = '@@STATE';
|
|
8
|
+
exports.FULL_STATE_SELECTOR = FULL_STATE_SELECTOR;
|
|
9
|
+
/** @type {""} */
|
|
10
|
+
var NULL_STATE_SELECTOR = '';
|
|
11
|
+
exports.NULL_STATE_SELECTOR = NULL_STATE_SELECTOR;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports["default"] = void 0;
|
|
6
|
+
var _react = require("react");
|
|
7
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
8
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
9
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
10
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
11
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
12
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
13
|
+
/**
|
|
14
|
* @type {Provider<T>}
|
|
1
15
|
* @template {State} T
|
|
2
16
|
*/
|
|
17
|
+
var getCurrKeys = function getCurrKeys(selectorMap) {
|
|
18
|
+
var currKeys = Object.values(selectorMap);
|
|
19
|
+
return currKeys.length ? Array.from(new Set(currKeys)) : [];
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
3
22
|
* @type {Provider<T>}
|
|
4
23
|
* @template {State} T
|
|
5
24
|
*/
|
|
25
|
+
var useRenderKeyProvider = function useRenderKeyProvider(selectorMap) {
|
|
26
|
+
var _useState = (0, _react.useState)(function () {
|
|
27
|
+
return getCurrKeys(selectorMap);
|
|
28
|
+
}),
|
|
29
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
30
|
+
renderKeys = _useState2[0],
|
|
31
|
+
setRenderKeys = _useState2[1];
|
|
32
|
+
var currKeys = getCurrKeys(selectorMap);
|
|
33
|
+
(renderKeys.length !== currKeys.length || renderKeys.some(function (k, i) {
|
|
34
|
+
return k !== currKeys[i];
|
|
35
|
+
})) && setRenderKeys(currKeys);
|
|
36
|
+
return renderKeys;
|
|
37
|
+
};
|
|
38
|
+
var _default = useRenderKeyProvider;
|
|
39
|
+
/**
|
|
6
40
|
* @callback Provider
|
|
7
41
|
* @param {{[selectorKey: string]: string|keyof T}} selectorMap Key:value pairs where `key` => arbitrary key given to Store.data property holding the state slices and `value` => property paths to state slices used by this component. May use `{..., state: '@@STATE'}` to indicate a desire to obtain the entire state object and assign to a `state` property of Store.data. A change in any of the referenced properties results in this component render. When using `['@@STATE']`, any change in the state object results in this component render.
|
|
8
42
|
* @returns {[string|keyof T]} Property paths
|
|
9
43
|
* @template {State} T
|
|
10
44
|
*/
|
|
45
|
+
exports["default"] = _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export default useStateManager;
|
|
2
1
|
* @param {T} initStateValue
|
|
3
2
|
* @template {State} T
|
|
4
3
|
*/
|
|
5
4
|
select: (clientId: string, ...propertyPaths?: string[]) => Readonly<import("../../../types").PartialState<T>>;
|
|
6
5
|
state: T;
|
|
7
6
|
stateWatch: Listener<T>;
|
|
8
7
|
unlink: (clientId: string) => void;
|
|
8
|
+
export default useStateManager;
|
|
9
9
|
* @param {T} initStateValue
|
|
10
10
|
* @template {State} T
|
|
11
11
|
*/
|
|
12
12
|
select: (clientId: string, ...propertyPaths?: string[]) => {
|
|
13
13
|
[propertyPaths: string]: Readonly<any>;
|
|
14
14
|
};
|
|
15
15
|
state: T;
|
|
16
16
|
stateWatch: Listener<T>;
|
|
17
17
|
unlink: (clientId: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export namespace deps {
|
|
2
1
|
export { _setState as setState };
|
|
3
2
|
export { v4 as uuid };
|
|
4
3
|
* @param {Prehooks<T>} prehooks
|
|
5
4
|
* @param {T} value
|
|
6
5
|
* @param {IStorage<T>} [storage] Closed to modification post-initialization
|
|
7
6
|
* @template {State} T
|
|
8
7
|
*/
|
|
9
8
|
getState: (clientId: string, ...propertyPaths?: string[]) => Readonly<import("../../../types").PartialState<T>>;
|
|
10
9
|
resetState: VoidFunction;
|
|
11
10
|
setState: (changes: import("../../../types").PartialState<T>) => void;
|
|
12
11
|
subscribe: (listener: import("../../../types").Listener<T>) => VoidFunction;
|
|
13
12
|
unlinkCache: (clientId: string) => void;
|
|
13
|
+
export namespace deps {
|
|
14
14
|
export { _setState as setState };
|
|
15
15
|
export { v4 as uuid };
|
|
16
16
|
* @param {Prehooks<T>} prehooks
|
|
17
17
|
* @param {T} value
|
|
18
18
|
* @param {IStorage<T>} [storage] Closed to modification post-initialization
|
|
19
19
|
* @template {State} T
|
|
20
20
|
*/
|
|
21
21
|
getState: (clientId: string, ...propertyPaths?: string[]) => {
|
|
22
22
|
[propertyPaths: string]: Readonly<any>;
|
|
23
23
|
};
|
|
24
24
|
resetState: VoidFunction;
|
|
25
25
|
setState: (changes: import("../../../types").PartialState<T>) => void;
|
|
26
26
|
subscribe: (listener: import("../../../types").Listener<T>) => VoidFunction;
|
|
27
27
|
unlinkCache: (clientId: string) => void;
|
|
@@ -53,9 +53,9 @@ var useStore = function useStore(prehooks, value, storage) {
|
|
|
53
53
|
_useState4 = _slicedToArray(_useState3, 1),
|
|
54
54
|
_storage = _useState4[0];
|
|
55
55
|
/** @type {Listener<T>} */
|
|
56
|
-
var onChange = function onChange(
|
|
56
|
+
var onChange = function onChange(changes) {
|
|
57
57
|
return listeners.forEach(function (listener) {
|
|
58
|
-
return listener(
|
|
58
|
+
return listener(changes);
|
|
59
59
|
});
|
|
60
60
|
};
|
|
61
61
|
/** @type {StoreInternal<T>["resetState"]} */
|
package/dist/main/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export class UsageError extends Error {
|
|
2
1
|
Provider: ObservableProvider<S>;
|
|
3
2
|
children?: ReactNode;
|
|
4
3
|
prehooks?: Prehooks<T>;
|
|
5
4
|
storage?: IStorage<T>;
|
|
6
5
|
value: PartialState<T>;
|
|
6
|
+
export class UsageError extends Error {
|
|
7
7
|
[selectorKey: string]: string | keyof T;
|
|
8
8
|
Provider: ObservableProvider<S>;
|
|
9
9
|
children?: ReactNode;
|
|
10
10
|
prehooks?: Prehooks<T>;
|
|
11
11
|
storage?: IStorage<T>;
|
|
12
12
|
value: PartialState<T>;
|
package/dist/main/index.js
CHANGED
|
@@ -4,10 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
});
|
|
5
5
|
exports.useContext = exports.createContext = exports.UsageError = void 0;
|
|
6
6
|
var _react = _interopRequireWildcard(require("react"));
|
|
7
|
-
var _lodash = _interopRequireDefault(require("lodash.
|
|
8
|
-
var _lodash2 = _interopRequireDefault(require("lodash.
|
|
7
|
+
var _lodash = _interopRequireDefault(require("lodash.isempty"));
|
|
8
|
+
var _lodash2 = _interopRequireDefault(require("lodash.isequal"));
|
|
9
|
+
var _lodash3 = _interopRequireDefault(require("lodash.omit"));
|
|
9
10
|
var _uuid = require("uuid");
|
|
10
|
-
var
|
|
11
|
+
var _useRenderKeyProvider = _interopRequireDefault(require("./hooks/use-render-key-provider"));
|
|
11
12
|
var _useStore = _interopRequireDefault(require("./hooks/use-store"));
|
|
12
13
|
var _excluded = ["getState", "subscribe", "unlinkCache"];
|
|
13
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
@@ -16,6 +17,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
16
17
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
17
18
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
18
19
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
20
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
19
21
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
20
22
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
21
23
|
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
@@ -64,7 +66,7 @@ var reportNonReactUsage = function reportNonReactUsage() {
|
|
|
64
66
|
var ChildMemo = function () {
|
|
65
67
|
var useNodeMemo = function useNodeMemo(node) {
|
|
66
68
|
var nodeRef = (0, _react.useRef)(node);
|
|
67
|
-
if (!(0,
|
|
69
|
+
if (!(0, _lodash2["default"])((0, _lodash3["default"])(nodeRef.current, '_owner'), (0, _lodash3["default"])(node, '_owner'))) {
|
|
68
70
|
nodeRef.current = node;
|
|
69
71
|
}
|
|
70
72
|
return nodeRef.current;
|
|
@@ -91,7 +93,7 @@ var memoizeImmediateChildTree = function memoizeImmediateChildTree(children) {
|
|
|
91
93
|
return child;
|
|
92
94
|
}
|
|
93
95
|
if ((_child$props = child.props) !== null && _child$props !== void 0 && _child$props.children) {
|
|
94
|
-
child = (0, _react.cloneElement)(child, (0,
|
|
96
|
+
child = (0, _react.cloneElement)(child, (0, _lodash3["default"])(child.props, 'children'), memoizeImmediateChildTree(child.props.children));
|
|
95
97
|
}
|
|
96
98
|
return _react["default"].createElement(ChildMemo, {
|
|
97
99
|
child: child
|
|
@@ -129,9 +131,9 @@ var createContext = function createContext() {
|
|
|
129
131
|
return Context;
|
|
130
132
|
};
|
|
131
133
|
exports.createContext = createContext;
|
|
132
|
-
/**
|
|
133
134
|
* Actively monitors the store and triggers component re-render if any of the watched keys in the state objects changes
|
|
134
135
|
*
|
|
135
136
|
* @param {ObservableContext<T>} context Refers to the PublicObservableContext<T> type of the ObservableContext<T>
|
|
136
137
|
* @param {Array<string|keyof T>} [renderKeys = []] a list of paths to state object properties used by this component: see examples below. May use `['@@STATE']` to indicate a desire to obtain the entire state object. A change in any of the referenced properties results in this component render. When using `['@@STATE']`, any change in the state object results in this component render.
|
|
137
138
|
* @returns {Store<T>}
|
|
138
139
|
* @template {State} T
|
|
139
140
|
* @see {ObservableContext<T>}
|
|
140
141
|
* @example
|
|
141
142
|
* a valid renderKey follows the `lodash` object property path convention.
|
|
142
143
|
* for a state = { a: 1, b: 2, c: 3, d: { e: 5, f: [6, { x: 7, y: 8, z: 9 } ] } }
|
|
143
144
|
* Any of the following is a valid renderKey
|
|
144
145
|
* 'a' => 1
|
|
145
146
|
* 'd' => { e: 5, f: [6, { x: 7, y: 8, z: 9 } ] }
|
|
146
147
|
* 'd.e' => 5
|
|
147
148
|
* 'd.e.f => [6, { x: 7, y: 8, z: 9 } ]
|
|
148
149
|
* 'd.e.f[0]' or 'd.e.f.0' => 6
|
|
149
150
|
* 'd.e.f[1]' or 'd.e.f.1' => { x: 7, y: 8, z: 9 }
|
|
150
151
|
* 'd.e.f[1].x' or 'd.e.f.1.x' => 7
|
|
151
152
|
* '@@STATE' => state
|
|
152
153
|
*/
|
|
154
|
+
/**
|
|
153
155
|
* Actively monitors the store and triggers component re-render if any of the watched keys in the state objects changes
|
|
154
156
|
*
|
|
155
157
|
* @param {ObservableContext<T>} context Refers to the PublicObservableContext<T> type of the ObservableContext<T>
|
|
156
158
|
* @param {{[selectorKey: string]: string|keyof T}} [selectorMap = {}] Key:value pairs where `key` => arbitrary key given to Store.data property holding the state slices and `value` => property paths to state slices used by this component: see examples below. May use `{..., state: '@@STATE'}` to indicate a desire to obtain the entire state object and assign to a `state` property of Store.data. A change in any of the referenced properties results in this component render. When using `['@@STATE']`, any change in the state object results in this component render.
|
|
157
159
|
* @returns {Store<T>}
|
|
158
160
|
* @template {State} T
|
|
159
161
|
* @see {ObservableContext<T>}
|
|
160
162
|
* @example
|
|
161
163
|
* a valid propertyPath follows the `lodash` object property path convention.
|
|
162
164
|
* for a state = { a: 1, b: 2, c: 3, d: { e: 5, f: [6, { x: 7, y: 8, z: 9 } ] } }
|
|
163
165
|
* Any of the following is an applicable selector map.
|
|
164
166
|
* {count: 'a', myData: 'd'} => {count: 1, myData: { e: 5, f: [6, { x: 7, y: 8, z: 9 } ] }}
|
|
165
167
|
* {count: 'a'} => {count: 1}
|
|
166
168
|
* {myData: 'd'} => {mydata: { e: 5, f: [6, { x: 7, y: 8, z: 9 } ] }}
|
|
167
169
|
* {xyz: 'd.e'} => {xyz: 5}
|
|
168
170
|
* {def: 'd.e.f'} => {def: [6, { x: 7, y: 8, z: 9 } ]}
|
|
169
171
|
* {f1: 'd.e.f[0]'} or {f1: 'd.e.f.0'} => {f1: 6}
|
|
170
172
|
* {secondFElement: 'd.e.f[1]'} or {secondFElement: 'd.e.f.1'} => {secondFElement: { x: 7, y: 8, z: 9 }}
|
|
171
173
|
* {myX: 'd.e.f[1].x'} or {myX: 'd.e.f.1.x'} => {myX: 7}
|
|
172
174
|
* {myData: '@@STATE'} => {myData: state}
|
|
173
175
|
*/
|
|
174
176
|
var useContext = function useContext(context) {
|
|
175
|
-
var
|
|
177
|
+
var selectorMap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
176
178
|
/** @type {StoreInternal<T>} */
|
|
177
179
|
var _useContext2 = (0, _react.useContext)(context),
|
|
178
180
|
_getState = _useContext2.getState,
|
|
@@ -141,28 +143,80 @@ var useContext = function useContext(context) {
|
|
|
141
143
|
var _useState = (0, _react.useState)(_uuid.v4),
|
|
142
144
|
_useState2 = _slicedToArray(_useState, 1),
|
|
143
145
|
clientId = _useState2[0];
|
|
144
|
-
var _renderKeys = (0,
|
|
145
|
-
/** @
|
|
146
|
-
var
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
146
|
+
var _renderKeys = (0, _useRenderKeyProvider["default"])(selectorMap);
|
|
147
|
+
/** @type {{[propertyPath: string]: string}} Reversed selectorMap i.e. {selectorKey: propertyPath} => {propertyPath: selectorKey} */
|
|
148
|
+
var path2SelectorMap = (0, _react.useMemo)(function () {
|
|
149
|
+
var map = {};
|
|
150
|
+
if ((0, _lodash["default"])(_renderKeys)) {
|
|
151
|
+
return map;
|
|
152
|
+
}
|
|
153
|
+
;
|
|
154
|
+
for (var selectorKey in selectorMap) {
|
|
155
|
+
map[selectorMap[selectorKey]] = selectorKey;
|
|
156
|
+
}
|
|
157
|
+
return map;
|
|
158
|
+
}, [_renderKeys]);
|
|
159
|
+
/** @type {[Data, Function]} */
|
|
160
|
+
var _useState3 = (0, _react.useState)(function () {
|
|
161
|
+
var data = {};
|
|
162
|
+
if ((0, _lodash["default"])(_renderKeys)) {
|
|
163
|
+
return data;
|
|
164
|
+
}
|
|
165
|
+
var state = _getState.apply(void 0, [clientId].concat(_toConsumableArray(_renderKeys)));
|
|
166
|
+
var _iterator = _createForOfIteratorHelper(_renderKeys),
|
|
167
|
+
_step;
|
|
168
|
+
try {
|
|
169
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
170
|
+
var path = _step.value;
|
|
171
|
+
data[path2SelectorMap[path]] = state[path];
|
|
172
|
+
}
|
|
173
|
+
} catch (err) {
|
|
174
|
+
_iterator.e(err);
|
|
175
|
+
} finally {
|
|
176
|
+
_iterator.f();
|
|
177
|
+
}
|
|
178
|
+
return data;
|
|
179
|
+
}),
|
|
150
180
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
151
181
|
data = _useState4[0],
|
|
152
182
|
setData = _useState4[1];
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
183
|
+
var updateData = function updateData() {
|
|
184
|
+
var hasChanges = false;
|
|
185
|
+
var state = _getState.apply(void 0, [clientId].concat(_toConsumableArray(_renderKeys)));
|
|
186
|
+
var _iterator2 = _createForOfIteratorHelper(_renderKeys),
|
|
187
|
+
_step2;
|
|
188
|
+
try {
|
|
189
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
190
|
+
var path = _step2.value;
|
|
191
|
+
if (data[path2SelectorMap[path]] !== state[path]) {
|
|
192
|
+
data[path2SelectorMap[path]] = state[path];
|
|
193
|
+
hasChanges = true;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
} catch (err) {
|
|
197
|
+
_iterator2.e(err);
|
|
198
|
+
} finally {
|
|
199
|
+
_iterator2.f();
|
|
200
|
+
}
|
|
201
|
+
hasChanges && setData(_objectSpread({}, data));
|
|
202
|
+
};
|
|
161
203
|
(0, _react.useEffect)(function () {
|
|
204
|
+
if ((0, _lodash["default"])(_renderKeys)) {
|
|
205
|
+
!(0, _lodash2["default"])({}, data) && setData({});
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
for (var selectorKey in data) {
|
|
209
|
+
if (!(selectorMap[selectorKey] in path2SelectorMap)) {
|
|
210
|
+
delete data[selectorKey];
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
var unsubscribe = subscribe(updateData);
|
|
214
|
+
updateData();
|
|
162
215
|
return function () {
|
|
163
|
-
|
|
216
|
+
unsubscribe();
|
|
217
|
+
unlinkCache(clientId);
|
|
164
218
|
};
|
|
165
|
-
}, []);
|
|
219
|
+
}, [_renderKeys]);
|
|
166
220
|
return (0, _react.useMemo)(function () {
|
|
167
221
|
return _objectSpread({
|
|
168
222
|
data: data
|
|
@@ -97,7 +97,7 @@ function setState(state, newState, onStateChange) {
|
|
|
97
97
|
hasChanges: false
|
|
98
98
|
};
|
|
99
99
|
set(state, newState, stats);
|
|
100
|
-
stats.hasChanges && (onStateChange === null || onStateChange === void 0 ? void 0 : onStateChange(
|
|
100
|
+
stats.hasChanges && (onStateChange === null || onStateChange === void 0 ? void 0 : onStateChange(newState));
|
|
101
101
|
}
|
|
102
102
|
;
|
|
103
103
|
var _default = setState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export default Accessor;
|
|
2
1
|
static "__#5@#NUM_INSTANCES": number;
|
|
3
2
|
/**
|
|
4
3
|
* @param {T} source State object reference from which the accessedPropertyPaths are to be selected.
|
|
5
4
|
* @param {Array<string>} accessedPropertyPaths
|
|
6
5
|
*/
|
|
7
6
|
constructor(source: T, accessedPropertyPaths: Array<string>);
|
|
8
7
|
/** @type {boolean} */
|
|
9
8
|
refreshDue: boolean;
|
|
10
9
|
get numClients(): number;
|
|
11
10
|
get id(): number;
|
|
12
11
|
get paths(): string[];
|
|
13
12
|
get value(): Readonly<import("../../types").PartialState<T>>;
|
|
14
13
|
/** @param {string} clientId */
|
|
15
14
|
addClient(clientId: string): void;
|
|
16
15
|
hasClient(clientId: string): boolean;
|
|
17
16
|
removeClient(clientId: string): boolean;
|
|
18
17
|
/**
|
|
19
18
|
* @param {{[propertyPath: string]: Atom}} atoms Curated slices of state currently requested
|
|
20
19
|
* @returns {Readonly<PartialState<State>>}
|
|
21
20
|
*/
|
|
22
21
|
refreshValue(atoms: {
|
|
23
22
|
[propertyPath: string]: import("../atom").default;
|
|
24
23
|
}): Readonly<PartialState<State>>;
|
|
25
24
|
#private;
|
|
25
|
+
export default Accessor;
|
|
26
26
|
static "__#5@#NUM_INSTANCES": number;
|
|
27
27
|
/**
|
|
28
28
|
* @param {T} source State object reference from which the accessedPropertyPaths are to be selected.
|
|
29
29
|
* @param {Array<string>} accessedPropertyPaths
|
|
30
30
|
*/
|
|
31
31
|
constructor(source: T, accessedPropertyPaths: Array<string>);
|
|
32
32
|
/** @type {Array<string>} */
|
|
33
33
|
outdatedPaths: Array<string>;
|
|
34
34
|
get numClients(): number;
|
|
35
35
|
get id(): number;
|
|
36
36
|
get paths(): string[];
|
|
37
37
|
get value(): {
|
|
38
38
|
[propertyPath: string]: Readonly<any>;
|
|
39
39
|
};
|
|
40
40
|
/** @param {string} clientId */
|
|
41
41
|
addClient(clientId: string): void;
|
|
42
42
|
hasClient(clientId: string): boolean;
|
|
43
43
|
removeClient(clientId: string): boolean;
|
|
44
44
|
/**
|
|
45
45
|
* @param {{[propertyPath: string]: Atom<*>}} atoms Curated slices of state currently requested
|
|
46
46
|
* @returns {{[propertyPath: string]: Readonly<*>}}
|
|
47
47
|
*/
|
|
48
48
|
refreshValue(atoms: {
|
|
49
49
|
[propertyPath: string]: import("../atom").default<any>;
|
|
50
50
|
}): {
|
|
51
51
|
[propertyPath: string]: Readonly<any>;
|
|
52
52
|
};
|
|
53
53
|
#private;
|