UNPKG

choerodon-ui

Version:

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

154 lines (131 loc) 4.8 kB
import _classCallCheck from "@babel/runtime/helpers/classCallCheck"; import _createClass from "@babel/runtime/helpers/createClass"; import _inherits from "@babel/runtime/helpers/inherits"; import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn"; import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf"; function _createSuper(Derived) { 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; } } return function () { var Super = _getPrototypeOf(Derived), result; if (isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } import React, { Children, cloneElement, Component } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import warning from '../_util/warning'; import BreadcrumbItem from './BreadcrumbItem'; import { getPrefixCls } from '../configure'; function getBreadcrumbName(route, params) { if (!route.breadcrumbName) { return null; } var paramsKeys = Object.keys(params).join('|'); var name = route.breadcrumbName.replace(new RegExp(":(".concat(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: "#/".concat(paths.join('/')) }, name); } var Breadcrumb = /*#__PURE__*/ function (_Component) { _inherits(Breadcrumb, _Component); var _super = _createSuper(Breadcrumb); function Breadcrumb() { _classCallCheck(this, Breadcrumb); return _super.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'); } }, { key: "render", value: function render() { var crumbs; var _this$props = this.props, separator = _this$props.separator, prefixCls = _this$props.prefixCls, style = _this$props.style, className = _this$props.className, routes = _this$props.routes, _this$props$params = _this$props.params, params = _this$props$params === void 0 ? {} : _this$props$params, children = _this$props.children, _this$props$itemRende = _this$props.itemRender, itemRender = _this$props$itemRende === void 0 ? defaultItemRender : _this$props$itemRende; 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(":".concat(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 = Children.map(children, function (element, index) { if (!element) { return element; } warning(element.type && element.type.__C7N_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, getPrefixCls('breadcrumb', prefixCls)), style: style }, crumbs); } }]); return Breadcrumb; }(Component); export { Breadcrumb as default }; Breadcrumb.displayName = 'Breadcrumb'; Breadcrumb.defaultProps = { separator: '/' }; Breadcrumb.propTypes = { prefixCls: PropTypes.string, separator: PropTypes.node, routes: PropTypes.array, params: PropTypes.object, itemRender: PropTypes.func }; //# sourceMappingURL=Breadcrumb.js.map