@webkrafters/react-observable-context 4.5.4 → 4.6.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 +4 -0
- package/dist/main/hooks/use-store/index.js +58 -5
- package/dist/main/set-state/index.js +1 -6
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +10 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -683,6 +683,10 @@ store.setState({
|
|
|
683
683
|
<h1 id="changes">What's Changed?</h1>
|
|
684
684
|
|
|
685
685
|
<table>
|
|
686
|
+
<thead><tr><th>v4.6.0</th></tr></thead>
|
|
687
|
+
<tbody>
|
|
688
|
+
<tr><td><b>1.</b></td><td><a href="#store-resetstate"><code>store.resetState</code></a> can now update reset current state even when initial state does not exist. Formerly, a resetState call on a non-existent initial state had no effect.</td></tr>
|
|
689
|
+
</tbody>
|
|
686
690
|
<thead><tr><th>v4.5.0</th></tr></thead>
|
|
687
691
|
<tbody>
|
|
688
692
|
<tr><td><b>1.</b></td><td><a href="#setstate-tags">Tags</a> to update non-existent state slices are now recognized. <b>Previously,</b> they had resulted in no-ops. <b>From now on,</b> they will result in new default slices matching the result of the given tag operation.</td></tr>
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.deps = exports["default"] = void 0;
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
var _lodash = _interopRequireDefault(require("lodash.isboolean"));
|
|
9
|
+
var _lodash2 = _interopRequireDefault(require("lodash.isempty"));
|
|
9
10
|
var _uuid = require("uuid");
|
|
10
11
|
var _constants = require("../../../constants");
|
|
11
12
|
var _utils = require("../../../utils");
|
|
@@ -13,8 +14,8 @@ var _storage2 = _interopRequireDefault(require("../../../model/storage"));
|
|
|
13
14
|
var _usePrehooksRef = _interopRequireDefault(require("../use-prehooks-ref"));
|
|
14
15
|
var _useStateManager2 = _interopRequireDefault(require("../use-state-manager"));
|
|
15
16
|
var _setState2 = _interopRequireDefault(require("../../set-state"));
|
|
16
|
-
var _ = require("../..");
|
|
17
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
18
|
+
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; } } }; }
|
|
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; }
|
|
19
20
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
20
21
|
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
@@ -77,10 +78,62 @@ var useStore = function useStore(prehooks, value, storage) {
|
|
|
77
78
|
var resetState = (0, _react.useCallback)(function () {
|
|
78
79
|
var propertyPaths = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
79
80
|
var original = _storage.clone(_storage.getItem(storageKey.current));
|
|
80
|
-
var resetData
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
})
|
|
81
|
+
var resetData;
|
|
82
|
+
if (!propertyPaths.length) {
|
|
83
|
+
resetData = {};
|
|
84
|
+
} else if (propertyPaths.includes(_constants.FULL_STATE_SELECTOR)) {
|
|
85
|
+
resetData = (0, _lodash2["default"])(original) ? _constants.CLEAR_TAG : _defineProperty({}, _constants.REPLACE_TAG, original);
|
|
86
|
+
} else {
|
|
87
|
+
var visitedPathMap = {};
|
|
88
|
+
resetData = (0, _utils.mapPathsToObject)(original, propertyPaths, function (_ref2) {
|
|
89
|
+
var trail = _ref2.trail,
|
|
90
|
+
value = _ref2.value;
|
|
91
|
+
visitedPathMap[trail] = null;
|
|
92
|
+
return _defineProperty({}, _constants.REPLACE_TAG, value);
|
|
93
|
+
});
|
|
94
|
+
if (Object.keys(visitedPathMap).length < propertyPaths.length) {
|
|
95
|
+
var _iterator = _createForOfIteratorHelper(propertyPaths),
|
|
96
|
+
_step;
|
|
97
|
+
try {
|
|
98
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
99
|
+
var path = _step.value;
|
|
100
|
+
path = (0, _utils.stringToDotPath)(path);
|
|
101
|
+
if (path in visitedPathMap) {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
var trail = path.split('.');
|
|
105
|
+
var keyTuple = trail.slice(-1);
|
|
106
|
+
trail = trail.slice(0, -1);
|
|
107
|
+
var node = resetData;
|
|
108
|
+
var _iterator2 = _createForOfIteratorHelper(trail),
|
|
109
|
+
_step2;
|
|
110
|
+
try {
|
|
111
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
112
|
+
var t = _step2.value;
|
|
113
|
+
if ((0, _lodash2["default"])(node[t])) {
|
|
114
|
+
node[t] = {};
|
|
115
|
+
}
|
|
116
|
+
node = node[t];
|
|
117
|
+
}
|
|
118
|
+
} catch (err) {
|
|
119
|
+
_iterator2.e(err);
|
|
120
|
+
} finally {
|
|
121
|
+
_iterator2.f();
|
|
122
|
+
}
|
|
123
|
+
if (_constants.DELETE_TAG in node) {
|
|
124
|
+
var _node$DELETE_TAG;
|
|
125
|
+
(_node$DELETE_TAG = node[_constants.DELETE_TAG]).push.apply(_node$DELETE_TAG, _toConsumableArray(keyTuple));
|
|
126
|
+
} else {
|
|
127
|
+
node[_constants.DELETE_TAG] = keyTuple;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
} catch (err) {
|
|
131
|
+
_iterator.e(err);
|
|
132
|
+
} finally {
|
|
133
|
+
_iterator.f();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
84
137
|
runPrehook(prehooksRef.current, 'resetState', [resetData, {
|
|
85
138
|
current: (0, _utils.clonedeep)(state),
|
|
86
139
|
original: original
|
|
@@ -42,12 +42,7 @@ var setAtomic = function () {
|
|
|
42
42
|
newState[k] = childChange;
|
|
43
43
|
continue;
|
|
44
44
|
}
|
|
45
|
-
|
|
46
|
-
for (var p in childChange !== null && childChange !== void 0 ? childChange : {}) {
|
|
47
|
-
hasProps = true;
|
|
48
|
-
break;
|
|
49
|
-
}
|
|
50
|
-
if (!hasProps) {
|
|
45
|
+
if (!Object.keys(childChange !== null && childChange !== void 0 ? childChange : {}).length) {
|
|
51
46
|
newState[k] = childChange;
|
|
52
47
|
} else if (isArrayTaggedPayload(childChange)) {
|
|
53
48
|
newState[k] = [];
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -6,4 +6,5 @@ export function mapPathsToObject<T extends {
|
|
|
6
6
|
}>(source: T, propertyPaths: Array<string>, transform?: Tranform): { [K in keyof T]?: any; };
|
|
7
7
|
export function clonedeep<T, R>(value: T): R;
|
|
8
8
|
export const getProperty: any;
|
|
9
|
+
export const stringToDotPath: (path: string) => string;
|
|
9
10
|
export type Tranform = (property: any) => T;
|
package/dist/utils/index.js
CHANGED
|
@@ -7,6 +7,7 @@ exports.getProperty = exports.clonedeep = void 0;
|
|
|
7
7
|
exports.isDataContainer = isDataContainer;
|
|
8
8
|
exports.makeReadonly = makeReadonly;
|
|
9
9
|
exports.mapPathsToObject = mapPathsToObject;
|
|
10
|
+
exports.stringToDotPath = void 0;
|
|
10
11
|
var _lodash = _interopRequireDefault(require("lodash.clonedeepwith"));
|
|
11
12
|
var _lodash2 = _interopRequireDefault(require("lodash.isplainobject"));
|
|
12
13
|
var _clonedeepEligibilityCheck = _interopRequireDefault(require("./clonedeep-eligibility-check"));
|
|
@@ -116,6 +117,14 @@ var defaultFormatValue = function defaultFormatValue(_ref) {
|
|
|
116
117
|
var value = _ref.value;
|
|
117
118
|
return value;
|
|
118
119
|
};
|
|
120
|
+
var stringToDotPath = function () {
|
|
121
|
+
var BRACKET_OPEN = /\.?\[/g;
|
|
122
|
+
var BRACKET_CLOSE = /^\.|\]/g;
|
|
123
|
+
return function (path) {
|
|
124
|
+
return path.replace(BRACKET_OPEN, '.').replace(BRACKET_CLOSE, '');
|
|
125
|
+
};
|
|
126
|
+
}();
|
|
127
|
+
exports.stringToDotPath = stringToDotPath;
|
|
119
128
|
function mapPathsToObject(source, propertyPaths) {
|
|
120
129
|
var transform = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultFormatValue;
|
|
121
130
|
var paths = [];
|
|
@@ -124,7 +133,7 @@ function mapPathsToObject(source, propertyPaths) {
|
|
|
124
133
|
try {
|
|
125
134
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
126
135
|
var path = _step2.value;
|
|
127
|
-
paths.push(path
|
|
136
|
+
paths.push(stringToDotPath(path));
|
|
128
137
|
}
|
|
129
138
|
} catch (err) {
|
|
130
139
|
_iterator2.e(err);
|
package/package.json
CHANGED