@webkrafters/react-observable-context 6.0.0-rc.2.1 → 6.0.0-rc.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/index.d.ts +3 -3
- package/dist/main/hooks/use-store/index.js +19 -12
- package/dist/main/index.js +16 -5
- package/package.json +5 -4
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { Changes as BaseChanges, Connection, Immutable, Value } from '@webk
|
|
|
3
3
|
import { FULL_STATE_SELECTOR } from './constants';
|
|
4
4
|
export type { BaseType, ClearCommand, KeyType, MoveCommand, PushCommand, ReplaceCommand, SetCommand, SpliceCommand, TagCommand, TagType, UpdateStats, UpdatePayload, UpdatePayloadArray } from '@webkrafters/auto-immutable';
|
|
5
5
|
export type State = Value;
|
|
6
|
-
export type Listener<T extends State = {}> = (changes: Readonly<T>,
|
|
6
|
+
export type Listener<T extends State = {}> = (changes: Changes<T>, changedPathsTokens: Readonly<Array<Array<string>>>, netChanges: Readonly<T>, mayHaveChangesAt: (pathTokens: Array<string>) => boolean) => void;
|
|
7
7
|
export type ObservableProvider<T extends State> = ForwardRefExoticComponent<ProviderProps<T> & RefAttributes<StoreRef<T>>>;
|
|
8
8
|
export interface ProviderProps<T extends State> {
|
|
9
9
|
children?: ReactNode;
|
|
@@ -79,8 +79,8 @@ export interface StorePlaceholder extends IStoreInternal {
|
|
|
79
79
|
subscribe: NonReactUsageReport;
|
|
80
80
|
}
|
|
81
81
|
export interface StoreRef<T extends State = State> extends StorePlaceholder {
|
|
82
|
-
getState: () => T;
|
|
83
|
-
resetState: (propertyPaths?: string
|
|
82
|
+
getState: (propertyPaths?: Array<string>) => T;
|
|
83
|
+
resetState: (propertyPaths?: Array<string>) => void;
|
|
84
84
|
setState: (changes: Changes<T>) => void;
|
|
85
85
|
subscribe: Subscribe;
|
|
86
86
|
}
|
|
@@ -105,11 +105,13 @@ var useStore = function useStore(prehooks, value, storage) {
|
|
|
105
105
|
}),
|
|
106
106
|
_ref6 = _slicedToArray(_ref5, 1),
|
|
107
107
|
_storage = _ref6[0];
|
|
108
|
-
var
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
108
|
+
var getChangHandler = (0, react_1.useCallback)(function (changes) {
|
|
109
|
+
return function (netChanges, changedPathsTokens) {
|
|
110
|
+
var mayHaveChangesAt = createChangePathSearch(changedPathsTokens);
|
|
111
|
+
listeners.forEach(function (listener) {
|
|
112
|
+
return listener(changes, changedPathsTokens, netChanges, mayHaveChangesAt);
|
|
113
|
+
});
|
|
114
|
+
};
|
|
113
115
|
}, []);
|
|
114
116
|
var resetState = (0, react_1.useCallback)(function (connection) {
|
|
115
117
|
var propertyPaths = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
@@ -174,20 +176,21 @@ var useStore = function useStore(prehooks, value, storage) {
|
|
|
174
176
|
runPrehook(prehooksRef.current, 'resetState', [resetData, {
|
|
175
177
|
current: connection.get(constants_1.GLOBAL_SELECTOR)[constants_1.GLOBAL_SELECTOR],
|
|
176
178
|
original: original
|
|
177
|
-
}]) && connection.set(resetData,
|
|
179
|
+
}]) && connection.set(resetData, getChangHandler(resetData));
|
|
178
180
|
}, []);
|
|
179
181
|
var setState = (0, react_1.useCallback)(function (connection, changes) {
|
|
180
182
|
if (!runPrehook(prehooksRef.current, 'setState', [changes])) {
|
|
181
183
|
return;
|
|
182
184
|
}
|
|
183
185
|
if (!Array.isArray(changes)) {
|
|
184
|
-
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
186
|
+
changes = transformPayload(changes);
|
|
187
|
+
} else {
|
|
188
|
+
changes = changes.slice();
|
|
189
|
+
for (var c = changes.length; c--;) {
|
|
190
|
+
changes[c] = transformPayload(changes[c]);
|
|
191
|
+
}
|
|
189
192
|
}
|
|
190
|
-
connection.set(changes,
|
|
193
|
+
connection.set(changes, getChangHandler(changes));
|
|
191
194
|
}, []);
|
|
192
195
|
var subscribe = (0, react_1.useCallback)(function (listener) {
|
|
193
196
|
listeners.add(listener);
|
|
@@ -224,6 +227,10 @@ var useStore = function useStore(prehooks, value, storage) {
|
|
|
224
227
|
})[0];
|
|
225
228
|
};
|
|
226
229
|
exports["default"] = useStore;
|
|
230
|
+
/**
|
|
231
|
+
* @param {string[][]} changedPathsTokens - list containing tokenized changed object paths.
|
|
232
|
+
* @returns {Function} - function verifying that a random tokenized object path falls within the changed paths domain.
|
|
233
|
+
*/
|
|
227
234
|
function createChangePathSearch(_ref0) {
|
|
228
235
|
var length = _ref0.length,
|
|
229
236
|
pathTokenGroups = _objectWithoutProperties(_ref0, _excluded);
|
package/dist/main/index.js
CHANGED
|
@@ -87,6 +87,7 @@ var react_1 = __importStar(require("react"));
|
|
|
87
87
|
var lodash_isequal_1 = __importDefault(require("lodash.isequal"));
|
|
88
88
|
var lodash_isplainobject_1 = __importDefault(require("lodash.isplainobject"));
|
|
89
89
|
var lodash_omit_1 = __importDefault(require("lodash.omit"));
|
|
90
|
+
var lodash_set_1 = __importDefault(require("lodash.set"));
|
|
90
91
|
var path_dotize_1 = __importDefault(require("@webkrafters/path-dotize"));
|
|
91
92
|
var constants = __importStar(require("../constants"));
|
|
92
93
|
var use_render_key_provider_1 = __importDefault(require("./hooks/use-render-key-provider"));
|
|
@@ -227,9 +228,9 @@ function useContext(context, selectorMap) {
|
|
|
227
228
|
_react_1$default$useS4 = _slicedToArray(_react_1$default$useS3, 2),
|
|
228
229
|
data = _react_1$default$useS4[0],
|
|
229
230
|
setData = _react_1$default$useS4[1];
|
|
230
|
-
var dataSourceListener = function dataSourceListener(changes,
|
|
231
|
+
var dataSourceListener = function dataSourceListener(changes, changePathsTokens, netChanges, mayHaveChangesAt) {
|
|
231
232
|
for (var _Len = _renderKeys.length, _ = 0; _ < _Len; _++) {
|
|
232
|
-
if (_renderKeys[_] !== constants.FULL_STATE_SELECTOR && !
|
|
233
|
+
if (_renderKeys[_] !== constants.FULL_STATE_SELECTOR && !mayHaveChangesAt((0, path_dotize_1["default"])(_renderKeys[_]).split('.'))) {
|
|
233
234
|
continue;
|
|
234
235
|
}
|
|
235
236
|
return updateData();
|
|
@@ -382,12 +383,22 @@ function makeObservable(Provider) {
|
|
|
382
383
|
}),
|
|
383
384
|
_ref7 = _slicedToArray(_ref6, 1),
|
|
384
385
|
connection = _ref7[0];
|
|
386
|
+
var getState = (0, react_1.useCallback)(function () {
|
|
387
|
+
var propertyPaths = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
388
|
+
if (!propertyPaths.length || propertyPaths.indexOf(constants.FULL_STATE_SELECTOR) !== -1) {
|
|
389
|
+
return connection.get(constants.GLOBAL_SELECTOR)[constants.GLOBAL_SELECTOR];
|
|
390
|
+
}
|
|
391
|
+
var data = connection.get.apply(connection, _toConsumableArray(propertyPaths));
|
|
392
|
+
var state = {};
|
|
393
|
+
for (var d in data) {
|
|
394
|
+
(0, lodash_set_1["default"])(state, d, data[d]);
|
|
395
|
+
}
|
|
396
|
+
return state;
|
|
397
|
+
}, []);
|
|
385
398
|
(0, react_1.useImperativeHandle)(storeRef, function () {
|
|
386
399
|
var _storeRef$current;
|
|
387
400
|
return _objectSpread(_objectSpread({}, (_storeRef$current = storeRef === null || storeRef === void 0 ? void 0 : storeRef.current) !== null && _storeRef$current !== void 0 ? _storeRef$current : {}), {}, {
|
|
388
|
-
getState:
|
|
389
|
-
return connection.get(constants.GLOBAL_SELECTOR)[constants.GLOBAL_SELECTOR];
|
|
390
|
-
},
|
|
401
|
+
getState: getState,
|
|
391
402
|
resetState: function resetState(propertyPaths) {
|
|
392
403
|
return store.resetState(connection, propertyPaths);
|
|
393
404
|
},
|
package/package.json
CHANGED
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"lodash.isequal": "^4.5.0",
|
|
46
46
|
"lodash.isplainobject": "^4.0.6",
|
|
47
47
|
"lodash.omit": "^4.5.0",
|
|
48
|
+
"lodash.set": "^4.3.2",
|
|
48
49
|
"react": "^18.3.1",
|
|
49
50
|
"react-dom": "^18.3.1",
|
|
50
51
|
"react-performance-testing": "^2.0.0",
|
|
@@ -54,8 +55,8 @@
|
|
|
54
55
|
"typescript": "^5.4.5"
|
|
55
56
|
},
|
|
56
57
|
"files": [
|
|
57
|
-
"
|
|
58
|
-
"
|
|
58
|
+
"logo.png",
|
|
59
|
+
"dist"
|
|
59
60
|
],
|
|
60
61
|
"homepage": "https://eagleeye.js.org",
|
|
61
62
|
"keywords": [
|
|
@@ -89,6 +90,7 @@
|
|
|
89
90
|
"lodash.isequal": ">= 0.1.0",
|
|
90
91
|
"lodash.isplainobject": ">= 0.8.0",
|
|
91
92
|
"lodash.omit": ">= 0.1.0",
|
|
93
|
+
"lodash.set": ">= 0.1.0",
|
|
92
94
|
"react": ">= 16.8.0 <19"
|
|
93
95
|
},
|
|
94
96
|
"publishConfig": {
|
|
@@ -100,14 +102,13 @@
|
|
|
100
102
|
},
|
|
101
103
|
"scripts": {
|
|
102
104
|
"build": "eslint --fix && rm -rf dist && tsc && babel dist -d dist",
|
|
103
|
-
"postbuild": "node ./post-build",
|
|
104
105
|
"test": "eslint --fix && jest --coverage --updateSnapshot",
|
|
105
106
|
"test:clean": "jest --clearCache",
|
|
106
107
|
"test:core": "jest --updateSnapshot",
|
|
107
108
|
"test:watch": "eslint --fix && jest --updateSnapshot --watchAll"
|
|
108
109
|
},
|
|
109
110
|
"types": "dist/index.d.ts",
|
|
110
|
-
"version": "6.0.0-rc.
|
|
111
|
+
"version": "6.0.0-rc.3",
|
|
111
112
|
"dependencies": {
|
|
112
113
|
"@webkrafters/auto-immutable": "^2.0.0-rc.10"
|
|
113
114
|
}
|