react-native-onyx 1.0.11 → 1.0.14

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 CHANGED
@@ -86,11 +86,18 @@ Onyx.merge(ONYXKEYS.POLICY, {employeeList: ['Jack']}); // -> {employeeList: ['Ja
86
86
 
87
87
  ### Should I use `merge()` or `set()` or both?
88
88
 
89
- - Use `merge()` if we want to merge partial data into an existing `Array` or `Object`
90
- - Use `set()` if we are working with simple values (`String`, `Boolean`, etc), need to completely overwrite a complex property of an `Object`, or reset some data entirely.
89
+ - Use `merge()` when creating a new object
90
+ - Use `merge()` to merge partial data into an existing object
91
+ - Use `merge()` when storing simple values (`String`, `Boolean`, `Number`)
92
+ - Use `set()` when you need to delete an Onyx key completely from storage
93
+ - Use `set()` when you need to completely reset an object or array of data
91
94
 
92
95
  Consecutive calls to `Onyx.merge()` with the same key are batched in a stack and processed in the order that they were called. This helps avoid race conditions where one merge possibly finishes before another. However, it's important to note that calls to `Onyx.set()` are not batched together with calls to `Onyx.merge()`. For this reason, it is usually preferable to use one or the other, but not both. Onyx is a work-in-progress so always test code to make sure assumptions are correct!
93
96
 
97
+ ### Should I store things as an array or an object?
98
+
99
+ You should avoid arrays as much as possible. They do not work well with `merge()` because it can't update a single element in an array, it must always set the entire array each time. This forces you to use `set()` a lot, and as seen above, `merge()` is more performant and better to use in almost any situation. If you are working with an array of objects, then you should be using an Onyx collection because it's optimized for working with arrays of objects.
100
+
94
101
  ## Subscribing to data changes
95
102
 
96
103
  To set up a basic subscription for a given key use the `Onyx.connect()` method.
@@ -489,7 +489,7 @@ function logInfo(message) {
489
489
  \*********************/
490
490
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
491
491
 
492
- var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");Object.defineProperty(exports, "__esModule", ({ value: true }));exports["default"] = void 0;var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "./node_modules/@babel/runtime/helpers/slicedToArray.js"));var _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "./node_modules/@babel/runtime/helpers/toConsumableArray.js"));var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js"));var _extends4 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));var _underscore = _interopRequireDefault(__webpack_require__(/*! underscore */ "underscore"));
492
+ var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");Object.defineProperty(exports, "__esModule", ({ value: true }));exports["default"] = void 0;var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "./node_modules/@babel/runtime/helpers/slicedToArray.js"));var _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "./node_modules/@babel/runtime/helpers/toConsumableArray.js"));var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js"));var _underscore = _interopRequireDefault(__webpack_require__(/*! underscore */ "underscore"));
493
493
  var _str = _interopRequireDefault(__webpack_require__(/*! expensify-common/lib/str */ "expensify-common/lib/str"));
494
494
  var _merge = _interopRequireDefault(__webpack_require__(/*! lodash/merge */ "lodash/merge"));
495
495
  var _get = _interopRequireDefault(__webpack_require__(/*! lodash/get */ "lodash/get"));
@@ -723,10 +723,10 @@ function getCachedCollection(collectionKey) {
723
723
  if (!cachedValue) {
724
724
  return prev;
725
725
  }
726
- return (0, _extends4.default)({},
727
- prev, (0, _defineProperty2.default)({},
728
- curr, cachedValue));
729
726
 
727
+ // eslint-disable-next-line no-param-reassign
728
+ prev[curr] = cachedValue;
729
+ return prev;
730
730
  }, {});
731
731
  }
732
732
 
@@ -751,6 +751,12 @@ function keysChanged(collectionKey, collection) {
751
751
  if (isSubscribedToCollectionKey) {
752
752
  if (_underscore.default.isFunction(subscriber.callback)) {
753
753
  var cachedCollection = getCachedCollection(collectionKey);
754
+
755
+ if (subscriber.waitForCollectionCallback) {
756
+ subscriber.callback(cachedCollection);
757
+ return;
758
+ }
759
+
754
760
  _underscore.default.each(collection, function (data, dataKey) {
755
761
  subscriber.callback(cachedCollection[dataKey], dataKey);
756
762
  });
@@ -780,7 +786,7 @@ function keysChanged(collectionKey, collection) {
780
786
  }
781
787
 
782
788
  subscriber.withOnyxInstance.setState(function (prevState) {return (0, _defineProperty2.default)({},
783
- subscriber.statePropertyName, _underscore.default.isObject(dataFromCollection) ? (0, _extends4.default)({},
789
+ subscriber.statePropertyName, _underscore.default.isObject(dataFromCollection) ? (0, _extends2.default)({},
784
790
 
785
791
  prevState[subscriber.statePropertyName],
786
792
  dataFromCollection) :
@@ -935,10 +941,11 @@ function connect(mapping) {
935
941
  // initial data as a single object when using collection keys.
936
942
  if (mapping.withOnyxInstance && isCollectionKey(mapping.key) || mapping.waitForCollectionCallback) {
937
943
  Promise.all(_underscore.default.map(matchingKeys, function (key) {return get(key);})).
938
- then(function (values) {return _underscore.default.reduce(values, function (finalObject, value, i) {return (0, _extends4.default)({},
939
- finalObject, (0, _defineProperty2.default)({},
940
- matchingKeys[i], value));},
941
- {});}).
944
+ then(function (values) {return _underscore.default.reduce(values, function (finalObject, value, i) {
945
+ // eslint-disable-next-line no-param-reassign
946
+ finalObject[matchingKeys[i]] = value;
947
+ return finalObject;
948
+ }, {});}).
942
949
  then(function (val) {return sendDataToConnection(mapping, val);});
943
950
  } else {
944
951
  _underscore.default.each(matchingKeys, function (key) {