Breadcrumb.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = exports.breadcrumbProps = void 0;
  7. var _vue = require("vue");
  8. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  9. var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
  10. var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
  11. var _vueTypes = _interopRequireDefault(require("../_util/vue-types"));
  12. var _propsUtil = require("../_util/props-util");
  13. var _warning = _interopRequireDefault(require("../_util/warning"));
  14. var _BreadcrumbItem = _interopRequireDefault(require("./BreadcrumbItem"));
  15. var _menu = _interopRequireDefault(require("../menu"));
  16. var _useConfigInject2 = _interopRequireDefault(require("../_util/hooks/useConfigInject"));
  17. var breadcrumbProps = function breadcrumbProps() {
  18. return {
  19. prefixCls: String,
  20. routes: {
  21. type: Array
  22. },
  23. params: _vueTypes.default.any,
  24. separator: _vueTypes.default.any,
  25. itemRender: {
  26. type: Function
  27. }
  28. };
  29. };
  30. exports.breadcrumbProps = breadcrumbProps;
  31. function getBreadcrumbName(route, params) {
  32. if (!route.breadcrumbName) {
  33. return null;
  34. }
  35. var paramsKeys = Object.keys(params).join('|');
  36. var name = route.breadcrumbName.replace(new RegExp(":(".concat(paramsKeys, ")"), 'g'), function (replacement, key) {
  37. return params[key] || replacement;
  38. });
  39. return name;
  40. }
  41. function defaultItemRender(opt) {
  42. var route = opt.route,
  43. params = opt.params,
  44. routes = opt.routes,
  45. paths = opt.paths;
  46. var isLastItem = routes.indexOf(route) === routes.length - 1;
  47. var name = getBreadcrumbName(route, params);
  48. return isLastItem ? (0, _vue.createVNode)("span", null, [name]) : (0, _vue.createVNode)("a", {
  49. "href": "#/".concat(paths.join('/'))
  50. }, [name]);
  51. }
  52. var _default2 = (0, _vue.defineComponent)({
  53. compatConfig: {
  54. MODE: 3
  55. },
  56. name: 'ABreadcrumb',
  57. props: breadcrumbProps(),
  58. slots: ['separator', 'itemRender'],
  59. setup: function setup(props, _ref) {
  60. var slots = _ref.slots;
  61. var _useConfigInject = (0, _useConfigInject2.default)('breadcrumb', props),
  62. prefixCls = _useConfigInject.prefixCls,
  63. direction = _useConfigInject.direction;
  64. var getPath = function getPath(path, params) {
  65. path = (path || '').replace(/^\//, '');
  66. Object.keys(params).forEach(function (key) {
  67. path = path.replace(":".concat(key), params[key]);
  68. });
  69. return path;
  70. };
  71. var addChildPath = function addChildPath(paths, childPath, params) {
  72. var originalPaths = (0, _toConsumableArray2.default)(paths);
  73. var path = getPath(childPath || '', params);
  74. if (path) {
  75. originalPaths.push(path);
  76. }
  77. return originalPaths;
  78. };
  79. var genForRoutes = function genForRoutes(_ref2) {
  80. var _ref2$routes = _ref2.routes,
  81. routes = _ref2$routes === void 0 ? [] : _ref2$routes,
  82. _ref2$params = _ref2.params,
  83. params = _ref2$params === void 0 ? {} : _ref2$params,
  84. separator = _ref2.separator,
  85. _ref2$itemRender = _ref2.itemRender,
  86. itemRender = _ref2$itemRender === void 0 ? defaultItemRender : _ref2$itemRender;
  87. var paths = [];
  88. return routes.map(function (route) {
  89. var path = getPath(route.path, params);
  90. if (path) {
  91. paths.push(path);
  92. }
  93. var tempPaths = [].concat(paths);
  94. // generated overlay by route.children
  95. var overlay = null;
  96. if (route.children && route.children.length) {
  97. overlay = (0, _vue.createVNode)(_menu.default, null, {
  98. default: function _default() {
  99. return [route.children.map(function (child) {
  100. return (0, _vue.createVNode)(_menu.default.Item, {
  101. "key": child.path || child.breadcrumbName
  102. }, {
  103. default: function _default() {
  104. return [itemRender({
  105. route: child,
  106. params: params,
  107. routes: routes,
  108. paths: addChildPath(tempPaths, child.path, params)
  109. })];
  110. }
  111. });
  112. })];
  113. }
  114. });
  115. }
  116. return (0, _vue.createVNode)(_BreadcrumbItem.default, {
  117. "overlay": overlay,
  118. "separator": separator,
  119. "key": path || route.breadcrumbName
  120. }, {
  121. default: function _default() {
  122. return [itemRender({
  123. route: route,
  124. params: params,
  125. routes: routes,
  126. paths: tempPaths
  127. })];
  128. }
  129. });
  130. });
  131. };
  132. return function () {
  133. var _getPropsSlot, _breadcrumbClassName;
  134. var crumbs;
  135. var routes = props.routes,
  136. _props$params = props.params,
  137. params = _props$params === void 0 ? {} : _props$params;
  138. var children = (0, _propsUtil.flattenChildren)((0, _propsUtil.getPropsSlot)(slots, props));
  139. var separator = (_getPropsSlot = (0, _propsUtil.getPropsSlot)(slots, props, 'separator')) !== null && _getPropsSlot !== void 0 ? _getPropsSlot : '/';
  140. var itemRender = props.itemRender || slots.itemRender || defaultItemRender;
  141. if (routes && routes.length > 0) {
  142. // generated by route
  143. crumbs = genForRoutes({
  144. routes: routes,
  145. params: params,
  146. separator: separator,
  147. itemRender: itemRender
  148. });
  149. } else if (children.length) {
  150. crumbs = children.map(function (element, index) {
  151. (0, _warning.default)((0, _typeof2.default)(element.type) === 'object' && (element.type.__ANT_BREADCRUMB_ITEM || element.type.__ANT_BREADCRUMB_SEPARATOR), 'Breadcrumb', "Only accepts Breadcrumb.Item and Breadcrumb.Separator as it's children");
  152. return (0, _vue.cloneVNode)(element, {
  153. separator: separator,
  154. key: index
  155. });
  156. });
  157. }
  158. var breadcrumbClassName = (_breadcrumbClassName = {}, (0, _defineProperty2.default)(_breadcrumbClassName, prefixCls.value, true), (0, _defineProperty2.default)(_breadcrumbClassName, "".concat(prefixCls.value, "-rtl"), direction.value === 'rtl'), _breadcrumbClassName);
  159. return (0, _vue.createVNode)("div", {
  160. "class": breadcrumbClassName
  161. }, [crumbs]);
  162. };
  163. }
  164. });
  165. exports.default = _default2;