import { isBrowser } from './isBrowser';
|
import { isDocumentVisible } from './isDocumentVisible';
|
import { isOnline } from './isOnline';
|
|
type Listener = () => void;
|
|
const listeners: Listener[] = [];
|
|
if (isBrowser) {
|
const revalidate = () => {
|
if (!isDocumentVisible() || !isOnline()) return;
|
for (let i = 0; i < listeners.length; i++) {
|
const listener = listeners[i];
|
listener();
|
}
|
};
|
window.addEventListener('visibilitychange', revalidate, false);
|
window.addEventListener('focus', revalidate, false);
|
}
|
|
export default function subscribe(listener: Listener) {
|
listeners.push(listener);
|
|
return function unsubscribe() {
|
const index = listeners.indexOf(listener);
|
if (index > -1) {
|
listeners.splice(index, 1);
|
}
|
};
|
}
|