UNPKG

envoc-form

Version:

Envoc form components

43 lines (42 loc) 1.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var react_1 = require("react"); var react_router_dom_1 = require("react-router-dom"); /** Temporary function to allow backwards compatibility with routers that do not use the new Data API */ function NewFormBasedPreventNavigation(_a) { var _b = _a.promptMessage, promptMessage = _b === void 0 ? 'Changes you made may not be saved.' : _b, preventNavigate = _a.preventNavigate, navigator = _a.navigator; (0, react_router_dom_1.unstable_usePrompt)({ when: preventNavigate, message: promptMessage, }); // TODO: Once react-router fully supports usePrompt and when we do not want to support routers // that do not support the react-router Data API we can remove this. (0, react_1.useEffect)(function () { if (!preventNavigate) { return; } var unblock = function () { }; var push = navigator.push; navigator.push = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } if (window.confirm(promptMessage)) { push.apply(void 0, args); } }; window.addEventListener('beforeunload', beforeUnload); return function () { unblock(); navigator.push = push; window.removeEventListener('beforeunload', beforeUnload); }; function beforeUnload(e) { e.preventDefault(); e.returnValue = promptMessage; } }, [preventNavigate, promptMessage, navigator]); return null; } exports.default = NewFormBasedPreventNavigation;