auto-breadcrumb
Version:
Auto generate breadcrumb for React-Router 4.xx
111 lines (94 loc) • 3.91 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactRouterDom = require('react-router-dom');
var _pathToName = require('./pathToName');
var _pathToName2 = _interopRequireDefault(_pathToName);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var defaultItemRender = function defaultItemRender(name, path) {
return path ? _react2.default.createElement(
_reactRouterDom.Link,
{ to: path },
name
) : name;
};
var Breadcrumbs = function Breadcrumbs(_ref) {
var _ref$staticRoutesMap = _ref.staticRoutesMap,
staticRoutesMap = _ref$staticRoutesMap === undefined ? {} : _ref$staticRoutesMap,
_ref$dynamicRoutesMap = _ref.dynamicRoutesMap,
dynamicRoutesMap = _ref$dynamicRoutesMap === undefined ? {} : _ref$dynamicRoutesMap,
_ref$homePath = _ref.homePath,
homePath = _ref$homePath === undefined ? '/' : _ref$homePath,
_ref$containerProps = _ref.containerProps,
containerProps = _ref$containerProps === undefined ? {} : _ref$containerProps,
_ref$itemProps = _ref.itemProps,
itemProps = _ref$itemProps === undefined ? {} : _ref$itemProps,
_ref$Breadcrumb = _ref.Breadcrumb,
Breadcrumb = _ref$Breadcrumb === undefined ? 'ul' : _ref$Breadcrumb,
_ref$BreadcrumbItem = _ref.BreadcrumbItem,
BreadcrumbItem = _ref$BreadcrumbItem === undefined ? 'li' : _ref$BreadcrumbItem,
_ref$itemRender = _ref.itemRender,
itemRender = _ref$itemRender === undefined ? defaultItemRender : _ref$itemRender,
_ref$notFound = _ref.notFound,
notFound = _ref$notFound === undefined ? '404 NotFound' : _ref$notFound,
_ref$isDisplayInHome = _ref.isDisplayInHome,
isDisplayInHome = _ref$isDisplayInHome === undefined ? false : _ref$isDisplayInHome;
return function (_ref2) {
var pathname = _ref2.pathname;
if (typeof pathname !== 'string') {
throw new Error('Breadcrumbs must set string props "pathname"');
}
if (!isDisplayInHome && pathname === homePath) {
return null;
}
if (!staticRoutesMap[homePath]) {
staticRoutesMap[homePath] = 'Home';
}
var paths = homePath === '/' ? [homePath] : [];
if (pathname !== homePath || homePath !== '/') {
pathname.split('/').reduce(function (prev, curr, index) {
paths[index] = prev + '/' + curr;
return paths[index];
});
}
var lastIndex = paths.length - 1;
var BreadcrumbItems = [];
paths.every(function (path, index) {
var hasNames = (0, _pathToName2.default)(path, {
staticRoutesMap: staticRoutesMap,
dynamicRoutesMap: dynamicRoutesMap
});
var names = hasNames;
var isExact = lastIndex === index || !hasNames;
if (Array.isArray(names)) {
var subLastIndex = names.length - 1;
BreadcrumbItems = BreadcrumbItems.concat(names.map(function (name, subIndex) {
return _react2.default.createElement(
BreadcrumbItem,
(0, _extends3.default)({}, itemProps, { key: index + '.' + subIndex }),
subLastIndex !== subIndex || isExact ? itemRender(name) : itemRender(name, path)
);
}));
} else {
var name = isExact ? names && itemRender(names) || notFound : itemRender(names, path);
BreadcrumbItems = BreadcrumbItems.concat(_react2.default.createElement(
BreadcrumbItem,
(0, _extends3.default)({}, itemProps, { key: index }),
name
));
}
return hasNames;
});
return _react2.default.createElement(
Breadcrumb,
containerProps,
BreadcrumbItems
);
};
};
exports.default = Breadcrumbs;