/
githubmirror
/
ydb-embedded-ui
Обзор
Документация
Войти
/
githubmirror
/
ydb-embedded-ui
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/utils/hooks/useAutoRefreshInterval.ts
56 строк
2 KB
Артём Муфазалов
feat: configure meta settings, use for table columns width (#3068)
14 ноя 2025, 16:32
Не верифицирован
14 ноя 2025, 16:32
56f1fc6
Код
Авторство
О чём код?
import React from 'react'; import {SETTING_KEYS} from '../../store/reducers/settings/constants'; import {useSetting} from './useSetting'; const IMMEDIATE_UPDATE_INTERVAL = 1; const DISABLED_INTERVAL = 0; export function useAutoRefreshInterval(): [number, (value: number) => void] { const [settingValue, setSettingValue] = useSetting( SETTING_KEYS.AUTO_REFRESH_INTERVAL, DISABLED_INTERVAL, ); const [effectiveInterval, setEffectiveInterval] = React.useState( document.visibilityState === 'visible' ? settingValue : DISABLED_INTERVAL, ); const lastHiddenTimeRef = React.useRef<number | null>(null); React.useEffect(() => { setEffectiveInterval(document.visibilityState === 'visible' ? settingValue : 0); const handleVisibilityChange = () => { const isVisible = document.visibilityState === 'visible'; if (isVisible) { // If more than settingValue milliseconds have passed since the page was hidden, // trigger an immediate update const shouldTriggerImmediate = lastHiddenTimeRef.current && settingValue !== DISABLED_INTERVAL && Date.now() - lastHiddenTimeRef.current >= settingValue; if (shouldTriggerImmediate) { setEffectiveInterval(IMMEDIATE_UPDATE_INTERVAL); setTimeout(() => { setEffectiveInterval(settingValue); }, 0); } else { setEffectiveInterval(settingValue); } lastHiddenTimeRef.current = null; } else { lastHiddenTimeRef.current = Date.now(); setEffectiveInterval(DISABLED_INTERVAL); } }; document.addEventListener('visibilitychange', handleVisibilityChange); return () => document.removeEventListener('visibilitychange', handleVisibilityChange); }, [settingValue]); return [effectiveInterval, setSettingValue]; }