all files / src/ utils.js

100% Statements 100/100
100% Branches 33/33
100% Functions 24/24
100% Lines 18/18
30 statements, 9 functions, 17 branches Ignored     
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35                                   
/**
 * Utility functions
 */
import requestAnimationFrame from './request-animation-frame';
 
export function filterUndefined(obj) {
    return Object.keys(obj)
        .map((key) => ({ key, value: obj[key] }))
        .filter(({ value }) => typeof value !== 'undefined')
        .reduce((acc, { key, value }) => ({ ...acc, [key]: value }), {});
}
 
export function throttle(callback) {
    let requestedFrame;
    let args;
    let self;
 
    function callbackCheck() {
        if (args || self) {
            requestedFrame = requestAnimationFrame(callbackCheck);
            callback.apply(self, args);
        } else {
            requestedFrame = null;
        }
        args = self = null;
    }
 
    return function throttleProxy(...a) {
        // eslint-disable-next-line no-unused-expressions
        requestedFrame || (requestedFrame = requestAnimationFrame(callbackCheck));
        args = a;
        self = this;
    };
}