aboutsummaryrefslogtreecommitdiff
path: root/src/store/throttleMiddleware.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/store/throttleMiddleware.js')
-rw-r--r--src/store/throttleMiddleware.js36
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);
+ };
+};