UNPKG

react-before-leave

Version:

React component and hook which listens to `beforeunload` on the window when mounted.

39 lines (33 loc) 1.38 kB
'use strict'; 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;