diff --git a/webapp/packages/core-blocks/src/index.ts b/webapp/packages/core-blocks/src/index.ts index b5d10a5310..b161398c9d 100644 --- a/webapp/packages/core-blocks/src/index.ts +++ b/webapp/packages/core-blocks/src/index.ts @@ -143,6 +143,7 @@ export * from './useObservableRef'; export * from './useStateDelay'; export * from './useErrorDetails'; export * from './useAppLoadingScreen'; +export * from './useInterval'; export * from './BlocksLocaleService'; export * from './Snackbars/NotificationMark'; export * from './Snackbars/SnackbarMarkups/SnackbarWrapper'; diff --git a/webapp/packages/core-blocks/src/useInterval.ts b/webapp/packages/core-blocks/src/useInterval.ts new file mode 100644 index 0000000000..9ea24be22f --- /dev/null +++ b/webapp/packages/core-blocks/src/useInterval.ts @@ -0,0 +1,28 @@ +/* + * CloudBeaver - Cloud Database Manager + * Copyright (C) 2020-2022 DBeaver Corp and others + * + * Licensed under the Apache License, Version 2.0. + * you may not use this file except in compliance with the License. + */ + +import { useEffect } from 'react'; + +import { useObjectRef } from './useObjectRef'; + +export function useInterval(callback: () => void, delay: number | null) { + const state = useObjectRef({ callback }); + + useEffect(() => { + if (delay === null) { + return; + } + + const tick = () => { + state.callback(); + }; + + const id = setInterval(tick, delay); + return () => clearInterval(id); + }, [delay]); +} \ No newline at end of file