Group.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.groupProps = exports.default = void 0;
  7. var _vue = require("vue");
  8. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  9. var _vnode = require("../_util/vnode");
  10. var _Avatar = _interopRequireDefault(require("./Avatar"));
  11. var _popover = _interopRequireDefault(require("../popover"));
  12. var _propsUtil = require("../_util/props-util");
  13. var _useConfigInject = _interopRequireDefault(require("../config-provider/hooks/useConfigInject"));
  14. var _style = _interopRequireDefault(require("./style"));
  15. var _AvatarContext = require("./AvatarContext");
  16. const groupProps = () => ({
  17. prefixCls: String,
  18. maxCount: Number,
  19. maxStyle: {
  20. type: Object,
  21. default: undefined
  22. },
  23. maxPopoverPlacement: {
  24. type: String,
  25. default: 'top'
  26. },
  27. maxPopoverTrigger: String,
  28. /*
  29. * Size of avatar, options: `large`, `small`, `default`
  30. * or a custom number size
  31. * */
  32. size: {
  33. type: [Number, String, Object],
  34. default: 'default'
  35. },
  36. shape: {
  37. type: String,
  38. default: 'circle'
  39. }
  40. });
  41. exports.groupProps = groupProps;
  42. const Group = (0, _vue.defineComponent)({
  43. compatConfig: {
  44. MODE: 3
  45. },
  46. name: 'AAvatarGroup',
  47. inheritAttrs: false,
  48. props: groupProps(),
  49. setup(props, _ref) {
  50. let {
  51. slots,
  52. attrs
  53. } = _ref;
  54. const {
  55. prefixCls,
  56. direction
  57. } = (0, _useConfigInject.default)('avatar', props);
  58. const groupPrefixCls = (0, _vue.computed)(() => `${prefixCls.value}-group`);
  59. const [wrapSSR, hashId] = (0, _style.default)(prefixCls);
  60. (0, _vue.watchEffect)(() => {
  61. const context = {
  62. size: props.size,
  63. shape: props.shape
  64. };
  65. (0, _AvatarContext.useAvatarProviderContext)(context);
  66. });
  67. return () => {
  68. const {
  69. maxPopoverPlacement = 'top',
  70. maxCount,
  71. maxStyle,
  72. maxPopoverTrigger = 'hover',
  73. shape
  74. } = props;
  75. const cls = {
  76. [groupPrefixCls.value]: true,
  77. [`${groupPrefixCls.value}-rtl`]: direction.value === 'rtl',
  78. [`${attrs.class}`]: !!attrs.class,
  79. [hashId.value]: true
  80. };
  81. const children = (0, _propsUtil.getPropsSlot)(slots, props);
  82. const childrenWithProps = (0, _propsUtil.flattenChildren)(children).map((child, index) => (0, _vnode.cloneElement)(child, {
  83. key: `avatar-key-${index}`
  84. }));
  85. const numOfChildren = childrenWithProps.length;
  86. if (maxCount && maxCount < numOfChildren) {
  87. const childrenShow = childrenWithProps.slice(0, maxCount);
  88. const childrenHidden = childrenWithProps.slice(maxCount, numOfChildren);
  89. childrenShow.push((0, _vue.createVNode)(_popover.default, {
  90. "key": "avatar-popover-key",
  91. "content": childrenHidden,
  92. "trigger": maxPopoverTrigger,
  93. "placement": maxPopoverPlacement,
  94. "overlayClassName": `${groupPrefixCls.value}-popover`
  95. }, {
  96. default: () => [(0, _vue.createVNode)(_Avatar.default, {
  97. "style": maxStyle,
  98. "shape": shape
  99. }, {
  100. default: () => [`+${numOfChildren - maxCount}`]
  101. })]
  102. }));
  103. return wrapSSR((0, _vue.createVNode)("div", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, attrs), {}, {
  104. "class": cls,
  105. "style": attrs.style
  106. }), [childrenShow]));
  107. }
  108. return wrapSSR((0, _vue.createVNode)("div", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, attrs), {}, {
  109. "class": cls,
  110. "style": attrs.style
  111. }), [childrenWithProps]));
  112. };
  113. }
  114. });
  115. var _default = exports.default = Group;