diff --git a/lib/Onyx.js b/lib/Onyx.js index f9efe7984..123085ebe 100644 --- a/lib/Onyx.js +++ b/lib/Onyx.js @@ -20,6 +20,8 @@ const METHOD = { MERGE_COLLECTION: 'mergecollection', MULTI_SET: 'multiset', CLEAR: 'clear', + SCHEDULE_SUBSCRIBER_UPDATE: 'scheduleSubscriberUpdate', + SCHEDULE_NOTIFY_COLLECTION_SUBSCRIBERS: 'scheduleNotifyCollectionSubscribers', }; const ON_CLEAR = 'on_clear'; @@ -947,6 +949,10 @@ function disconnect(connectionID, keyToRemoveFromEvictionBlocklist) { * @returns {Promise} */ function scheduleSubscriberUpdate(key, value, canUpdateSubscriber) { + if (ActiveClientManager.isClientTheLeader()) { + Broadcast.sendMessage({type: METHOD.SCHEDULE_SUBSCRIBER_UPDATE, key, value}); + } + const promise = Promise.resolve().then(() => keyChanged(key, value, canUpdateSubscriber, true, false)); batchUpdates(() => keyChanged(key, value, canUpdateSubscriber, false, true)); return Promise.all([maybeFlushBatchUpdates(), promise]); @@ -962,6 +968,9 @@ function scheduleSubscriberUpdate(key, value, canUpdateSubscriber) { * @returns {Promise} */ function scheduleNotifyCollectionSubscribers(key, value) { + if (ActiveClientManager.isClientTheLeader()) { + Broadcast.sendMessage({type: METHOD.SCHEDULE_NOTIFY_COLLECTION_SUBSCRIBERS, key, value}); + } const promise = Promise.resolve().then(() => keysChanged(key, value, true, false)); batchUpdates(() => keysChanged(key, value, false, true)); return Promise.all([maybeFlushBatchUpdates(), promise]); @@ -1416,7 +1425,6 @@ function clear(keysToPreserve = []) { .then(() => Storage.multiSet(defaultKeyValuePairs)) .then(() => { isClearing = false; - Broadcast.sendMessage({type: METHOD.CLEAR, keysToPreserve}); DevTools.clearState(keysToPreserve); return Promise.all(updatePromises); }); @@ -1585,30 +1593,41 @@ function onClear(callback) { */ function subscribeToEvents() { Broadcast.subscribe(({data}) => { - if (!ActiveClientManager.isClientTheLeader()) { - return; - } - switch (data.type) { - case METHOD.CLEAR: - clear(data.keysToPreserve); - break; - case METHOD.SET: - set(data.key, data.value); - break; - case METHOD.MULTI_SET: - multiSet(data.key, data.value); - break; - case METHOD.MERGE: - merge(data.key, data.changes); - break; - case ON_CLEAR: - if (!onClearCallback) { + if (ActiveClientManager.isClientTheLeader()) { + switch (data.type) { + case METHOD.CLEAR: + clear(data.keysToPreserve); break; - } - onClearCallback(); - break; - default: - break; + case METHOD.SET: + set(data.key, data.value); + break; + case METHOD.MULTI_SET: + multiSet(data.data); + break; + case METHOD.MERGE: + merge(data.key, data.changes); + break; + + case ON_CLEAR: + if (!onClearCallback) { + break; + } + onClearCallback(); + break; + default: + break; + } + } else { + switch (data.type) { + case METHOD.SCHEDULE_SUBSCRIBER_UPDATE: + scheduleSubscriberUpdate(data.key, data.value); + break; + case METHOD.SCHEDULE_NOTIFY_COLLECTION_SUBSCRIBERS: + scheduleNotifyCollectionSubscribers(data.key, data.value); + break; + default: + break; + } } }); }