@hypothesis/frontend-shared
Version:
Shared components, styles and utilities for Hypothesis projects
26 lines (25 loc) • 953 B
JavaScript
import { useEffect } from 'preact/hooks';
const noop = () => {};
/**
* Registers an event listener to window's 'beforeunload' if `hasUnsavedData` is true.
* It also unregisters the event if `hasUnsavedData` is false or the component is unmounted.
*
* This event listener makes the browser warn the user about potential unsaved changes,
* and gives the user the opportunity to cancel the page unload if desired.
*
* @link https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
*/
export function useWarnOnPageUnload(hasUnsavedData, window_ = window) {
useEffect(() => {
if (!hasUnsavedData) {
return noop;
}
const listener = e => {
e.preventDefault();
e.returnValue = '';
};
window_.addEventListener('beforeunload', listener);
return () => window_.removeEventListener('beforeunload', listener);
}, [hasUnsavedData, window_]);
}
//# sourceMappingURL=use-warn-on-page-unload.js.map