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