UNPKG

auto-breadcrumb

Version:

Auto generate breadcrumb for React-Router 4.xx

111 lines (94 loc) 3.91 kB
'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;