@react-navigation/core
Version:
Core utilities for building navigators
48 lines (47 loc) • 2.53 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.usePreventRemove = usePreventRemove;
var _nonSecure = require("nanoid/non-secure");
var React = _interopRequireWildcard(require("react"));
var _useLatestCallback = _interopRequireDefault(require("use-latest-callback"));
var _useNavigation = require("./useNavigation.js");
var _usePreventRemoveContext = require("./usePreventRemoveContext.js");
var _useRoute = require("./useRoute.js");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
/**
* Hook to prevent screen from being removed. Can be used to prevent users from leaving the screen.
*
* @param preventRemove Boolean indicating whether to prevent screen from being removed.
* @param callback Function which is executed when screen was prevented from being removed.
*/
function usePreventRemove(preventRemove, callback) {
const [id] = React.useState(() => (0, _nonSecure.nanoid)());
const navigation = (0, _useNavigation.useNavigation)();
const {
key: routeKey
} = (0, _useRoute.useRoute)();
const {
setPreventRemove
} = (0, _usePreventRemoveContext.usePreventRemoveContext)();
React.useEffect(() => {
setPreventRemove(id, routeKey, preventRemove);
return () => {
setPreventRemove(id, routeKey, false);
};
}, [setPreventRemove, id, routeKey, preventRemove]);
const beforeRemoveListener = (0, _useLatestCallback.default)(e => {
if (!preventRemove) {
return;
}
e.preventDefault();
callback({
data: e.data
});
});
React.useEffect(() => navigation?.addListener('beforeRemove', beforeRemoveListener), [navigation, beforeRemoveListener]);
}
//# sourceMappingURL=usePreventRemove.js.map
;