nishant-design-system
Version:
Sense UI components library
123 lines (121 loc) • 5.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.AvatarGroup = void 0;
var React = _interopRequireWildcard(require("react"));
var _color = require("../../styles/variables/_color");
var _space = require("../../styles/variables/_space");
var _classify = _interopRequireDefault(require("../../utils/classify"));
var _Avatar = require("../Avatar");
var _Tooltip = require("../Tooltip");
var _AvatarGroupModule = _interopRequireDefault(require("./AvatarGroup.module.css"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
const COLOR_SEQUENCE = ['blue', 'green', 'orange', 'red', 'gray'];
const AvatarGroup = /*#__PURE__*/React.forwardRef((_ref, ref) => {
let {
children,
size = 'medium',
borderColor = _color.colorBackgroundTertiary,
maxTooltipLines = 7,
placement = 'top',
maxAvatars = 5,
tooltipElevation
} = _ref;
const childAvatarCount = React.Children.count(children);
const leftOverlap = {
small: _space.spaceXXSmall,
medium: `${parseInt(_space.spaceSmall) / 2}px`,
large: _space.spaceXSmall
};
let colorIndex = -1;
const avatarInGroup = (child, index, color) => {
const {
classNames
} = child.props;
const {
wrapper,
...restClassNames
} = classNames || {};
return /*#__PURE__*/React.cloneElement(child, {
size,
classNames: {
wrapper: (0, _classify.default)(_AvatarGroupModule.default.avatarInGroup, wrapper),
...restClassNames
},
style: {
borderColor,
marginLeft: `-${index !== 0 ? leftOverlap[size] : 0}`
},
color
});
};
const childrenArray = React.Children.toArray(children);
const totalAvatarCount = childrenArray.length;
const plusAvatar = () => {
const nameList = [];
for (let i = maxAvatars - 1; i < totalAvatarCount; i++) {
const child = childrenArray[i];
const {
text
} = child.props;
if (text) {
nameList.push(text);
}
}
const NameListNode = () => /*#__PURE__*/React.createElement("span", null, nameList.map(name => /*#__PURE__*/React.createElement(React.Fragment, {
key: name
}, name, /*#__PURE__*/React.createElement("br", null))));
return /*#__PURE__*/React.createElement(_Tooltip.Tooltip, {
body: /*#__PURE__*/React.createElement(NameListNode, null),
bodyMaxLines: maxTooltipLines,
placement: placement,
elevation: tooltipElevation
}, /*#__PURE__*/React.createElement("div", {
className: _AvatarGroupModule.default.plusAvatar
}, /*#__PURE__*/React.createElement(_Avatar.BaseAvatar, {
size: size,
color: "gray",
text: `+${childAvatarCount - maxAvatars + 1}`,
classNames: {
wrapper: _AvatarGroupModule.default.avatarInGroup
},
style: {
borderColor,
marginLeft: `-${leftOverlap[size]}`
}
})));
};
const childrenWithProps = React.Children.map(children, (child, index) => {
const {
imageSrc
} = child.props;
if (!imageSrc) {
colorIndex++;
if (colorIndex === COLOR_SEQUENCE.length) {
colorIndex = 0;
}
}
const color = COLOR_SEQUENCE[colorIndex];
if (childAvatarCount <= maxAvatars) {
return avatarInGroup(child, index, color);
} else {
if (index < maxAvatars - 1) {
return avatarInGroup(child, index, color);
} else if (index === maxAvatars) {
return plusAvatar();
}
}
});
return /*#__PURE__*/React.createElement("div", {
className: (0, _classify.default)(_AvatarGroupModule.default.avatarGroupContainer, {
[_AvatarGroupModule.default.largeSize]: size === 'large',
[_AvatarGroupModule.default.mediumSize]: size === 'medium',
[_AvatarGroupModule.default.smallSize]: size === 'small'
}),
ref: ref
}, childrenWithProps);
});
exports.AvatarGroup = AvatarGroup;