ahooks
Version:
react hooks library
22 lines (21 loc) • 677 B
JavaScript
// from swr
import isBrowser from '../../../utils/isBrowser';
import isDocumentVisible from './isDocumentVisible';
import isOnline from './isOnline';
const listeners = new Set();
function subscribe(listener) {
listeners.add(listener);
return function unsubscribe() {
listeners.has(listener) && listeners.delete(listener);
};
}
if (isBrowser) {
const revalidate = () => {
if (!isDocumentVisible() || !isOnline())
return;
listeners.forEach((listener) => listener());
};
window.addEventListener('visibilitychange', revalidate, false);
window.addEventListener('focus', revalidate, false);
}
export default subscribe;