react-router-alive
Version:
A keep-alive route component for react-router
247 lines (197 loc) • 7.32 kB
JavaScript
;
var React = require('react');
var invariant = require('tiny-invariant');
var warning = require('tiny-warning');
var reactRouter = require('react-router');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
var invariant__default = /*#__PURE__*/_interopDefaultLegacy(invariant);
var warning__default = /*#__PURE__*/_interopDefaultLegacy(warning);
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
return Constructor;
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
}
return target;
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
writable: true,
configurable: true
}
});
if (superClass) _setPrototypeOf(subClass, superClass);
}
function _getPrototypeOf(o) {
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
};
return _getPrototypeOf(o);
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
function _isNativeReflectConstruct() {
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
if (Reflect.construct.sham) return false;
if (typeof Proxy === "function") return true;
try {
Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
return true;
} catch (e) {
return false;
}
}
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
function _possibleConstructorReturn(self, call) {
if (call && (typeof call === "object" || typeof call === "function")) {
return call;
}
return _assertThisInitialized(self);
}
function _createSuper(Derived) {
var hasNativeReflectConstruct = _isNativeReflectConstruct();
return function _createSuperInternal() {
var Super = _getPrototypeOf(Derived),
result;
if (hasNativeReflectConstruct) {
var NewTarget = _getPrototypeOf(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else {
result = Super.apply(this, arguments);
}
return _possibleConstructorReturn(this, result);
};
}
/**
* The public API for matching a single path and rendering.
*/
var Route = /*#__PURE__*/function (_React$Component) {
_inherits(Route, _React$Component);
var _super = _createSuper(Route);
function Route(props) {
var _this;
_classCallCheck(this, Route);
_this = _super.call(this, props);
_this.wrapperRef = React__default['default'].createRef();
return _this;
}
_createClass(Route, [{
key: "render",
value: function render() {
var _this2 = this;
return /*#__PURE__*/React__default['default'].createElement(reactRouter.__RouterContext.Consumer, null, function (context) {
invariant__default['default'](context, 'You should not use <Route> outside a <Router>');
var location = _this2.props.location || context.location;
var match = _this2.props.computedMatch ? _this2.props.computedMatch // <Switch> already computed the match for us
: _this2.props.path ? reactRouter.matchPath(location.pathname, _this2.props) : context.match;
var props = _objectSpread2(_objectSpread2({}, context), {}, {
location: location,
match: match
});
var _this2$props = _this2.props,
children = _this2$props.children,
component = _this2$props.component,
render = _this2$props.render,
activeClass = _this2$props.activeClass,
disactiveClass = _this2$props.disactiveClass; // Preact uses an empty array as children by
// default, so use null if that's the case.
if (Array.isArray(children) && children.length === 0) {
children = null;
}
if (typeof children === 'function') {
children = children(props);
if (children === undefined) {
if (__DEV__) {
var path = _this2.props.path;
warning__default['default'](false, 'You returned `undefined` from the `children` function of ' + "<Route".concat(path ? " path=\"".concat(path, "\"") : '', ">, but you ") + 'should have returned a React element or `null`');
}
children = null;
}
}
var className = "".concat((props.match ? activeClass : disactiveClass) || '');
return /*#__PURE__*/React__default['default'].createElement(reactRouter.__RouterContext.Provider, {
value: props
}, /*#__PURE__*/React__default['default'].createElement("div", {
ref: _this2.wrapperRef,
className: className,
style: {
display: props.match ? 'block' : 'none'
}
}, component ? React__default['default'].createElement(component, props) : null));
});
}
}]);
return Route;
}(React__default['default'].Component);
var index = {
AliveRoute: Route
};
module.exports = index;