useItemRender.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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 classNames from 'classnames';
  12. import pickAttrs from "rc-util/es/pickAttrs";
  13. function getBreadcrumbName(route, params) {
  14. if (route.title === undefined || route.title === null) {
  15. return null;
  16. }
  17. const paramsKeys = Object.keys(params).join('|');
  18. return typeof route.title === 'object' ? route.title : String(route.title).replace(new RegExp(`:(${paramsKeys})`, 'g'), (replacement, key) => params[key] || replacement);
  19. }
  20. export function renderItem(prefixCls, item, children, href) {
  21. if (children === null || children === undefined) {
  22. return null;
  23. }
  24. const {
  25. className,
  26. onClick
  27. } = item,
  28. restItem = __rest(item, ["className", "onClick"]);
  29. const passedProps = Object.assign(Object.assign({}, pickAttrs(restItem, {
  30. data: true,
  31. aria: true
  32. })), {
  33. onClick
  34. });
  35. if (href !== undefined) {
  36. return /*#__PURE__*/React.createElement("a", Object.assign({}, passedProps, {
  37. className: classNames(`${prefixCls}-link`, className),
  38. href: href
  39. }), children);
  40. }
  41. return /*#__PURE__*/React.createElement("span", Object.assign({}, passedProps, {
  42. className: classNames(`${prefixCls}-link`, className)
  43. }), children);
  44. }
  45. export default function useItemRender(prefixCls, itemRender) {
  46. const mergedItemRender = (item, params, routes, path, href) => {
  47. if (itemRender) {
  48. return itemRender(item, params, routes, path);
  49. }
  50. const name = getBreadcrumbName(item, params);
  51. return renderItem(prefixCls, item, name, href);
  52. };
  53. return mergedItemRender;
  54. }