@vve/react-router
Version:
react router for react-helper & with keep-alive
43 lines (42 loc) • 1.33 kB
JavaScript
import React from 'react';
import PropTypes from 'prop-types';
import invariant from 'tiny-invariant';
import Lifecycle from "./lifecycle";
import RouterContext from "./router-context";
/**
* The public API for prompting the user before navigating away from a screen.
*/
function Prompt(_ref) {
var message = _ref.message,
_ref$when = _ref.when,
when = _ref$when === void 0 ? true : _ref$when;
return /*#__PURE__*/React.createElement(RouterContext.Consumer, null, context => {
invariant(context, 'You should not use <Prompt> outside a <Router>');
if (!when || context.staticContext) return null;
var method = context.history.block;
return /*#__PURE__*/React.createElement(Lifecycle, {
onMount: self => {
self.release = method(message);
},
onUpdate: (self, prevProps) => {
if (prevProps.message !== message) {
self.release();
self.release = method(message);
}
},
onUnmount: self => {
self.release();
},
message: message
});
});
}
if (process.env.NODE_ENV !== 'production') {
var messageType = PropTypes.oneOfType([PropTypes.func, PropTypes.string]);
Prompt.propTypes = {
when: PropTypes.bool,
message: messageType.isRequired
};
}
export default Prompt;
//# sourceMappingURL=prompt.js.map