BreadcrumbItem.js 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. "use client";
  2. var __rest = this && this.__rest || function (s, e) {
  3. var t = {};
  4. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
  5. if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
  6. if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
  7. }
  8. return t;
  9. };
  10. import * as React from 'react';
  11. import DownOutlined from "@ant-design/icons/es/icons/DownOutlined";
  12. import { devUseWarning } from '../_util/warning';
  13. import { ConfigContext } from '../config-provider';
  14. import Dropdown from '../dropdown/dropdown';
  15. import BreadcrumbSeparator from './BreadcrumbSeparator';
  16. import { renderItem } from './useItemRender';
  17. export const InternalBreadcrumbItem = props => {
  18. const {
  19. prefixCls,
  20. separator = '/',
  21. children,
  22. menu,
  23. overlay,
  24. dropdownProps,
  25. href
  26. } = props;
  27. // Warning for deprecated usage
  28. if (process.env.NODE_ENV !== 'production') {
  29. const warning = devUseWarning('Breadcrumb.Item');
  30. warning.deprecated(!('overlay' in props), 'overlay', 'menu');
  31. }
  32. /** If overlay is have Wrap a Dropdown */
  33. const renderBreadcrumbNode = breadcrumbItem => {
  34. if (menu || overlay) {
  35. const mergeDropDownProps = Object.assign({}, dropdownProps);
  36. if (menu) {
  37. const _a = menu || {},
  38. {
  39. items
  40. } = _a,
  41. menuProps = __rest(_a, ["items"]);
  42. mergeDropDownProps.menu = Object.assign(Object.assign({}, menuProps), {
  43. items: items === null || items === void 0 ? void 0 : items.map((_a, index) => {
  44. var {
  45. key,
  46. title,
  47. label,
  48. path
  49. } = _a,
  50. itemProps = __rest(_a, ["key", "title", "label", "path"]);
  51. let mergedLabel = label !== null && label !== void 0 ? label : title;
  52. if (path) {
  53. mergedLabel = /*#__PURE__*/React.createElement("a", {
  54. href: `${href}${path}`
  55. }, mergedLabel);
  56. }
  57. return Object.assign(Object.assign({}, itemProps), {
  58. key: key !== null && key !== void 0 ? key : index,
  59. label: mergedLabel
  60. });
  61. })
  62. });
  63. } else if (overlay) {
  64. mergeDropDownProps.overlay = overlay;
  65. }
  66. return /*#__PURE__*/React.createElement(Dropdown, Object.assign({
  67. placement: "bottom"
  68. }, mergeDropDownProps), /*#__PURE__*/React.createElement("span", {
  69. className: `${prefixCls}-overlay-link`
  70. }, breadcrumbItem, /*#__PURE__*/React.createElement(DownOutlined, null)));
  71. }
  72. return breadcrumbItem;
  73. };
  74. // wrap to dropDown
  75. const link = renderBreadcrumbNode(children);
  76. if (link !== undefined && link !== null) {
  77. return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("li", null, link), separator && /*#__PURE__*/React.createElement(BreadcrumbSeparator, null, separator));
  78. }
  79. return null;
  80. };
  81. const BreadcrumbItem = props => {
  82. const {
  83. prefixCls: customizePrefixCls,
  84. children,
  85. href
  86. } = props,
  87. restProps = __rest(props, ["prefixCls", "children", "href"]);
  88. const {
  89. getPrefixCls
  90. } = React.useContext(ConfigContext);
  91. const prefixCls = getPrefixCls('breadcrumb', customizePrefixCls);
  92. return /*#__PURE__*/React.createElement(InternalBreadcrumbItem, Object.assign({}, restProps, {
  93. prefixCls: prefixCls
  94. }), renderItem(prefixCls, restProps, children, href));
  95. };
  96. BreadcrumbItem.__ANT_BREADCRUMB_ITEM = true;
  97. export default BreadcrumbItem;