Files
DiceCloud/app/imports/ui/utility/debounceUpdate.js
2019-02-06 17:26:56 +02:00

44 lines
1.2 KiB
JavaScript

/*
* Creates a function that takes an object which represents the updates to be
* made as key: value pairs. The function collects these updates, (overwriting
* duplicates), and runs the given callback with the collated updates after the
* `time` has passed without the function being called.
*/
export default function debounceUpdate(callback, time = 300){
let collatedUpdate = {};
let interval;
return (update, ...rest) => {
// Every time we're called, collect the update
for (key in update){
collatedUpdate[key] = update[key];
}
// Reset the clock and set it again to run the callback
clearTimeout(interval);
interval = setTimeout(() => {
// Clock timed out, apply all the collated updates
callback(collatedUpdate, ...rest);
// Reset the collation
collatedUpdate = {};
}, time);
};
};
// Example use
//
// let f = update => {
// console.log({wroteUpdate: update});
// };
// let df = debounceUpdate(f, 300);
// df({name: 'john'});
// df({name: 'jack'});
// df({age: 24, country: 'Ethiopia'});
// df({transport: 'bus'});
//
// --> { wroteUpdate: {
// name: 'jack',
// age: 24,
// country: 'Ethiopia',
// transport: 'bus'
// }}