envoc-form
Version:
Envoc form components
43 lines (42 loc) • 1.76 kB
JavaScript
;
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;