auto-breadcrumb
Version:
Auto generate breadcrumb for React-Router 4.xx
58 lines (49 loc) • 1.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.replaceParams = undefined;
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _reactRouterDom = require('react-router-dom');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var paramRegx = /{{([a-zA-Z_$][a-zA-Z0-9_$]*)}}/;
var replaceParams = exports.replaceParams = function replaceParams(names, params) {
var match = paramRegx.exec(names);
while (match) {
names = names.replace(match[0], params[match[1]]);
match = paramRegx.exec(names);
}
return names;
};
exports.default = function (url, _ref) {
var _ref$staticRoutesMap = _ref.staticRoutesMap,
staticRoutesMap = _ref$staticRoutesMap === undefined ? {} : _ref$staticRoutesMap,
_ref$dynamicRoutesMap = _ref.dynamicRoutesMap,
dynamicRoutesMap = _ref$dynamicRoutesMap === undefined ? {} : _ref$dynamicRoutesMap;
var names = staticRoutesMap[url];
if (!names) {
(0, _keys2.default)(dynamicRoutesMap).some(function (pathname) {
var pathMatchResult = (0, _reactRouterDom.matchPath)(url, {
path: pathname,
exact: true,
strict: true
});
if (pathMatchResult) {
var params = pathMatchResult.params;
names = dynamicRoutesMap[pathname];
if (Array.isArray(names)) {
names = names.map(function (name) {
return typeof name === 'function' ? name(params) : replaceParams(name, params);
});
} else if (typeof names === 'function') {
names = names(params);
} else {
names = replaceParams(names, params);
}
}
return pathMatchResult;
});
}
return names;
};