@modern-kit/react
Version:
44 lines (41 loc) • 1.22 kB
JavaScript
import { noop } from '@modern-kit/utils';
import { usePreservedCallback } from '../usePreservedCallback/index.mjs';
import { useSyncExternalStore } from 'react';
const getSnapshot = () => {
return navigator.onLine;
};
const getServerSnapshot = () => {
return true;
};
const subscribe = (onStoreChange, onlineAction, offlineAction) => {
const handleOnlineCallback = (event) => {
onlineAction(event);
return onStoreChange();
};
const handleOfflineCallback = (event) => {
offlineAction(event);
return onStoreChange();
};
window.addEventListener("online", handleOnlineCallback);
window.addEventListener("offline", handleOfflineCallback);
return () => {
window.removeEventListener("online", handleOnlineCallback);
window.removeEventListener("offline", handleOfflineCallback);
};
};
function useNetwork({
onlineAction = noop,
offlineAction = noop
} = {}) {
const preservedSubscribe = usePreservedCallback(
(onStoreChange) => subscribe(onStoreChange, onlineAction, offlineAction)
);
const isOnline = useSyncExternalStore(
preservedSubscribe,
getSnapshot,
getServerSnapshot
);
return isOnline;
}
export { useNetwork };
//# sourceMappingURL=index.mjs.map