1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/packages/utility-features/utilities/src/interval.ts
Sebastian Malton 13673eaac4 Move all utility functions to separate package
Signed-off-by: Sebastian Malton <sebastian@malton.name>
2023-03-02 13:30:24 -05:00

46 lines
1.1 KiB
TypeScript

/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
// Helper for working with time updates / data-polling callbacks
export interface IntervalFn {
start(runImmediately?: boolean): void;
stop(): void;
restart(runImmediately?: boolean): void;
readonly isRunning: boolean;
}
export function interval(timeSec = 1, callback: (count: number) => void, autoRun = false): IntervalFn {
let count = 0;
let timer = -1;
let isRunning = false;
const intervalManager = {
start(runImmediately = false) {
if (isRunning) return;
const tick = () => callback(++count);
isRunning = true;
timer = window.setInterval(tick, 1000 * timeSec);
if (runImmediately) tick();
},
stop() {
count = 0;
isRunning = false;
clearInterval(timer);
},
restart(runImmediately = false) {
this.stop();
this.start(runImmediately);
},
get isRunning() {
return isRunning;
},
};
if (autoRun) intervalManager.start();
return intervalManager;
}