diff options
Diffstat (limited to 'src/store/throttleMiddleware.js')
-rw-r--r-- | src/store/throttleMiddleware.js | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/store/throttleMiddleware.js b/src/store/throttleMiddleware.js new file mode 100644 index 00000000..d5a98add --- /dev/null +++ b/src/store/throttleMiddleware.js @@ -0,0 +1,36 @@ +import { batch } from 'react-redux'; + +const threshold = 3; +const interval = 1500; + +export default () => (next) => { + const buffer = []; + let throttle = false; + let counter = 0; + + setInterval(() => { + if (throttle) { + if (buffer.length < threshold) { + throttle = false; + } + batch(() => buffer.splice(0, buffer.length).forEach((action) => next(action))); + } else { + if (counter > threshold) { + throttle = true; + } + counter = 0; + } + }, interval); + + return (action) => { + if (action.type === 'devices/update' || action.type === 'positions/update') { + if (throttle) { + buffer.push(action); + return null; + } + counter += 1; + return next(action); + } + return next(action); + }; +}; |