diff --git a/node_modules/redux-persist/es/createPersistoid.js b/node_modules/redux-persist/es/createPersistoid.js index 8b43b9a..184faab 100644 --- a/node_modules/redux-persist/es/createPersistoid.js +++ b/node_modules/redux-persist/es/createPersistoid.js @@ -6,6 +6,7 @@ export default function createPersistoid(config) { var whitelist = config.whitelist || null; var transforms = config.transforms || []; var throttle = config.throttle || 0; + var debounce = config.debounce || 0; var storageKey = "".concat(config.keyPrefix !== undefined ? config.keyPrefix : KEY_PREFIX).concat(config.key); var storage = config.storage; var serialize; @@ -28,30 +29,37 @@ export default function createPersistoid(config) { var timeIterator = null; var writePromise = null; - var update = function update(state) { - // add any changed keys to the queue - Object.keys(state).forEach(function (key) { - if (!passWhitelistBlacklist(key)) return; // is keyspace ignored? noop + // Timer for debounced `update()` + let timer = 0; - if (lastState[key] === state[key]) return; // value unchanged? noop + function update(state) { + // Debounce the update + clearTimeout(timer); + timer = setTimeout(() => { + // add any changed keys to the queue + Object.keys(state).forEach(function (key) { + if (!passWhitelistBlacklist(key)) return; // is keyspace ignored? noop - if (keysToProcess.indexOf(key) !== -1) return; // is key already queued? noop + if (lastState[key] === state[key]) return; // value unchanged? noop - keysToProcess.push(key); // add key to queue - }); //if any key is missing in the new state which was present in the lastState, - //add it for processing too + if (keysToProcess.indexOf(key) !== -1) return; // is key already queued? noop - Object.keys(lastState).forEach(function (key) { - if (state[key] === undefined && passWhitelistBlacklist(key) && keysToProcess.indexOf(key) === -1 && lastState[key] !== undefined) { - keysToProcess.push(key); - } - }); // start the time iterator if not running (read: throttle) + keysToProcess.push(key); // add key to queue + }); //if any key is missing in the new state which was present in the lastState, + //add it for processing too - if (timeIterator === null) { - timeIterator = setInterval(processNextKey, throttle); - } + Object.keys(lastState).forEach(function (key) { + if (state[key] === undefined && passWhitelistBlacklist(key) && keysToProcess.indexOf(key) === -1 && lastState[key] !== undefined) { + keysToProcess.push(key); + } + }); // start the time iterator if not running (read: throttle) + + if (timeIterator === null) { + timeIterator = setInterval(processNextKey, throttle); + } - lastState = state; + lastState = state; + }, debounce) }; function processNextKey() { diff --git a/node_modules/redux-persist/es/types.js.flow b/node_modules/redux-persist/es/types.js.flow index c50d3cd..39d8be2 100644 --- a/node_modules/redux-persist/es/types.js.flow +++ b/node_modules/redux-persist/es/types.js.flow @@ -19,6 +19,7 @@ export type PersistConfig = { whitelist?: Array, transforms?: Array, throttle?: number, + debounce?: number, migrate?: (PersistedState, number) => Promise, stateReconciler?: false | Function, getStoredState?: PersistConfig => Promise, // used for migrations diff --git a/node_modules/redux-persist/lib/types.js.flow b/node_modules/redux-persist/lib/types.js.flow index c50d3cd..39d8be2 100644 --- a/node_modules/redux-persist/lib/types.js.flow +++ b/node_modules/redux-persist/lib/types.js.flow @@ -19,6 +19,7 @@ export type PersistConfig = { whitelist?: Array, transforms?: Array, throttle?: number, + debounce?: number, migrate?: (PersistedState, number) => Promise, stateReconciler?: false | Function, getStoredState?: PersistConfig => Promise, // used for migrations diff --git a/node_modules/redux-persist/src/types.js b/node_modules/redux-persist/src/types.js index c50d3cd..39d8be2 100644 --- a/node_modules/redux-persist/src/types.js +++ b/node_modules/redux-persist/src/types.js @@ -19,6 +19,7 @@ export type PersistConfig = { whitelist?: Array, transforms?: Array, throttle?: number, + debounce?: number, migrate?: (PersistedState, number) => Promise, stateReconciler?: false | Function, getStoredState?: PersistConfig => Promise, // used for migrations diff --git a/node_modules/redux-persist/types/types.d.ts b/node_modules/redux-persist/types/types.d.ts index b3733bc..2a1696c 100644 --- a/node_modules/redux-persist/types/types.d.ts +++ b/node_modules/redux-persist/types/types.d.ts @@ -35,6 +35,7 @@ declare module "redux-persist/es/types" { whitelist?: Array; transforms?: Array>; throttle?: number; + debounce?: number; migrate?: PersistMigrate; stateReconciler?: false | StateReconciler; /**