UNPKG

antd

Version:

An enterprise-class UI design language and React-based implementation

119 lines (111 loc) 4.45 kB
import _classCallCheck from 'babel-runtime/helpers/classCallCheck'; import _createClass from 'babel-runtime/helpers/createClass'; import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn'; import _inherits from 'babel-runtime/helpers/inherits'; import * as React from 'react'; import * as PropTypes from 'prop-types'; import { cloneElement } from 'react'; import warning from '../_util/warning'; import BreadcrumbItem from './BreadcrumbItem'; import classNames from 'classnames'; function getBreadcrumbName(route, params) { if (!route.breadcrumbName) { return null; } var paramsKeys = Object.keys(params).join('|'); var name = route.breadcrumbName.replace(new RegExp(':(' + paramsKeys + ')', 'g'), function (replacement, key) { return params[key] || replacement; }); return name; } function defaultItemRender(route, params, routes, paths) { var isLastItem = routes.indexOf(route) === routes.length - 1; var name = getBreadcrumbName(route, params); return isLastItem ? React.createElement( 'span', null, name ) : React.createElement( 'a', { href: '#/' + paths.join('/') }, name ); } var Breadcrumb = function (_React$Component) { _inherits(Breadcrumb, _React$Component); function Breadcrumb() { _classCallCheck(this, Breadcrumb); return _possibleConstructorReturn(this, (Breadcrumb.__proto__ || Object.getPrototypeOf(Breadcrumb)).apply(this, arguments)); } _createClass(Breadcrumb, [{ key: 'componentDidMount', value: function componentDidMount() { var props = this.props; warning(!('linkRender' in props || 'nameRender' in props), '`linkRender` and `nameRender` are removed, please use `itemRender` instead, ' + 'see: https://u.ant.design/item-render.'); } }, { key: 'render', value: function render() { var crumbs = void 0; var _props = this.props, separator = _props.separator, prefixCls = _props.prefixCls, style = _props.style, className = _props.className, routes = _props.routes, _props$params = _props.params, params = _props$params === undefined ? {} : _props$params, children = _props.children, _props$itemRender = _props.itemRender, itemRender = _props$itemRender === undefined ? defaultItemRender : _props$itemRender; if (routes && routes.length > 0) { var paths = []; crumbs = routes.map(function (route) { route.path = route.path || ''; var path = route.path.replace(/^\//, ''); Object.keys(params).forEach(function (key) { path = path.replace(':' + key, params[key]); }); if (path) { paths.push(path); } return React.createElement( BreadcrumbItem, { separator: separator, key: route.breadcrumbName || path }, itemRender(route, params, routes, paths) ); }); } else if (children) { crumbs = React.Children.map(children, function (element, index) { if (!element) { return element; } warning(element.type && element.type.__ANT_BREADCRUMB_ITEM, 'Breadcrumb only accepts Breadcrumb.Item as it\'s children'); return cloneElement(element, { separator: separator, key: index }); }); } return React.createElement( 'div', { className: classNames(className, prefixCls), style: style }, crumbs ); } }]); return Breadcrumb; }(React.Component); export default Breadcrumb; Breadcrumb.defaultProps = { prefixCls: 'ant-breadcrumb', separator: '/' }; Breadcrumb.propTypes = { prefixCls: PropTypes.string, separator: PropTypes.node, routes: PropTypes.array, params: PropTypes.object, linkRender: PropTypes.func, nameRender: PropTypes.func };