react-native-onyx 2.0.57 → 2.0.58
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/Onyx.d.ts +1 -1
- package/dist/Onyx.js +1 -1
- package/dist/OnyxUtils.d.ts +1 -1
- package/dist/OnyxUtils.js +17 -4
- package/package.json +1 -1
package/dist/Onyx.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ declare function init({ keys, initialKeyStates, safeEvictionKeys, maxCachedKeysC
|
|
|
19
19
|
* @param [mapping.callback] a method that will be called with changed data
|
|
20
20
|
* This is used by any non-React code to connect to Onyx
|
|
21
21
|
* @param [mapping.initWithStoredValues] If set to false, then no data will be prefilled into the
|
|
22
|
-
* component
|
|
22
|
+
* component. Default is true.
|
|
23
23
|
* @param [mapping.waitForCollectionCallback] If set to true, it will return the entire collection to the callback as a single object
|
|
24
24
|
* @param [mapping.selector] THIS PARAM IS ONLY USED WITH withOnyx(). If included, this will be used to subscribe to a subset of an Onyx key's data.
|
|
25
25
|
* The sourceData and withOnyx state are passed to the selector and should return the simplified data. Using this setting on `withOnyx` can have very positive
|
package/dist/Onyx.js
CHANGED
|
@@ -80,7 +80,7 @@ function init({ keys = {}, initialKeyStates = {}, safeEvictionKeys = [], maxCach
|
|
|
80
80
|
* @param [mapping.callback] a method that will be called with changed data
|
|
81
81
|
* This is used by any non-React code to connect to Onyx
|
|
82
82
|
* @param [mapping.initWithStoredValues] If set to false, then no data will be prefilled into the
|
|
83
|
-
* component
|
|
83
|
+
* component. Default is true.
|
|
84
84
|
* @param [mapping.waitForCollectionCallback] If set to true, it will return the entire collection to the callback as a single object
|
|
85
85
|
* @param [mapping.selector] THIS PARAM IS ONLY USED WITH withOnyx(). If included, this will be used to subscribe to a subset of an Onyx key's data.
|
|
86
86
|
* The sourceData and withOnyx state are passed to the selector and should return the simplified data. Using this setting on `withOnyx` can have very positive
|
package/dist/OnyxUtils.d.ts
CHANGED
|
@@ -145,7 +145,7 @@ declare function keysChanged<TKey extends CollectionKeyBase>(collectionKey: TKey
|
|
|
145
145
|
* @example
|
|
146
146
|
* keyChanged(key, value, subscriber => subscriber.initWithStoredValues === false)
|
|
147
147
|
*/
|
|
148
|
-
declare function keyChanged<TKey extends OnyxKey>(key: TKey, value: OnyxValue<TKey>, previousValue: OnyxValue<TKey>, canUpdateSubscriber?: (subscriber?: Mapping<OnyxKey>) => boolean,
|
|
148
|
+
declare function keyChanged<TKey extends OnyxKey>(key: TKey, value: OnyxValue<TKey>, previousValue: OnyxValue<TKey>, canUpdateSubscriber?: (subscriber?: Mapping<OnyxKey>) => boolean, notifyConnectSubscribers?: boolean, notifyWithOnyxSubscribers?: boolean): void;
|
|
149
149
|
/**
|
|
150
150
|
* Sends the data obtained from the keys to the connection. It either:
|
|
151
151
|
* - sets state on the withOnyxInstances
|
package/dist/OnyxUtils.js
CHANGED
|
@@ -67,6 +67,8 @@ const evictionBlocklist = {};
|
|
|
67
67
|
let defaultKeyStates = {};
|
|
68
68
|
let batchUpdatesPromise = null;
|
|
69
69
|
let batchUpdatesQueue = [];
|
|
70
|
+
// Used for comparison with a new update to avoid invoking the Onyx.connect callback with the same data.
|
|
71
|
+
const lastConnectionCallbackData = new Map();
|
|
70
72
|
let snapshotKey = null;
|
|
71
73
|
function getSnapshotKey() {
|
|
72
74
|
return snapshotKey;
|
|
@@ -625,7 +627,7 @@ function keysChanged(collectionKey, partialCollection, partialPreviousCollection
|
|
|
625
627
|
* @example
|
|
626
628
|
* keyChanged(key, value, subscriber => subscriber.initWithStoredValues === false)
|
|
627
629
|
*/
|
|
628
|
-
function keyChanged(key, value, previousValue, canUpdateSubscriber = () => true,
|
|
630
|
+
function keyChanged(key, value, previousValue, canUpdateSubscriber = () => true, notifyConnectSubscribers = true, notifyWithOnyxSubscribers = true) {
|
|
629
631
|
var _a, _b;
|
|
630
632
|
// Add or remove this key from the recentlyAccessedKeys lists
|
|
631
633
|
if (value !== null) {
|
|
@@ -657,7 +659,10 @@ function keyChanged(key, value, previousValue, canUpdateSubscriber = () => true,
|
|
|
657
659
|
}
|
|
658
660
|
// Subscriber is a regular call to connect() and provided a callback
|
|
659
661
|
if (typeof subscriber.callback === 'function') {
|
|
660
|
-
if (!
|
|
662
|
+
if (!notifyConnectSubscribers) {
|
|
663
|
+
continue;
|
|
664
|
+
}
|
|
665
|
+
if (lastConnectionCallbackData.has(subscriber.connectionID) && lastConnectionCallbackData.get(subscriber.connectionID) === value) {
|
|
661
666
|
continue;
|
|
662
667
|
}
|
|
663
668
|
if (isCollectionKey(subscriber.key) && subscriber.waitForCollectionCallback) {
|
|
@@ -668,11 +673,12 @@ function keyChanged(key, value, previousValue, canUpdateSubscriber = () => true,
|
|
|
668
673
|
}
|
|
669
674
|
const subscriberCallback = subscriber.callback;
|
|
670
675
|
subscriberCallback(value, key);
|
|
676
|
+
lastConnectionCallbackData.set(subscriber.connectionID, value);
|
|
671
677
|
continue;
|
|
672
678
|
}
|
|
673
679
|
// Subscriber connected via withOnyx() HOC
|
|
674
680
|
if ('withOnyxInstance' in subscriber && subscriber.withOnyxInstance) {
|
|
675
|
-
if (!
|
|
681
|
+
if (!notifyWithOnyxSubscribers) {
|
|
676
682
|
continue;
|
|
677
683
|
}
|
|
678
684
|
const selector = subscriber.selector;
|
|
@@ -784,7 +790,14 @@ function sendDataToConnection(mapping, value, matchedKey, isBatched) {
|
|
|
784
790
|
// If we would pass undefined to setWithOnyxInstance instead, withOnyx would not set the value in the state.
|
|
785
791
|
// withOnyx will internally replace null values with undefined and never pass null values to wrapped components.
|
|
786
792
|
// For regular callbacks, we never want to pass null values, but always just undefined if a value is not set in cache or storage.
|
|
787
|
-
|
|
793
|
+
const valueToPass = value === null ? undefined : value;
|
|
794
|
+
const lastValue = lastConnectionCallbackData.get(mapping.connectionID);
|
|
795
|
+
lastConnectionCallbackData.get(mapping.connectionID);
|
|
796
|
+
// If the value has not changed we do not need to trigger the callback
|
|
797
|
+
if (lastConnectionCallbackData.has(mapping.connectionID) && valueToPass === lastValue) {
|
|
798
|
+
return;
|
|
799
|
+
}
|
|
800
|
+
(_b = (_a = mapping).callback) === null || _b === void 0 ? void 0 : _b.call(_a, valueToPass, matchedKey);
|
|
788
801
|
}
|
|
789
802
|
/**
|
|
790
803
|
* We check to see if this key is flagged as safe for eviction and add it to the recentlyAccessedKeys list so that when we
|