react-before-leave
Version:
React component and hook which listens to `beforeunload` on the window when mounted.
39 lines (33 loc) • 1.38 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var React = _interopDefault(require('react'));
var reactRouter = require('react-router');
const useBeforeleave = ({ message, exact = true, path = '', enableUnload = true, enableRouter = true, }) => {
React.useEffect(() => {
if (enableUnload) {
const onBeforeUnload = (event) => {
event.returnValue = message;
return message;
};
window.addEventListener('beforeunload', onBeforeUnload);
return () => window.removeEventListener('beforeunload', onBeforeUnload);
}
}, []);
const history = enableRouter ? reactRouter.useHistory() : null;
React.useEffect(() => {
if (history && enableRouter) {
const unbind = history.listen(listener => {
if (reactRouter.matchPath(listener.pathname, { exact, path: !!path ? path : location.pathname }))
history.block(message);
});
return () => unbind();
}
}, []);
};
const BeforeLeave = (props) => {
useBeforeleave(props);
return null;
};
exports.BeforeLeave = BeforeLeave;
exports.useBeforeleave = useBeforeleave;