@mui/internal-docs-infra
Version:
MUI Infra - internal documentation creation tools.
39 lines • 1.3 kB
JavaScript
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;
}