Item.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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 React, { Children, useContext } from 'react';
  11. import classNames from 'classnames';
  12. import { cloneElement } from '../_util/reactNode';
  13. import { ConfigContext } from '../config-provider';
  14. import { Col } from '../grid';
  15. import { ListContext } from './context';
  16. export const Meta = _a => {
  17. var {
  18. prefixCls: customizePrefixCls,
  19. className,
  20. avatar,
  21. title,
  22. description
  23. } = _a,
  24. others = __rest(_a, ["prefixCls", "className", "avatar", "title", "description"]);
  25. const {
  26. getPrefixCls
  27. } = useContext(ConfigContext);
  28. const prefixCls = getPrefixCls('list', customizePrefixCls);
  29. const classString = classNames(`${prefixCls}-item-meta`, className);
  30. const content = /*#__PURE__*/React.createElement("div", {
  31. className: `${prefixCls}-item-meta-content`
  32. }, title && /*#__PURE__*/React.createElement("h4", {
  33. className: `${prefixCls}-item-meta-title`
  34. }, title), description && /*#__PURE__*/React.createElement("div", {
  35. className: `${prefixCls}-item-meta-description`
  36. }, description));
  37. return /*#__PURE__*/React.createElement("div", Object.assign({}, others, {
  38. className: classString
  39. }), avatar && /*#__PURE__*/React.createElement("div", {
  40. className: `${prefixCls}-item-meta-avatar`
  41. }, avatar), (title || description) && content);
  42. };
  43. const InternalItem = /*#__PURE__*/React.forwardRef((props, ref) => {
  44. const {
  45. prefixCls: customizePrefixCls,
  46. children,
  47. actions,
  48. extra,
  49. styles,
  50. className,
  51. classNames: customizeClassNames,
  52. colStyle
  53. } = props,
  54. others = __rest(props, ["prefixCls", "children", "actions", "extra", "styles", "className", "classNames", "colStyle"]);
  55. const {
  56. grid,
  57. itemLayout
  58. } = useContext(ListContext);
  59. const {
  60. getPrefixCls,
  61. list
  62. } = useContext(ConfigContext);
  63. const moduleClass = moduleName => {
  64. var _a, _b;
  65. return classNames((_b = (_a = list === null || list === void 0 ? void 0 : list.item) === null || _a === void 0 ? void 0 : _a.classNames) === null || _b === void 0 ? void 0 : _b[moduleName], customizeClassNames === null || customizeClassNames === void 0 ? void 0 : customizeClassNames[moduleName]);
  66. };
  67. const moduleStyle = moduleName => {
  68. var _a, _b;
  69. return Object.assign(Object.assign({}, (_b = (_a = list === null || list === void 0 ? void 0 : list.item) === null || _a === void 0 ? void 0 : _a.styles) === null || _b === void 0 ? void 0 : _b[moduleName]), styles === null || styles === void 0 ? void 0 : styles[moduleName]);
  70. };
  71. const isItemContainsTextNodeAndNotSingular = () => {
  72. let result = false;
  73. Children.forEach(children, element => {
  74. if (typeof element === 'string') {
  75. result = true;
  76. }
  77. });
  78. return result && Children.count(children) > 1;
  79. };
  80. const isFlexMode = () => {
  81. if (itemLayout === 'vertical') {
  82. return !!extra;
  83. }
  84. return !isItemContainsTextNodeAndNotSingular();
  85. };
  86. const prefixCls = getPrefixCls('list', customizePrefixCls);
  87. const actionsContent = actions && actions.length > 0 && (/*#__PURE__*/React.createElement("ul", {
  88. className: classNames(`${prefixCls}-item-action`, moduleClass('actions')),
  89. key: "actions",
  90. style: moduleStyle('actions')
  91. }, actions.map((action, i) => (
  92. /*#__PURE__*/
  93. // eslint-disable-next-line react/no-array-index-key
  94. React.createElement("li", {
  95. key: `${prefixCls}-item-action-${i}`
  96. }, action, i !== actions.length - 1 && /*#__PURE__*/React.createElement("em", {
  97. className: `${prefixCls}-item-action-split`
  98. }))))));
  99. const Element = grid ? 'div' : 'li';
  100. const itemChildren = /*#__PURE__*/React.createElement(Element, Object.assign({}, others, !grid ? {
  101. ref
  102. } : {}, {
  103. className: classNames(`${prefixCls}-item`, {
  104. [`${prefixCls}-item-no-flex`]: !isFlexMode()
  105. }, className)
  106. }), itemLayout === 'vertical' && extra ? [/*#__PURE__*/React.createElement("div", {
  107. className: `${prefixCls}-item-main`,
  108. key: "content"
  109. }, children, actionsContent), /*#__PURE__*/React.createElement("div", {
  110. className: classNames(`${prefixCls}-item-extra`, moduleClass('extra')),
  111. key: "extra",
  112. style: moduleStyle('extra')
  113. }, extra)] : [children, actionsContent, cloneElement(extra, {
  114. key: 'extra'
  115. })]);
  116. return grid ? (/*#__PURE__*/React.createElement(Col, {
  117. ref: ref,
  118. flex: 1,
  119. style: colStyle
  120. }, itemChildren)) : itemChildren;
  121. });
  122. const Item = InternalItem;
  123. Item.Meta = Meta;
  124. export default Item;