UNPKG

@mui/internal-docs-infra

Version:

MUI Infra - internal documentation creation tools.

39 lines 1.3 kB
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import * as React from 'react'; export function useOnIdle(callback) { var timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000; var _React$useState = React.useState(false), _React$useState2 = _slicedToArray(_React$useState, 2), isIdle = _React$useState2[0], setIsIdle = _React$useState2[1]; var callbackRef = React.useRef(callback); callbackRef.current = callback; React.useEffect(function () { if (typeof window === 'undefined') { return undefined; } var handleIdle = function handleIdle() { var _callbackRef$current; (_callbackRef$current = callbackRef.current) == null || _callbackRef$current.call(callbackRef); setIsIdle(true); }; var idleCallbackId; var timeoutId; if ('requestIdleCallback' in window) { idleCallbackId = window.requestIdleCallback(handleIdle, { timeout: timeout }); } else { timeoutId = setTimeout(handleIdle, timeout); } return function () { if (idleCallbackId && 'cancelIdleCallback' in window) { window.cancelIdleCallback(idleCallbackId); } if (timeoutId) { clearTimeout(timeoutId); } }; }, [timeout]); return isIdle; }