All files / src/hooks/common UseInterval.js

100% Statements 12/12
100% Branches 0/0
100% Functions 5/5
100% Lines 11/11

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 36 37 38 39 40 41 42 43 44 45 46 47                                                  1x 1x 1x   1x 6x   6x 5x     6x   9x   5x 5x          
/*
 *      Copyright (C) 2010 - 2025 VREM Software Development <VREMSoftwareDevelopment@gmail.com>
 *
 *      Licensed under the Apache License, Version 2.0 (the "License");
 *      you may not use this file except in compliance with the License.
 *      You may obtain a copy of the License at
 *
 *           http: //www.apache.org/licenses/LICENSE-2.0
 *
 *      Unless required by applicable law or agreed to in writing, software
 *      distributed under the License is distributed on an "AS IS" BASIS,
 *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *      See the License for the specific language governing permissions and
 *      limitations under the License.
 *
 * Bandwidth Monitor
 */
 
/**
 * Custom React hook for running a callback at specified intervals.
 * @param {function} callback - Function to run.
 * @param {number} delay - Interval in milliseconds.
 */
import { useEffect, useRef } from 'react';
 
export const DELAY_ONE_MINUTE = 60000;
export const DELAY_FIVE_MINUTES = 300000;
export const DELAY_TEN_MINUTES = 600000;
 
const useInterval = (callback, delay) => {
    const savedCallback = useRef();
 
    useEffect(() => {
        savedCallback.current = callback;
    }, [callback]);
 
    useEffect(() => {
        function tick() {
            savedCallback.current();
        }
        let id = setInterval(tick, delay);
        return () => clearInterval(id);
    }, [delay]);
};
 
export default useInterval;